Должен ли я сделать это моделью? - PullRequest
0 голосов
/ 23 мая 2011

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

Все запросы работают с одним и тем же набором из 5 таблиц. Каждая из этих таблиц имеет свой собственный класс Data Data Gateway и класс Row Data Gateway, но мой новый класс для запросов не будет реализовывать такой шаблон (поскольку он не переносит таблицу или строку). Мой новый класс будет вызывать уже установленные шлюзы данных таблиц и строк.

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

Это звучит справедливо? Я думаю, что именно так следует использовать модели, но я могу быть совершенно неправ в таких вещах, поэтому буду благодарен за любые комментарии или советы. (К вашему сведению, я использую Zend Framework).

1 Ответ

3 голосов
/ 23 мая 2011

Запросы не идут в части модели. Они связаны с постоянством (модель не поддерживает постоянство).

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

Я бы назвал классы шлюза табличных данных «DAO» (объект доступа к данным). Шлюз табличных данных - это своего рода DAO, поскольку у вас может быть DAO, который поможет вам получать информацию из файлов, веб-сервисов ...

Таким образом, вы можете сохранить ваши фактические классы и добавить DAO для управления этими сложными запросами. Этот DAO не предоставляет вам доступ к определенной таблице БД, но он по-прежнему предоставляет вам доступ к источнику данных (составленному из нескольких таблиц БД).

Редактировать:

Я предлагаю вам создать DAO interface (он может быть пустым). Вы DB таблицы будут реализовывать этот интерфейс. Ваш новый класс также реализует этот интерфейс, но не расширяет Zend_Db_Table.

Короче говоря, вы переопределяете / переименовываете свой уровень персистентности с «Zend Db Table» на «DAO» (что делает его более общим). Zend Db Table - это вид DAO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...