我可以从表示层访问存储库吗?

时间:2009-09-08 16:35:34

标签: architecture domain-driven-design repository-pattern presentation

我从DDD开始。我对DDD应用程序中涉及的几个层之间的交互有点困惑。

我可以从演示层调用我的存储库吗?如果不是,我必须复制我的服务层中的存储库提供的CRUD功能(哪个会依次使用存储库来实现这些功能)?最好的方法是什么?

4 个答案:

答案 0 :(得分:3)

表达层究竟是什么意思? 如果你的意思是Controller / Presenter,那就完全没问题了。我使用的经验法则是,如果控制器操作是4行代码或更多代码,我应该考虑重构到应用程序服务类,但仍然 - 都在应用程序级别,你当然可以使用存储库。

你表达问题的方式 - 我当然可能误解了这一点 - 听起来很可疑,就像你在考虑从你的视图或代码隐藏中引用存储库一样。在那种情况下,我会说不!没有!没有!

答案 1 :(得分:1)

当然,您可以从表示层调用存储库。我的一条建议是让您的表示层依赖于存储库的抽象而不是实现,即UserSession依赖于IPersonRepository接口而不是PersonRepository类。它不仅可以很好地分离问题,而且可以使测试更容易。

去吧!

答案 2 :(得分:0)

我通常使用服务层,但使用您的存储库没有任何害处

答案 3 :(得分:0)

正如Kevin所说,与控制器或演示者一起使用可以带来很多好处。

这些包括明确区分关注点和可测试性。

就个人而言,在ASP.NET环境中,我会选择“被动视图”Fowler

您只需将页面合约设计为具有Web表单的具体实现的接口,然后在测试演示者时将其存根/模拟。

我想到的唯一缺点是,您最终会获得比“传统”网络表单解决方案更多的代码。