CakePHP - где поставить логику обслуживания

Я программист Java, который пытается исследовать CakePHP - в настоящее время у меня проблема с структурой/дизайном приложения. Я не мог понять, где поставить основную логику приложения.

Когда я разрабатываю JavaEE, общий подход выглядит следующим образом:

  • Модели классов просты beans, которые представляют собой сущности данных (продукты, люди и т.д.) - в основном, как структуры данных с геттерами/сеттерами;

  • Классы контроллера - достаточно простые классы, которые собирают необходимые данные и вводят их в выделенный шаблон просмотра, который затем отправляется пользователю;

  • Классы DAO (DataAccessObject) или Repository - это те, которые могут загружать и хранить объекты в базе данных;

  • Сервисные классы обычно представляют собой синглеты, которые содержат определенные бизнес-логические методы - они вызывается контроллерами, другими службами или запланированными действиями, с другой стороны, они сами называют методы DAO/Repository для извлечения или изменения данных.

Например, если у меня есть сущности Person, Product и Order, когда пользователь выбирает какой-либо продукт и клики "помещают его в корзину/корзину" new Order для этого Person должны быть созданы, и это Product следует добавить к этому Order (мы можем проверить, что Person не является плохим должником и что Product присутствует в магазине и т.д.) - вся эта работа выполняется в методах OrderService, вызываемых некоторыми контроллер.

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

Теперь я немного озадачен тем, как все это делается в CakePHP. Где я должен поставить эту бизнес-логику и т.д.?

Ответ 1

В CakePHP модельный слой состоит из коллекции активных записей, называемых AppModel. Они сочетают логику, связанную с хранением (которую вы обычно добавляете в DAO и/или хранилища) с бизнес-логикой (что обычно входит в ваши "модели" ).

Любая другая связанная с доменом логика (из вашей службы) становится частью контроллера.

Если вы хотите знать, как вы должны реализовывать бизнес-логику домена в CakePHP, просто найдите статьи, которые хвалят активный шаблон записи.

Личное мнение
CakePHP и CodeIgniter - две из худших фреймворков в PHP.
Они заполнены плохой практикой.Суб >

Собственно, если вы делали правильный MVC, тогда слой модели будет содержать всю бизнес-логику и все, что с ней связано. Модельный слой состоит из DAO, репозиториев, Объекты домена (то, что вы называете "моделями" ) и служб.

Пока ваши описания кода на основе Java указывают на то, что вы немного двигаетесь в этом направлении, CakePHP даже не удаленно близок к нему.

Опять же, возможно, что мое понимание MVC просто неверно.

Ответ 2

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

Ответ 3

В CakePHP. "M" - это всего лишь куча моделей данных вместо моделей доменов. По моему мнению. CakePHP предназначен для разработки RAD. Это не подходит для корпоративных приложений.

Мое мнение, хотя.