我应该总是使用服务,还是可以直接使用存储库?

jga*_*fin 9 domain-driven-design

当我尝试关注DDD时,我是否应该经常使用这些服务?

或者我可以直接使用存储库来获取域对象吗?

aut*_*att 9

就个人而言,我不喜欢在控制器或一般的表示层中看到存储库.但我已经多次看到它,并且在DDD的背景下它没有任何问题.

我认为答案是,这取决于你的项目有多大.在更复杂的项目中更常见服务层.而更简单的MVC网站例如直接使用存储库.

  • 仅仅因为从存储库中获取对象并不意味着您处理业务逻辑.它只是*从域层获取对象*以在另一层中使用.而且我无法看到单行userRepository.GetUserByEmail(email)如何比accountService.GetUserByEmail(email)更多地膨胀控制器. (4认同)
  • 控制器往往会很快膨胀。原因之一是因为开发人员最终将业务逻辑留在了他们的控制器中。业务逻辑应该首先只存在于域层中,然后才存在于服务层中-而不是在控制器中,而不在存储库中。通过在控制器中使用(应用程序)服务,可以避免这种情况。因此,例如,您将调用accountService.GetUserByEmail(email)或catalogueService.GetProductViewModel。您的控制器保持良好而精简的状态,并且您的应用程序服务与各个存储库进行协调。 (2认同)
  • 你把我的“我不喜欢看……”变成了“你不应该使用……”。前者意味着偏好。我不是要告诉你该怎么做。你的问题总会产生一个主观的答案,这里没有对错之分。我是说,作为处理过大型控制器的人,我更喜欢并建议将尽可能多的代码保留在控制器之外。我还使用规范模式将我的查询保留在我的域层中。有关更多信息,请参阅 [此答案](http://stackoverflow.com/questions/8234068/in-which-layer-should-specification-pattern-objects-be-newed-up/8244451#8244451)。 (2认同)