May*_*ayo 16 asp.net-mvc wcf domain-driven-design poco dto
我有一个带有POCO域模型和NHibernate存储库层的ASP.NET MVC 2应用程序.我的域模型不知道我的viewmodels所以我使用automapper从viewmodel转到实体,反之亦然.
当我将WCF引入我的项目(一个迟到的要求)时,我开始不得不处理断开连接的对象.也就是说,我使用NHibernate从数据库中检索实体,并且一旦该实体被序列化,它就会断开连接并且每个子集合都被加载,无论我是否计划使用它,这意味着我正在做很多不必要的数据库工作.
在阅读完本文后,我发现强烈建议您不要在域项目之外公开您的实体,而应该使用DTO.
我看到了这个的原因,但我无法弄清楚如何实现它.
我是否从ASP.NET MVC中的viewmodel映射到DTO,通过服务层发送DTO,并从DTO映射到服务层中的实体?我应该在哪里定义我的DTO?
Bro*_*ook 15
我喜欢让我的服务层保持实体封装在其中,并且只返回/接收DTO.我将服务合同以及DTO保存在MVC项目和Service实现引用的单独程序集中.
在服务调用实现中,服务将dto映射到实体,然后根据需要与存储库和其他实体进行交互.
在app/mvc项目中,我有时会变得懒惰,只使用DTO作为某些动作的模型(特别是CRUDy).如果我需要投影或类似的东西,那么我将制作一个视图模型并使用automapper等在DTO和viewmodel之间进行转换.
您的实体如何暴露是一个备受争议的主题.有些人会将它们一直推到视图/应用层.我更喜欢将它们保留在服务层中.我发现当实体离开服务层时,你发现自己在与他们交互的任何地方做了业务逻辑类型的东西,应该存在于服务中的东西.
| 归档时间: |
|
| 查看次数: |
5899 次 |
| 最近记录: |