Шаблон DTO + отложенная загрузка + Entity Framework + ASP.Net MVC + Auto Mapper

Во-первых, извините за длинный вопрос, но я должен дать некоторую базовую информацию.

Мы создаем приложение, которое использует ASP.net MVC, шаблоны JQuery, Entity Framework, WCF, и мы использовали POCO в качестве уровня домена. В нашем приложении есть уровень служб WCF для обмена данными с приложением ASP.net MVC, и он использует объекты передачи данных (DTO) из WCF в MVC.

Кроме того, приложение использует отложенную загрузку в Entity Framework с помощью AutoMapper при преобразовании доменных объектов в DTO на нашем сервисном уровне WCF.

Наша серверная архитектура выглядит следующим образом (Службы WCF -> Менеджеры -> Репозиторий -> Entity Framework(POCO))

В нашем приложении мы не используем модели представления, поскольку мы не нужен еще один уровень сопоставления для приложения MVC, и мы используем только DTO в качестве моделей представления.

Как правило, у нас есть обычные и облегченные DTO для таких доменов, как Customer, CustomerLite и т. д. (у объекта Lite меньше свойств, чем у обычного).

Теперь у нас возникли некоторые трудности с DTO, потому что наша структура DTO становится более сложной, и когда мы думаем о ремонтопригодности (с общей иерархической структурой DTO), мы теряем производительность.

Например,

У нас есть страница Customer View и наша иерархия DTO, как показано ниже

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

В этом случае нам не нужны некоторые поля OrderLiteDto для этого представления.Но некоторые другие представления нуждаются в этих полях, поэтому для облегчения этого мы используем эту структуру.

Когда дело доходит до автоматического сопоставления, мы сопоставляем CustomerViewDetailsDTO и получаем дополнительные данные (которые не требуются для конкретного представления) из отложенной загрузки (Entity Framework).

Мои вопросы:

  1. Есть ли какой-нибудь механизм, который мы можем использовать для повышения производительности с учетом удобства сопровождения?

  2. Можно ли использовать Automapper с дополнительными функциями сопоставления на основе представления карты для того же DTO?

12
задан Wahid Bitar 19 June 2012 в 18:16
поделиться