C# 泛在语言中的业务规则和DDD域行为?

C# 泛在语言中的业务规则和DDD域行为?,c#,domain-driven-design,domain-model,C#,Domain Driven Design,Domain Model,我有一种情况,我正在建模一个域,该域的业务规则是 当用户需要查看类别时。。用户应该同时看到这两个帐户 和商店类别。因为存储从 主帐户 在damain模型中包含此业务规则的最佳方式是什么?记住无处不在的语言 这就是我的想法 Store.InheritCategoriesFrom(Account.Categories); Store.GetAllCategories(); 然后在域中的行为函数可以是 public List<Category> AllCategories { get;

我有一种情况,我正在建模一个域,该域的业务规则是

当用户需要查看类别时。。用户应该同时看到这两个帐户 和商店类别。因为存储从 主帐户

在damain模型中包含此业务规则的最佳方式是什么?记住无处不在的语言

这就是我的想法

Store.InheritCategoriesFrom(Account.Categories);
Store.GetAllCategories();
然后在域中的行为函数可以是

public List<Category> AllCategories { get; set; }

public InheritCategoriesFrom(List<Category> AccountCategories)
{
      //code to merge Shop.Categories with Account Categories into AllCategories  here..

}

public List<Category> GetAllCategories()
{
      return AllCategories;
}
public列出所有类别{get;set;}
公共继承分类来源(列出帐户类别)
{
//用于将具有帐户类别的店铺类别合并到此处的所有类别的代码。。
}
公共列表GetAllCategories()
{
返回所有类别;
}
如果我错了,请告诉我,为什么?所以我可以开始朝正确的方向思考

当用户需要查看类别时。。用户应同时查看帐户和商店类别

这不是业务规则,而是UI视图要求=>视图模型数据=>可以直接从数据库中查询,而不必只进行一次查询

因为商店从主帐户继承类别

这是一个实现细节,当谈到查询时,它不能是一个业务规则和无用的细节(甚至是有害的)


只需在您的存储中使用一个方法(或使用),该方法将返回视图模型所需的所有数据。不需要继承。只需亲吻。

从有限的信息来看,这看起来还可以。我建议将
AllCategories
设置为私有字段。从DDD的角度来看,我会质疑“继承”这个词,因为它是一个我自然不希望企业使用的术语,“帐户”、“商店”和“类别”等术语对我来说太笼统了。作为一个对你的领域一无所知的人,他们不会透露任何领域知识。例如,它们应该是“用户帐户”、“数据存储”、“产品类别”吗?或者“信用账户”、“沃尔玛商店”、“GoodsCategory”?等等,+1继承似乎不是一个特定于领域的术语。另外,如果它只是只读的东西,我就不会费心围绕它制作一个漂亮的富模型。您可以从域层(或者直接从DB,如果您使用CQRS)获取
AccountCategories
StoreCategories
,然后将它们合并以获得正确的视图模型。对此,我深表歉意,一个帐户就是我使用的术语,领域专家用来解释一个业务帐户(感谢您向我指出)像沃尔玛这样的企业,可以有很多商店。。。e、 g韦伯斯商店,中央车站商店。一个商业帐户可以有许多种类的产品,在每个商店销售,但是商店经理可以添加更多(不同种类的)商店特有的产品。所以商店会展示所有种类的产品。。(我希望这更有意义)域模型更多的是处理命令,而不是查询便利性。这根本不是我想在这个领域解决的问题。