【发布时间】:2025-12-22 20:45:11
【问题描述】:
哪种方法更好更正确。
class Project
int Id
string Name
int CategoryId
或
class Project
int Id,
string Name
Category CategoryId
【问题讨论】:
-
你的第二个例子最后应该读
Category Category吗?Category对象是 Category 类的实例还是表示类别 id 的值对象? -
它应该是 Category.CategoryID。在我发布的示例中,它是类别类而不是值对象。 CategoryID 是 Project 表中的外键。
-
在这种情况下,它完全取决于您的域。如果您将
Categories作为Project聚合根的一部分,那么您必须接受该决定附带的所有规则(此处列出的规则太多了)。主要是您不能直接或在Project之外创建或修改Category。您必须通过Project聚合根上的方法修改Category。尽管我不知道您的域,但我想您会想在其他地方编辑/创建Categories。如果是这种情况,那么示例 1 更正确(对于 DDD)。 -
目前我使用映射 1:1 存储过程和域对象。这种方法好吗?将来我想将存储库模式与经典 ADO.NET 一起使用。
-
持久性细节通常不在 DDD 范围内。理想情况下,在练习 DDD 时,您希望设计一个以应用程序/领域为中心的模型来对您的领域进行建模。因此,任何东西都不应该从您选择的持久层向上爬到您的域模型中。所以换句话说,持久性可以以任何你喜欢的方式完成。
标签: domain-driven-design entities