Здравствуйте, может у кого уже есть опыт создания подобного.
На сайт планируется добавить магазины пользователей с его товарами
Будет два вида магазина:
1. Онлайн - продажи через сайт, информация о магазине клиентам недоступна
2. Витрина - рекламный магазин, товары только для ознакомления, доступны контакты и адреса магазина.
Товары от 1-го и 2-го типов магазина будут одним блоком, входят в те же категории и имеют те же хар-ки, т.е. на экране у покупателей одновременно будут товары которые можно купить и товары, с которыми только ознакомиться, посмотрев контакты, поэтому для них таблица Product будет общая, а следовательно и таблица Shop тоже будет одна.
А как разбить сущности?
Сделать базовый и от него наследоваться?
Или все таки сделать разные сущности с разными таблицами и только перед отображением объединять ActiveDataProvider?
хотя во 2-м случае будет много дублирующего кода ... куда тогда его вынести?
Вопрос по архитектуре
Вопрос по архитектуре
Мой старт-ап
https://website39.site
![Подмигивает ;)](./images/smilies/icon_e_wink.gif)
Re: Вопрос по архитектуре
Появилась идея, как вариант:
Для Магазина делаем абстрактный класс BaseShop с общим кодом и общим интерфейсом (абстрактные ф-ции) наследуемый от ActiveRecord
от него наследуем уже нужные классы ShopOnline и ShopAd
Тоже самое с товаром - BaseProduct => ProductOnline и ProductAd
А для отображения используем в репозитории свою ф-цию в search($params): ActiveDataProvider
где через UNION объединяем запрос с двух таблиц.
Насколько эта идея ложится в ООП?
Для Магазина делаем абстрактный класс BaseShop с общим кодом и общим интерфейсом (абстрактные ф-ции) наследуемый от ActiveRecord
от него наследуем уже нужные классы ShopOnline и ShopAd
Тоже самое с товаром - BaseProduct => ProductOnline и ProductAd
А для отображения используем в репозитории свою ф-цию в search($params): ActiveDataProvider
где через UNION объединяем запрос с двух таблиц.
Насколько эта идея ложится в ООП?
Мой старт-ап
https://website39.site
![Подмигивает ;)](./images/smilies/icon_e_wink.gif)
-
- Сообщения: 179
- Зарегистрирован: 2018.02.05, 13:41
- Контактная информация:
Re: Вопрос по архитектуре
А как быть если клиент хочет перейти с витрины на онлайн? Как по мне в вашем случае нет необходимости делать абстрактные классы и наследников. Достаточно смотреть на настройки соответствующего типа.
Re: Вопрос по архитектуре
Да, а вот про переход с типа на тип я не подумал.
Да и с UNION вышли проблемы, таблицы должны иметь общие колонки, либо различия выносить в отдельные таблицы "1 к 1", а так же сортировка в ActiveDataProvider идет отдельно по каждой таблице, потом они объединяются и на экране выглядит глупо
![Подмигивает ;)](./images/smilies/icon_e_wink.gif)
![Озадачен :?](./images/smilies/icon_e_confused.gif)
Короче куча проблем возникла, в общем, надо объединять в одну таблицу и типизировать, хотя часть полей будет пустой в таблицах
Мой старт-ап
https://website39.site
![Подмигивает ;)](./images/smilies/icon_e_wink.gif)
-
- Сообщения: 179
- Зарегистрирован: 2018.02.05, 13:41
- Контактная информация:
Re: Вопрос по архитектуре
Вынесите различия в отдельную связьSaintRu писал(а): ↑2021.04.17, 01:04Да, а вот про переход с типа на тип я не подумал.
Да и с UNION вышли проблемы, таблицы должны иметь общие колонки, либо различия выносить в отдельные таблицы "1 к 1", а так же сортировка в ActiveDataProvider идет отдельно по каждой таблице, потом они объединяются и на экране выглядит глупои в getModels() хранится только первый класс, т.е. get_class() показывает тот класс который в выражении $query1->union($query2) первый
![]()
Короче куча проблем возникла, в общем, надо объединять в одну таблицу и типизировать, хотя часть полей будет пустой в таблицах