Как лучше всего представить представления базы данных / сводную информацию в приложении "3-Tiered" - PullRequest
2 голосов
/ 19 января 2012

По сути, это тот же вопрос, что и в Как обрабатывать представления в многослойном приложении . Тем не менее, этот пост не получил много отзывов.

Вот проблема: мы создали трехуровневое веб-приложение со следующими уровнями:

- Доступ к данным (с использованием репозиториев)
-Сервис
-UI (MVC 3)

DTO передаются между UI (Controller) Layer и Service Layer. Более тяжелые доменные модели, содержащие много логики на уровне домена, передаются между уровнями обслуживания и доступа к данным. Все развязано с помощью IOC, и приложение следует твердым принципам (или пытается тоже) - большая счастливая развязанная семья!

В настоящее время преобразование DTO-> Domain Domain и Model Domain-> DTO происходит на уровне сервиса.

Итак, наконец, на мой вопрос:

Нам нужно начать отображать более сложные подмножества информации только для чтения (т. Е. Сводные представления, объединяющие несколько объектов, выполняющих сводные итоги и т. Д.). Итак, каков наилучший способ представления данных только для чтения в n-уровневой системе? Мне не имеет смысла отображать типы доменной модели только для чтения на типы DTO. В большинстве случаев между двумя типами не будет никакой разницы. Я подумал бы о том, чтобы "нарушить" границы уровней для этих типов только для чтения, чтобы уровень доступа к данным обслуживал DTO напрямую и передавал их на уровень обслуживания и в пользовательский интерфейс.

Кто-нибудь может указать мне правильное направление?

Большое спасибо!

1 Ответ

1 голос
/ 19 января 2012

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

Отображение данных, подобных отчетам, для пользователя должно запрашиваться просто из базы данных и передаваться в представление;нет преобразования домена / dto, особенно если вы находитесь в веб-приложении.Делая это, вы избавите себя от многих проблем.Лично у меня были некоторые попытки пройти через эти отображения, просто чтобы показать некоторые данные только для чтения, и это работало плохо;производительность, ненужные отображения, странные вещи, которые я должен был сделать, чтобы отобразить какие-то отчётные представления.В этом случае у вас скорее всего будет модель вашего домена и модель чтения.Вы можете посмотреть шаблон CQRS, это может отвлечь вас от мысли, что вы хотите использовать одну и ту же модель данных как для записи, так и для чтения.

Итак, чтобы ответить на ваш вопрос, я считаю, что в этом случае лучшимМожно было бы пропустить наслоение и читать DTO непосредственно из базы данных через тонкий слой.

...