Я разрабатываю приложение N-Tier в C#. Серверная часть состоит из этих слоев:Как избежать избыточной бизнес-логики (выборка БД) при создании DTO?
- слоя доступа к данным (EF Code First Entities и DbContext)
- Бизнес слоя (содержит всю бизнес-логику и объекты) слой
- службы WCF (за вызов instanstiated услуг, раскрыть некоторые операции с бизнес-слоя)
Теперь клиентские запросы обрабатываются таким образом:
- Клиент создает запрос DTO и отправляет его на слой Service
- Service слой отображает это DTO для бизнес-объекта и вызывает метод BL
- Бизнес-слой делает что-то полезное, делает запросы к DAL, а затем возвращает некоторый бизнес-объект для обслуживания
- Сервисный слой отображает бизнес-объект в DTO. Ответ и возврат к клиенту.
Он работает хорошо, несмотря на дублирование кода, которое смягчается Automapper. Фактическая проблема заключается в следующем:
Клиент отображает те же объекты в разных представлениях: сетка, форма и т. Д. Например, для представления сетки (списка) требуется только объект Идентификатор и имя от объекта пользователя, в то время как вид формы (подробностей) имущество. Но бизнес-уровень ничего не знает о представлениях. Он может предоставлять полный объект UserBL только для вызовов службы, а затем ответственность за обслуживание заключается в том, чтобы сопоставить этот UserBL с UserListDto или UserDetailsDto. И для некоторых тяжелых объектов получение дополнительных полей из БД становится проблемой производительности.
Итак, должен ли бизнес-уровень предоставлять различные методы для разных клиентских операций? Мне не нравится это решение, потому что оно выглядит как загрязнение среды логики домена, но я не знаю, что еще можно сделать.
Рассматривали ли вы использование кеширования на клиенте? Особенно, если вы снова получаете одну и ту же информацию из сервисного уровня. Насколько неустойчивы эти данные? –