Правильный дизайн MVC для Symfony / Propel?
Если заставить вещи работать-это только требование, мы можем поместить всю управляющую логику входа и обработки БД даже в представления, и это будет работать. Однако это неправильный подход для многоразового использования.
Прежде чем я задам свой реальный вопрос о дизайне, ниже приведено мое текущее понимание разделения обязанностей с точки зрения модели.
- весь код, связанный с базой данных, даже логика, связанная с БД, должны входить в модели.
- для таблицы, скажем 'my_tab', propel генерирует 4 класса, из которых какие только 2 класса ' MyTab.php ' и ' MyTabPeer.php ' должен быть отредактирован.
- MyTabPeer.php должен иметь только выборку данных.
- любая логика, если требуется получить данные, должна идти в ' MyTab.php '
A.php APeer.php B.php BPeer.php
C.php CPeer.php D.php DPeer.php
Одна страница моего приложения, показывает почтовый ящик (скажем). Почтовый ящик не является таблицей в базе данных, но он получает свои данные из сложного запроса соединения между вышеупомянутыми 4 таблицами вместе с большим количеством вычислений / условий.
Я сгенерировал этот запрос, извлек из него данные и отобразил их. Почтовый ящик работает, как и ожидалось. Однако я сделал это в своем контроллере (класс действий), который, как я знаю, не является подходящим местом для этого.
Мой вопрос: , куда я должен поместить этот код? Возможные варианты:
- контроллер, я думаю, не самое подходящее место для БД логика / извлечение.
- я классифицировал 8 моделей, однако данные не принадлежат ни к одной из них, а являются их комбинацией.
- отдельный помощник / lib, но я знаю, что никогда не буду повторно использовать этот код в качестве его уникальной страницы сайта.
- где-нибудь еще?
Пожалуйста, предложите, если я ошибаюсь, но я думаю, что я должен поместить его в модели, так как он извлекает данные. Поскольку A является первичной таблицей, я, вероятно, должен поместить код в A.php и Апир.РНР. Если это правильное место, следующий вопрос, Что должно войти A.php и что должно идти в Апир.php? Мне нужно выполнить следующие операции:
- некоторая логика, чтобы решить, какие столбцы я должен выбрать.
- Как и почтовый ящик, я могу показать полученное / отправленное сообщение. Контроллер скажет, что показать, но есть некоторая логика БД, чтобы установить условия.
- Затем действительно извлеките данные из сложного запроса соединения.
- возвращаемые данные будут содержать все строки, но мне может потребоваться объединить несколько строк условно.
Согласно моему пониманию, пункт 3 должен войти Апир.php и отдых внутри A.php. Верно ли мое понимание?