Простой элегантный шаблон для разделения доступа к данным, бизнес-логики и представления - PullRequest
1 голос
/ 07 апреля 2009

Мне нужен простой шаблон, чтобы сделать выше. Несколько вещей на заметку:

1) У меня есть класс, который я обязан использовать, который выполняет фактическое извлечение данных и возвращает DataTable

2) Меня не интересуют универсальные интерфейсы, которые поддерживают все возможные типы баз данных, мы придерживаемся одного типа баз данных.

3) Как элегантно перехватить ошибку и сообщить пользователю, что произошла ошибка.

4) Не предлагайте мне изучать MVC - сейчас это не вариант.

Меня интересует фактический дизайн рисунка.

Ответы [ 3 ]

1 голос
/ 07 апреля 2009

Вы хотите использовать шаблон MVC , чтобы отделить бизнес-логику от представления (обратите внимание, что я НЕ говорю о ASP.NET MVC Framework ) и шаблон DAO для отделения бизнес-логики от доступа к данным.

Ваш класс, который возвращает DataTable, становится частью вашей модели. Вы пишете слой (DAO для каждого объекта домена), который берет ваш DataTable и переводит его в ваши различные объекты домена. Ваш пользовательский интерфейс не должен содержать никакой логики, которая делает больше, чем просто представляет вывод пользователю; все, что является реальной логикой для извлечения данных из вашей модели, обрабатывается на уровне контроллера, который получает данные, запрашиваемые пользователем из модели, и отправляет их в соответствующее представление, чтобы представить их пользователю.

Исключения должны обрабатываться на границах слоев; либо поймайте и сделайте что-нибудь с этим (это может быть просто для регистрации и отправки пользователя на страницу с ошибкой), либо добавьте исключение более высокого уровня в зависимости от ситуации.

0 голосов
/ 15 апреля 2009

Есть ряд шаблонов, которые подходят к тому, что вы описываете. Я бы порекомендовал получить копию превосходной книги Мартина Фаулера Шаблоны архитектуры предприятия , в частности главу 14. Шаблоны веб-презентаций. Вы обнаружите, что любая серьезная попытка отделить презентацию от предметной (бизнес логика), а источник данных приведет вас к одному из множества вариантов одной и той же темы.

MVC, MVP, визуальный прокси и т. Д. Разбиты на три уровня, которые отличаются друг от друга обязанностями каждого уровня и тем, как слои взаимодействуют друг с другом.

Например, шаблон Passive View в основном лишает уровень пользовательского интерфейса всего, что не имеет прямого отношения к представлению. Типичным примером является поле, которое вы хотите выделить, если определенное условие истинно. В пассивном представлении форма будет содержать только логику для определения того, следует ли выделять поле. Бизнес-правило, которое вызывает это состояние, будет находиться на уровне презентатора / контроллера, который не зависит напрямую от фактического представления.

Что касается уровня источника данных, основным преимуществом является невозможность переключения баз данных одним махом. Основное преимущество заключается в том, что изменения в схеме базы данных влияют только на уровень источника данных и не распространяются на остальную часть приложения. Если вы застряли с наборами данных, хороший подход - это шаблон Table Data Gateway .

0 голосов
/ 07 апреля 2009

Не предлагайте мне изучать MVC - сейчас это не вариант.

Вы можете создать простой шаблон MVC или MVP без использования ASP MVC Framework. Это довольно просто ввести. Вот довольно простой пример MVP Пример

...