首先,抱歉对于冗长的问题,但我必须提供一些基本信息.
我们正在创建一个使用ASP.net MVC,JQuery模板,实体框架,WCF的应用程序,我们使用POCO作为我们的域层.在我们的应用程序中,有一个WCF服务层与ASP.net MVC应用程序交换数据,它使用从WCF到MVC的数据传输对象(DTO).
此外,在我们的WCF服务层中转换Domain-TO-DTO时,应用程序使用AutoMapper在实体框架中使用延迟加载.
我们的后端架构如下(WCF服务 - >管理器 - >存储库 - >实体框架(POCO))
在我们的应用程序中,我们不使用View Models,因为我们不想要另一个MVC应用程序的映射层,我们只使用DTO作为View Models.
通常,我们有针对域的Normal和Lite DTO,例如Customer,CustomerLite等(Lite对象具有少于Normal的属性).
现在我们在DTO方面遇到了一些困难,因为我们的DTO结构变得越来越复杂,当我们认为可维护性(使用DTO的一般分层结构)时,我们失去了性能.
例如,
我们有Customer View页面和DTO层次结构,如下所示
public class CustomerViewDetailsDTO
{
public CustomerLiteDto Customer{get;set;}
public OrderLiteDto Order{get;set;}
public AddressLiteDto Address{get;set;}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我们不希望OrderLiteDto的某些字段用于此视图.但是其他一些视图需要该字段,因此为了便于我们使用该结构.
在Auto Mapping中,我们映射CustomerViewDetailsDTO,我们将从Lazy Loading(实体框架)获取其他数据(特定视图不需要).
我的问题:
在考虑可维护性的同时,我们是否可以使用任何机制来提高性能?
是否可以使用Automapper为相同的DTO提供更多基于地图视图的映射功能?
我阅读了几篇将域模型(如在MVC中)定义为包含业务逻辑的文章.我从未考虑过模型来保存除模型属性之外的任何方法.
我想知道实际上是否存在支持在域模型中具有功能和业务逻辑的思想.
提前致谢.