我有一个应用程序,在web层中有一个存储库层(和一个nhibernate实现),service(bussiness)层和一个asp.net mvc。
因为我还需要创建一个小的silverlight应用程序,我将创建几个wcf服务。这要求使用DTO,但我不知道如何&在哪里创建它们。
我已经看到了一些链接(like this one),所以似乎dto和映射过程的自然位置在我的数据/存储库层中的某个位置?
但另一方面,当我看到Fowlers DTO模式时,似乎映射是在域层中的某个地方使用汇编程序完成的?
我很困惑......实现这一目标的最佳做法是什么?
非常感谢!
答案 0 :(得分:3)
这个链接有点过时了,不是吗?它只是提供一个很酷的东西,而不是做DTO的自然方式。
现在我们有AutoMapper。您是否将映射放在单独的程序集中,或者不由您自己决定。
答案 1 :(得分:1)
从概念上讲,DTO通常位于数据层之间(因为DTO依赖于数据层)和业务层(如果DTO用于将业务层与数据层隔离)。
如果你的Silverlight应用程序将使用你的业务层,它看起来应该是这样的:
Silverlight - > WCF - > BL - > DTO - > DL - > DB
这会使你的MVC应用程序看起来像这样:
ASP.NET MVC - > BL - > DTO - > DL - > DB
那就是说,实际上没有一种“正确”的方法。在任一应用程序中,如果符合您的要求,您可以绕过业务层和/或DTO。您可以让您的ASP.NET MVC应用程序与您的WCF层对话,以便从业务层接口角度使UI更加一致。
很多时候,当你在寻找最佳实践时,答案实际上是“它取决于。”。