Я изучаю фреймворк Yii2 уже пару недель. Одна из основных концепций — «Жирные модели, тонкие контроллеры». Чтение исходного кода расширенный шаблон приложения Я обнаружил, что благодаря этой концепции почти вся логика содержится в моделях.
Что ж, у меня не могло бы быть никаких вопросов, если бы у меня не было опыта работы с Spring MVC, где уровень обслуживания кажется естественным способом отделить логику приложения от его реальных данных.
Таким образом, вопрос заключается в следующем: может ли быть хорошей практикой внедрение подобной корпоративной структуры в приложении, созданном с помощью Yii2? Говоря более конкретно: стоит ли разбивать модели Yii на сущности, DTO и сервисы?
Заранее спасибо!
PS: Вопрос может показаться слишком абстрактным или субъективным, но, имея небольшой опыт работы с Yii2, я хотел бы знать, есть ли какие-либо архитектурные особенности в Yii2, которые могут сделать вышеупомянутую реализацию неоптимальной в отношении обслуживания кода, производительность и так далее?
На самом деле вы можете создавать модели, которые не являются ActiveRecords, так что они фактически становятся вашим сервисным уровнем, просто нужно расширить с yii\base\Model
или же yii\base\Object
как вы считаете нужным, и реализуйте всю необходимую логику там. Вы также можете создать эти модели в другой папке с именем services, чтобы их пространство имен стало app\services\ModelName
Использование другой функции вместо встроенной не может быть хорошей практикой для каждого фреймворка.
IMO, модельная часть — убийственная особенность yii2, поэтому, если вам не нужен scaffold (генерация кода), вы можете использовать любую другую среду php без модельной части (ZF2, Symfony2, микро-структура).
Таким образом, вы можете использовать свою собственную архитектуру модели без каких-либо задержек в производительности, но вам нужно будет написать больше кода, чтобы все было сделано, и ваши модели будет трудно поддерживать другим людям, которые используют yii2, и поэтому я рекомендую использовать другую инфраструктуру, которая поставляется без модельного слоя.