DTO Pattern + Lazy Loading + Entity Framework + ASP.Net MVC + Auto Mapper

Po pierwsze, przepraszam za długie pytanie, ale muszę podać pewne podstawowe informacje.

Tworzymy aplikację korzystającą z ASP.net MVC, JQuery Templates, Entity Framework, WCF i użyliśmy POCO jako naszej warstwy domeny. W naszej aplikacji istnieje warstwa usług WCF do wymiany danych z aplikacją ASP.net MVC i wykorzystuje obiekty transferu danych (DTO) z WCF do MVC.

Ponadto aplikacja używa Lazy Loading w Entity Framework przy użyciu AutoMappera podczas konwersji Domain-TO-DTO w naszej warstwie usług WCF.

Nasza architektura Backend w następujący sposób (Usługi WCF -> Managers -> Repository -> Entity Framework (POCO))

W naszej aplikacji nie używamy View Models, ponieważ nie chcemy innej warstwy mapowania dla aplikacji MVC i używamy tylko DTO jako View Models.

Ogólnie rzecz biorąc, mamy normalne i Lite DTO dla domen takich jak Klient, KlientLite, itp. (Obiekt Lite ma niewiele właściwości niż Normalny).

Teraz mamy pewne trudności z DTO, ponieważ nasza struktura DTO staje się coraz bardziej złożona, a kiedy myślimy o możliwości utrzymania (z ogólną hierarchiczną strukturą DTO), tracimy wydajność.

Na przykład,

Mamy stronę Customer View i naszą hierarchię DTO w następujący sposób

 public class CustomerViewDetailsDTO
 {
   public CustomerLiteDto Customer{get;set;}
   public OrderLiteDto Order{get;set;}
   public AddressLiteDto Address{get;set;}
 }

W tym przypadku nie chcemy, aby niektóre pola OrderLiteDto dla tego widoku. Ale inny widok potrzebuje tych pól, więc aby ułatwić to, używamy tej struktury.

Jeśli chodzi o automatyczne mapowanie, mapujemy CustomerViewDetailsDTO i otrzymamy dodatkowe dane (które nie są wymagane dla konkretnego widoku) z Lazy Loading (Entity Framework).

Moje pytania:

Czy jest jakiś mechanizm, który możemy wykorzystać do poprawy wydajności przy rozważaniu możliwości konserwacji?

Czy możliwe jest użycie Automappera z większą liczbą funkcji mapowania opartych na widoku mapy dla tego samego DTO?

questionAnswers(1)

yourAnswerToTheQuestion