Как правильно реализовать отношения между моделями?

Добрый день.

Как вы бы реализовали отношения между моделями? например:
Имеется модель reseller, у нее есть различные связи, один к многим, один к одному и т.д.

В данной модели постоянно появляются все новые и новые связи, к примеру:
Связь со списком продаж, связь с заказами, корзинами, витринами, страницами и т.д. и этот список постоянно растёт.

Такой подход по мне очень удобен, т.к есть центральная модель, которая зависит от авторизованного пользователя и через неё можно получить любые связные данные. (т.к удобное же reseller->getSales(), reseller->getCarts() и т.д)

Но мне не нравится, что такая модель быстро разрастается, и получается какой-то класс БОГ, знающий все и вся, с нарушением всех принципов SOLID.

UPD:
пример в вопросе не реальный, а чисто для вопроса придуманный.

reseller выступает в качестве фабрики, который создает нужную более мелку сущность зависящую от ID reseller. Сам этот класс (reseller) можно разбить на более мелки фабрики, типо: создания подсистемы продаж, подсистемы настроек и т.д, а через них уже получать более мелки сущности каждой из подсистем.

Или все это как-то хитро можно завернуть DependencyInjection \ServiceLocator
Или еще как-то?

Так вот суть вопроса, как сделали бы это Вы?
  • Вопрос задан
  • 2586 просмотров
Пригласить эксперта
Ответы на вопрос 1
@dmitriylanets
Как вариант:
1. Создание моделей: заказ, корзина, витрина, страница и т.д. Одна модель может использовать связи с другими таблицами. Как правило одна модель - одна бизнес сущность приложения. Содержит только CRUD функции.
2. Для уменьшением связей между моделями можно создать абстрактный уровень классов который будет реализовывать бизнес логику, взаимодействие между моделями. Например shop->createOrder() получает содержимое корзины и создает заказ.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
22 февр. 2019, в 10:54
4000 руб./за проект
22 февр. 2019, в 10:27
2000 руб./за проект
22 февр. 2019, в 10:25
800 руб./за проект