@Zohei

Yii. Как вы проектируете свои модели?

Добрый день.
Как вы проектируете свои модели для бэкенд, фронтенд и других, например, апи модулей?
Опишу свои затруднения на примере модели ТОВАР.
С одной стороны, есть большое кол-во общих методов для классов Product во всех модулях, например:
public function getPrice() {
    return format($this->price);
}

Логичным кажется вынос общих методов в CommonProduct и далее все товарам наследоваться от него.. SiteProduct, AdminProduct, ApiProduct...

С другой стороны, хочется, использовать свой класс ActiveRecord в каждом модуле (AdminActiveRecord, ProductActiveRecord, ApiActiveRecord..)
Например, один раз для фронтенда в SiteActiveRecord прописать defaultScopes для вывода только опубликованных данных и радоваться что условие подтянулось ко всем запросам в десятке классов.
public function defaultScope()
    {
        return [
            'condition'=>'active=1, 
        ];
    }

Хочу разобраться какой подход наиболее верный

PS. Всем кто откликнулся на проблему плюс в карму) отметил ваши сообщения решением
  • Вопрос задан
  • 2828 просмотров
Решения вопроса 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Откройте для себя путь DDD. Доменная модель на все приложение одна и не привязана к модулям фреймворкам и вообще. Правда в контексте Yii сделать чистые модели не получится, php все же не ruby.
Ответ написан
shcherbanich
@shcherbanich
Программист
В модулях модели можно наследовать все основные модели, и прописывать в дочерних что-то вроде
public function defaultScope()
    {
        return [
            'condition'=>'active=1, 
        ];
    }
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
AMar4enko
@AMar4enko
Почему у вас для бэкенда, фронтенда и апи разные модели?
Ответ написан
@old-calm
В разделе common удобно определить общие методы работы с сущностью. А конкретизацию сущности прменительно к задачам и бизнес логику разнести по местам назначегия: бекэнду, фронтенду, апи. Важнее разнести модели и бизнес логику, чем модели в разделах, имхо.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы