我从DDD开始。我对DDD应用程序中涉及的几个层之间的交互有点困惑。
我可以从演示层调用我的存储库吗?如果不是,我必须复制我的服务层中的存储库提供的CRUD功能(哪个会依次使用存储库来实现这些功能)?最好的方法是什么?
答案 0 :(得分:3)
表达层究竟是什么意思? 如果你的意思是Controller / Presenter,那就完全没问题了。我使用的经验法则是,如果控制器操作是4行代码或更多代码,我应该考虑重构到应用程序服务类,但仍然 - 都在应用程序级别,你当然可以使用存储库。
你表达问题的方式 - 我当然可能误解了这一点 - 听起来很可疑,就像你在考虑从你的视图或代码隐藏中引用存储库一样。在那种情况下,我会说不!没有!没有!
答案 1 :(得分:1)
当然,您可以从表示层调用存储库。我的一条建议是让您的表示层依赖于存储库的抽象而不是实现,即UserSession依赖于IPersonRepository接口而不是PersonRepository类。它不仅可以很好地分离问题,而且可以使测试更容易。
去吧!
答案 2 :(得分:0)
我通常使用服务层,但使用您的存储库没有任何害处
答案 3 :(得分:0)
正如Kevin所说,与控制器或演示者一起使用可以带来很多好处。
这些包括明确区分关注点和可测试性。
就个人而言,在ASP.NET环境中,我会选择“被动视图”Fowler。
您只需将页面合约设计为具有Web表单的具体实现的接口,然后在测试演示者时将其存根/模拟。
我想到的唯一缺点是,您最终会获得比“传统”网络表单解决方案更多的代码。