【发布时间】:2012-09-09 01:42:56
【问题描述】:
我曾开发过几个尝试遵守 DDD 原则的应用程序,我注意到我们最终会遇到服务层和存储库之间存在重复的情况,感觉就像代码异味。
对于服务层中的大多数操作,它似乎直接映射到 CRUD 操作、GetAll、GetById、Create、Delete 等。架构的流程在以下几行之内:我有一个 controller 调用 Service layer 调用 Repository 调用 ORM 与 Backend 对话> ..
因此,例如 GetAll 将同时存在于 SL 和存储库中。现在,如果我们有一个更改/业务要求 GetAll 应该忽略某些项目,我应该怎么做,我应该在存储库中忽略这些,还是应该进入服务层的业务逻辑?如果我们只是有一个服务层直接调用 ORM,生活会不会更轻松?
总结:我知道服务层可以抽象一些业务逻辑,但是在大多数情况下,它处理简单的 CRUD 操作时,摆脱存储库不是更容易吗?但是,如果 SL also 包含一些业务逻辑复杂的方法,这些方法应该通过存储库吗?从良好的设计角度来看,我应该支持一致性并始终通过存储库还是保持简单并且仅在存储库不是简单的一对一映射到 CRUD 操作时才使用存储库。
PS:我意识到似乎有类似的问题,但没有找到任何令人满意的答案
【问题讨论】:
标签: c# domain-driven-design ddd-repositories ooad