首先,很抱歉问题很长,但我必须提供一些基本信息。
我们正在创建一个使用 ASP.net MVC、JQuery 模板、实体框架、WCF 的应用程序,并且我们使用 POCO 作为我们的域层。在我们的应用程序中,有一个 WCF 服务层与 ASP.net MVC 应用程序交换数据,它使用从 WCF 到 MVC 的数据传输对象 (DTO)。
此外,在我们的 WCF 服务层中转换 Domain-TO-DTO 时,应用程序通过使用 AutoMapper 在实体框架中使用延迟加载。
我们的后端架构如下(WCF Services -> Managers -> Repository -> Entity Framework(POCO))
在我们的应用程序中,我们不使用视图模型,因为我们不想要 MVC 应用程序的另一个映射层,我们只使用 DTO 作为视图模型。
通常,我们有针对客户、CustomerLite 等域的 Normal 和 Lite DTO(Lite 对象的属性比 Normal 少)。
现在我们在使用 DTO 时遇到了一些困难,因为我们的 DTO 结构变得越来越复杂,并且当我们考虑可维护性(使用 DTO 的一般层次结构)时,我们会失去性能。
例如,
我们有客户视图页面和我们的 DTO 层次结构如下
public class CustomerViewDetailsDTO
{
public CustomerLiteDto Customer{get;set;}
public OrderLiteDto Order{get;set;}
public AddressLiteDto Address{get;set;}
}
在这种情况下,我们不希望该视图的某些 OrderLiteDto 字段。但是其他一些视图需要该字段,因此为了方便它,我们使用该结构。
当涉及到自动映射时,我们映射 CustomerViewDetailsDTO,我们将从延迟加载(实体框架)中获取额外的数据(特定视图不需要)。
我的问题:
在考虑可维护性的同时,我们可以使用任何机制来提高性能吗?
是否可以将 Automapper 与更多基于地图视图的映射功能一起用于相同的 DTO ?