Я исхожу из фона Java/Grails и не могу найти однозначный ответ в Интернете о том, где должна храниться логика обслуживания для приложения CakePHP. «Службы», я говорю о классах, которые обычно создаются посредством инъекции зависимостей для ведения бизнес-логики на объектах домена. Они должны иметь возможность запрашивать любой объект домена и вносить изменения в ответ на действие контроллера.CakePHP: где поставить логику «Услуги»
В настоящее время CakePHP's "Component" считает себя наиболее близким к этому вопросу. Я могу загрузить компонент в любой контроллер и выполнять его методы по мере необходимости. Тем не менее, я читал в нескольких местах, что компоненты никогда не должны обращаться к базе данных, и что это приведет к некоторым крутым результатам производительности.
Я также изучил класс «Поведение» CakePHP, и он, похоже, совсем не подходит к билету. Кажется хорошо оборудованным для организации объектов домена в настройке структуры данных, но это не та логика, которую выполняет служба. Кроме того, чтобы импортировать любое определение модели в Поведение, мне пришлось бы отредактировать само определение модели, чтобы разрешить доступ, что очень неудобно.
Поэтому я задаю этот вопрос: где должна храниться логика обслуживания? Конечно, не контроллер, так как он должен содержать только минимальную логику для обработки запроса и отправки ответа.
Предлагаем вам бесплатный совет: держаться подальше от CakePHP. Это одна из худших фреймворков в PHP, и она определенно не реализует ничего удаленного, как MVC. Если вы хотите использовать что-то, что по крайней мере признает понятие «услуги», вы можете попробовать Symfony2. –
Аргумент 1: глобальное состояние. CakePHP в основном базируется на использовании синглетонов и других параметров с статичной областью. –
Аргумент 2: статические классы: большая часть ядра CakePHP состоит из статических методов. Это делает весь код тесно связанным с определенными именами классов, которые в конечном итоге используются как пространство имен. –