Domain driven design 域实体设计

Domain driven design 域实体设计,domain-driven-design,entities,Domain Driven Design,Entities,哪种方法更好更正确 class Project int Id string Name int CategoryId 或 项目,而不是项目,因为每个实例将代表一个项目。IMHO域类,而且,所有类都应以单数声明,因为它们代表一个类型。对不起,两者都代表单个项目。重点放在Category属性上,这在某种程度上取决于实现(即您使用的是Hibernate还是其他有自己风格的ORM?)。您可能不想将ID称为“Category”,除非某种ORM魔法使其具有吸引力。ID是一个ID,而不是什么。我将本机ADO.

哪种方法更好更正确

class Project
int Id
string Name
int CategoryId


项目,而不是项目,因为每个实例将代表一个项目。

IMHO域类,而且,所有类都应以单数声明,因为它们代表一个类型。

对不起,两者都代表单个项目。重点放在Category属性上,这在某种程度上取决于实现(即您使用的是Hibernate还是其他有自己风格的ORM?)。您可能不想将ID称为“Category”,除非某种ORM魔法使其具有吸引力。ID是一个ID,而不是什么。我将本机ADO.NET与DataReader对象一起使用。到目前为止,我们使用域对象1:1映射存储过程。我想优化领域模型。在数据库中,我们有项目表和类别代码本。Project只能有一个CategoryIf,当您从数据库检索项目时,category对象是完全构造的(而不仅仅是一个整数),那么您可能希望将其称为category。否则,类别id。从逻辑上讲,应该在相关的实体(一对一、一对多等)中使用实体类型,如果使用JPA,通常项目有一个或多个类别,而不是CategoryID。不,我使用了原生Ado.Net和DataReader对象。第二个示例是否应在结尾处阅读
类别
Category
对象是表示类别id的类别类的实例还是值对象?它应为Category.CategoryID。在我发布的示例中,它是Category类而不是value对象。CategoryID是项目表中的外键。在这种情况下,它完全取决于您的域。如果您有
类别
作为
项目
聚合根目录的一部分,那么您必须接受该决策附带的所有规则(这里列出的规则太多了)。主要问题是,您不能直接或在
项目
之外创建或修改
类别
。您必须通过
项目
聚合根目录上的方法修改
类别
。虽然我不知道你的领域,但我想你会想在别处编辑/创建
类别。如果是这种情况,那么示例1更正确(对于DDD)。这个方法好吗?将来,我希望将存储库模式与经典的ADO.NET结合使用。持久性详细信息通常不在DDD的范围内。理想情况下,在实践DDD时,您希望设计一个以应用程序/域为中心的模型,为您的域建模。因此,任何东西都不应该从您选择的持久层向上爬到您的域模型中。换句话说,坚持可以用任何你喜欢的方式来完成。
class Project
int Id,
string Name
Category CategoryId