它是一种很好的编码标准,允许ASP.NET MVC控制器动作直接访问存储库(即使服务层负责繁重的工作,例如LoginService.Authorize())以检索,添加或更新数据?还是应该一切通过服务,并从那里到仓库?通过服务或直接访问存储库?
1
A
回答
2
这是更好地去通过服务层(这取决于如何你虽然实现了它),因为这是它的点 - 是一个单一的接入点,因此任何具体业务,你做的事情有,是代表并在所有呼叫者中实施。
4
对于较小的应用/腹板,我倾向于不使用服务层,因为它只是映射库方法1:1,并且我松KISS。但最终,这取决于商业模式;存储库提取数据库访问权限,服务封装逻辑。
1
这实际上取决于复杂性。如果你正在处理任何transcation scoping,我肯定会将它从控制器中解耦到服务层。
0
在我看来,这取决于你的设计/建筑。仓库的目的是什么?执行CRUD操作(创建,读取,更新和删除)。
如果您在经典的三层体系结构中使用贫血域模型,则所有应用于模型的逻辑都是在服务中生成的。 在这种情况下,选择是显而易见的:您不应该直接调用存储库。 为什么?由于你的模型很傻,逻辑在服务中,你可能会创建无效模型。如果您可以调用存储库,则可以在数据库中创建/更新无效模型。如果你打电话给服务,它应该能够在创建/更新它之前正确或填充你的模型。
如果您在洋葱式架构中使用丰富域模型,则它不同。因为你的模型应该总是有效的(当你从构造函数或者工厂创建一个时,所有的验证都被执行了,当你更新一个时它是一样的),你可以没有任何问题直接调用存储库。 在这种情况下,所有逻辑直接在模型中,服务仅用于存储不属于特定模型的逻辑。
现在的问题不是“如何使用资料库”,而是“我需要什么样的设计/建筑?”第一个问题将被回答:-)
相关问题
- 1. 使用SSIS或链接服务器访问BO存储库
- 2. 直接连接到SQL数据库或通过客户端 - 服务器服务
- 3. 通过SSH访问GitHub存储库
- 4. 通过Apache Sling访问jackrabbit存储库
- 5. 通过Web服务访问数据库
- 6. 访问azure存储服务
- 7. 来自实体的访问存储库或服务
- 8. 访问链接服务器直接
- 9. Capistrano - 确保存储库可以通过我的服务器访问
- 10. 颠覆服务器与通过乌龟的网络存储库访问
- 11. STM32L1的直接存储器访问RX
- 12. 无法通过链接服务器访问数据库
- 13. 无法通过远程连接访问数据库服务器
- 14. (Xpages)SOA或直接数据库访问
- 15. 防止直接访问JSON Web服务
- 16. j2me +直接访问MS SQL服务器
- 17. 移动平台直接与数据库或通过Web服务通信?
- 18. 通过Twitter API访问直接消息
- 19. 通过url直接访问区域
- 20. 通过JavaScript直接访问MongoDB
- 21. 防止通过.htaccess直接访问robots.txt
- 22. 验证功能应该直接访问存储库吗?
- 23. 使用Web服务通过AJAX直接
- 24. 您是否可以备份/创建Subversion存储库的转储而不直接访问服务器?
- 25. 问题与gitlab通过ssh访问存储库
- 26. 通过Nexus Repository Manager访问JBoss存储库的问题
- 27. 直接访问数据库vs网络服务
- 28. 服务总线Vs直接访问数据库
- 29. Joern:访问图直接数据库而不Neo4j的服务器
- 30. Web服务客户端VS直接访问远程数据库