0

所以我正在阅读这本 DDD 书,同时设计一个新系统。在 DDD 书中,他们有一个示例,其中实体具有私有成员,例如 ID 和其他值。

举个例子,我们有一个用户实体,它有 id 和一组它有权参加的课程。

然后在 DDD 风格中,如果我们说在用户实体上,他们会使用 GrantRightTo(Course c) 之类的东西。这一切都很好,因为在该功能中,我现在可以检查任何业务规则,例如用户是否注册了太多课程。聪明的!

另一种选择是任何人都有权收集课程,但控制器需要知道不好的业务规则。

现在首先是 EF 代码的问题,我无法像我的书那样让我的课程集合成为私有/受保护的并且仍然被持久化 (dbcontext) 那么该怎么办?

我当然可以将集合公开,并且仍然有像 GrantRightTo 这样的方法,但是其他开发人员可能会以错误的方式执行此操作,因此并不理想。

该怎么办?

4

1 回答 1

2

最好的方法是将数据库模型与 DTO(数据传输对象)映射。

您将使用 DTO 模型创建一个额外的层。然后,您的真实域模型可以基于此 DB 模型。在您的领域模型中,您可以抽象出底层模型中的差异。

这也有一个缺点,即如果您的项目发生垂直变化,您需要同时维护这两个模型。但是,它还允许您的域模型独立于您的物理数据库模型进行更改。

于 2013-04-21T00:24:08.600 回答