Литиевые приложения, выходящие за рамки CRUD - PullRequest
6 голосов
/ 12 января 2011

Это более или менее ориентированная на фреймворк версия прошлого вопроса о переполнении стека , в которой рассказывается о том, как в большинстве вводных материалов по приложениям MVC присутствует тесная связь между моделями, представлениями и контроллерами.Например, у вас будет таблица User, которая модифицируется контроллером пользователя, который, в свою очередь, передает отфильтрованные данные в представление пользователя.У меня сложилось впечатление, что многие MVC-фреймворки, как правило, также отражают этот паттерн.Это все хорошо и хорошо, но это никогда не приводит меня к чему-то кроме создания и отображения монотонных списков вещей в форме HTML.

Среда MVC, на которую мы сейчас обращаем внимание, - Lithium , который кажется довольно интересным примером использования умных техник кодирования PHP5.3.С одной стороны, Lithium имеет класс Model, который предлагает объекты-оболочки вокруг отдельных таблиц и абстрагирует некоторые простые запросы.С другой стороны, у него есть изящное соглашение о маршрутизации URL-адресов к вызовам методов на объектах контроллера, которые затем визуализируются для отображения шаблонов.

Но посреди этого я теряюсь в том, гдеПоместите всю интересную логику, которая связывает данные в таблице A с данными в таблицах от B до Z. Или, по крайней мере, я не уверен, где разместить такую ​​логику таким образом, чтобы это соответствовало дизайну структуры.Насколько я понимаю, Model абстракция Lithium не делает ничего больше, чем просто исключает некоторые шаблоны вставки / обновления / удаления на уровне строк, а архитектура контроллера / представления в основном основана на пользовательском интерфейсе.Я не хотел бы помещать много бизнес-логики в тот же класс Controller, который получает маршрутизированные вызовы функций от запросов URL.

Мой инстинкт был бы заполнить пробел с помощью моего собственного кодаэто существует более или менее полностью вне рамок.Я не уверен, стоит ли ожидать чего-то большего, но, учитывая, насколько жестко структурировано все остальное в Lithium, это выглядит как-то неудовлетворительно, как если бы я мог просто свернуть свой собственный кодовый шаблон сокращения без лишних затрат на поиск источника информации.большой каркас.

Что мне здесь не хватает?Есть ли рекомендуемая архитектура или философия для использования этого типа фреймворка?

1 Ответ

8 голосов
/ 12 января 2011

Одна вещь, которую вы должны помнить с Lithium, это то, что пока нет готового к выпуску выпуска (хотя некоторые сайты используют его в производстве). Главная недостающая особенность сейчас - это модельные отношения. При наличии отношений я предполагаю, что на ваш вопрос будет частично дан ответ, поскольку это важный кирпичик в общей картине создания более сложных приложений. Вы можете проверить ветку x-data, где должна продолжаться работа над отношениями.

Для второй части написания логики предметной области простой ответ - «в модели». См. этот (довольно бесполезный) пример расширения функциональности модели , например. Другим примером, который стоит посмотреть, является мини-приложение с открытым исходным кодом Analogue, которое является одним из немногих работающих открытых примеров использования Lithium. Класс аналоговой модели показывает немного более мясистую модель.

И, наконец, нужно соединить точки между M, V и C. Литиевый контроллер должен в основном делегировать задания моделям и, возможно, реструктурировать входные данные, если это необходимо. Простые примеры наличия модели Post, PostsController и views / posts / add, index и т. Д. Не означают, что вам нужно просто иметь Post :: all (). PostsController :: view необходимо загрузить набор моделей комментариев, вероятно.

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

  • Необходимо убедиться, что сообщение в блоге имеет уникальный заголовок? Написать валидатор.
  • Нужно убедиться, что у пользователя есть доступ на запись к записи? Переопределите метод сохранения и проверьте его или отфильтруйте.

Но я думаю, что нам нужно подождать, пока установятся отношения, и выпустить версию 1.0, прежде чем мы сможем полностью судить о том, как лучше всего решить задачи структурирования приложений в Lithium.

...