可能是一个愚蠢的问题:
域实体应该完全不了解持久层,因此只能通过存储库与之通信,因此域实体应该是 Persistence Ignorant 。
将域层与持久层完全解耦的常用方法是使用存储库,其中存储库接口直播在域程序集中,资源库实现存在于持久层程序集 PLA 中。
但我对这个术语有点困惑。也就是说,我知道将 Repository interface 放在 PLA 中至少有两个原因是个坏主意,首先是因为这会强制域程序集保持对 PLA 的引用,现在 Repository接口是根据较低级别的组件定义的(即现在持久层决定了存储库接口)。但是,无论出于何种原因,我们确实将 Repository interface 放在 PLA 中,然后:
a)我们仍然认为域层(即其实体)是 Persistent Ignorant 吗?我假设是的,因为域实体仍然完全不知道持久层?!
b)在这种情况下,正确的表达是“域组件现在依赖于 PLA ”或者“域层现在依赖于持久层“或......?
谢谢
答案 0 :(得分:1)
a)我们仍然可以争辩说Domain层(即它的实体)是Persistent Ignorant吗?我假设是的,因为域实体仍然完全不知道持久层?!
域实体仍然不知道持久层(只要它们使用接口)。然而,程序集依赖于持久层。
b)在这种情况下,正确的表达是“域组件现在依赖于PLA”或者“域层现在依赖于持久层”或者......?
无关紧要。存储库接口的目的是抽象出数据层并使域模型100%持久性无知。
新DDD用户的典型错误是在数据库之后对域模型进行建模(即首先创建数据库然后尝试使域模型适合),而不是相反。
答案 1 :(得分:0)
a)域层服务(甚至实体偶尔)需要从存储库获取数据并不罕见。实际上,将存储库接口放在持久层中会更频繁地破坏PI。
b)我想你可以两个都说。