2

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

我可以从我的表示层调用我的存储库吗?如果不是,我是否必须在我的服务层中复制存储库提供的 CRUD 功能(这当然会反过来使用这些功能的存储库)?最好的方法是什么?

4

4 回答 4

3

表示层到底是什么意思?如果您的意思是控制器/演示者,那很好。我使用的经验法则是,如果控制器操作是 4 行或更多代码,我应该考虑重构为应用程序服务类,但仍然 - 两者都在应用程序级别,您当然可以在那里使用存储库。

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

于 2009-09-08T21:20:36.687 回答
1

Absolutely, you can call a repository from the presentation layer. My one piece of advice is to have your presentation layer depend on an abstraction of a repository as opposed to the implementation, i.e. UserSession depends on an IPersonRepository interface instead of a PersonRepository class. Not only is it a good separation of concerns, but it can make testing easier.

Go for it!

于 2009-09-08T17:53:31.680 回答
0

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

于 2009-09-08T16:41:30.890 回答
0

正如凯文所说,与控制器或演示者一起使用会给您带来很多好处。

这些包括明确的关注点分离以及可测试性。

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

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

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

于 2009-09-15T21:36:42.900 回答