Как грамотно разделить AR и бизнес-логику для сущностей в Yii2?
Имеется проект на Yii2 и было принято решение разделить AR модели и логику для них.
Думал выделить логику хранения данных в репозиторий, но, как я понял, AR сам по себе реализует этот паттерн.
Сейчас есть в мыслях следующая структура: app\models\ActiveRecord\Base\BaseFoo - здесь храню основной класс модели, который наследуюется от yii\db\ActiveRecord, в данный момент содержание следующее: tableName(), правила валидации, сценарии, лейблы аттрибутов app\models\ActiveRecord\Foo - наследование от BaseFoo, описание behaviors(), если нужно, и здесь же описание логики.
Подобная структура приемлема? Можно, конечно, вынести Foo модель в app\models\Logic или что-то вроде того, но лучше, как мне кажется, хранить в app\models\ActiveRecord.
Буду признателен за любые альтернативы, интересен ваш собственный подход в описании структуры приложения.
diamond Уточню: если, к примеру, у определённой сущности нет никакой логики, то есть максимум, что нужно делать, это оперировать с данными в БД - в данном случае достаточно будет обойтись без верхнего слоя "Service" и юзать в контроллерах лишь слой Repository?
И каким образом в данной трёхслойной архитектуре лучше организовать зависимость? Или это подробности реализации и они не важны? Может быть есть какие-то best practice?
как правило class UserService{ function __construct(UserRepository $userRepo){$this->userRepo = $userRepository;}}
UserRepository impliments CrudRepositiory{ function findById($id){$users = UserQuery::create()->findPk($id)}}