域驱动设计,SOC和实体识别

Eri*_*bes 6 mapping domain-driven-design separation-of-concerns

我一直在试图围绕DDD以及它与MVC的关系,但我在实体识别方面遇到了麻烦.

特别是,我试图在我的演示文稿,域和数据模型之间保持严格的分离.我的问题在于如何保持跨越这些边界的实体识别.为了澄清,我使用单独的类来表示不同上下文中的相同实体 - 例如,我有一个'ShipmentRequest'域类,几个'ShipmentRequestView'表示类(取决于特定视图所需的属性),以及'shipment_request'数据库表(我的数据模型).

我觉得使用'ID'属性(如ShipmentRequestId)会违反我想要实现的分离,因为这个ID属性是一个数据库问题,而不是域关注; 我不想在图层之间传递相同的对象,因为这意味着将不需要的数据传递到我的表示层.

如何保留这种分离,并跟踪这些层之间的身份?

小智 2

如果实体中没有 Id 字段,则无法将其映射到数据库行。因此,这个 id 字段即使与您的实体无关,也必须泄漏到您的域模型中。

我觉得使用表示模型通常是矫枉过正的,特别是如果您想要实现的是隐藏某些属性。

我认为关注点分离主要是由有界上下文驱动的。例如,您的 Person、PersonView 和 Person 表似乎都与事务处理上下文相关。在这样的上下文中,我什至不会有 PersonView,并且 person 表将被抽象掉。

另一方面,如果您处于报告环境中,则 PersonView 会更有用。

我认为上下文比任何分层方案都重要得多。

至于您的 person 实体中缺少自然键,这可能意味着 Person 并不是真正的实体。例如,在任何现实生活中的应用程序中,总是有一个与人相关联的数字:员工有员工编号,客户有帐号等。此业务 ID 绝对是域的一部分。