首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >领域建模在庙里牧师的服务

领域建模在庙里牧师的服务
EN

Stack Overflow用户
提问于 2019-01-15 21:16:59
回答 1查看 38关注 0票数 1

我试图通过尝试建模事件来实践我的域建模。

酒和细面,并同献的供物,称为同献的祭物。仅细面粉就被称为伴随的素祭.所附的素祭,不必摆在坛的角上,也不可用乳香献上。它需要盐,它被烧在外面的祭坛上。 酒倒在祭坛上。它不是倒在火上的。祭司却要举起手,倒在坛的基座上,从那里下到屎桶。

我试图通过表达我们正在处理的记录类型来简化:

代码语言:javascript
复制
type AlterLocations = 
    | Outer
    | Corner
    | Base

type AccompanyingOfferings = 
    | Wine
    | Flour

type AccompanyingMealOfferings = 
    | FineFlour

type Auxilary = 
    | Salt
    | Frankinsense

type Offering =
    {
        Name: string
    }

然而,我被困在实际事件的建模上。

代码语言:javascript
复制
type MealOffering = 
    {
        Offering:Offering
        Flour:AccompanyingMealOfferings
        Waved: bool
        RequiresSalt: bool
        OfferedWithFrankinse: bool
        ShouldBeBroughtToCorner: bool
        EntirelyBurnt: bool
    }

如何表示可能有多个标记/标志的类型?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-15 21:43:56

您可以从阿古处理命令行参数的方式中获取一个页面,并执行如下操作:

代码语言:javascript
复制
type OfferingFlags =
    | Waved
    | RequiresSalt
    | OfferedWithFrankincense
    | ShouldBeBroughtToCorner
    | EntirelyBurnt

然后,MealOffering类型可能如下所示:

代码语言:javascript
复制
type MealOffering = 
    {
        Offering: Offering
        Flour: AccompanyingMealOfferings
        Flags: OfferingFlags list
    }

列表中不存在的标志表示false值,列表中的标志表示该标志的true值。也就是说,为了检查祭品是否需要盐,你应该这样做:

代码语言:javascript
复制
offering.Flags |> List.contains RequiresSalt

与之配套的供餐单(需要盐、完全烧焦,但不需要招手、带到角落或提供乳香),看上去如下:

代码语言:javascript
复制
[ RequiresSalt; EntirelyBurnt ]

这种建模方法的优点是,无论您有多少标志,您都可以添加一个新标志,而不必编辑MealOffering类型。这也可能是一个缺点,因为当您将每个标志分别建模为一个bool时,每当您添加一个新标志时,编译器都会强迫您在任何地方都考虑它--而通过将其建模为一个DU值列表,编译器不会强迫您在需要检查的地方检查新的RequiresSomethingElse标志。但是,如果您认为您已经完成了添加新标志,或者您添加的任何新标志在大多数地方也应该默认为false,那么OfferingFlags list方法通常是一个很好的方法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54206931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档