Во-первых, извините за длинный вопрос, но я должен дать некоторую базовую информацию.
Мы создаем приложение, которое использует 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).
Мои вопросы:
Есть ли какой-нибудь механизм, который мы можем использовать для повышения производительности с учетом удобства сопровождения?
Можно ли использовать Automapper с дополнительными функциями сопоставления на основе представления карты для того же DTO?