Вопрос по архитектуре

Обсуждаем, как правильно строить приложения
Ответить
SaintRu
Сообщения: 88
Зарегистрирован: 2020.05.13, 11:22
Контактная информация:

Вопрос по архитектуре

Сообщение SaintRu »

Здравствуйте, может у кого уже есть опыт создания подобного.
На сайт планируется добавить магазины пользователей с его товарами
Будет два вида магазина:
1. Онлайн - продажи через сайт, информация о магазине клиентам недоступна
2. Витрина - рекламный магазин, товары только для ознакомления, доступны контакты и адреса магазина.
Товары от 1-го и 2-го типов магазина будут одним блоком, входят в те же категории и имеют те же хар-ки, т.е. на экране у покупателей одновременно будут товары которые можно купить и товары, с которыми только ознакомиться, посмотрев контакты, поэтому для них таблица Product будет общая, а следовательно и таблица Shop тоже будет одна.
А как разбить сущности?
Сделать базовый и от него наследоваться?
Или все таки сделать разные сущности с разными таблицами и только перед отображением объединять ActiveDataProvider?
хотя во 2-м случае будет много дублирующего кода ... куда тогда его вынести?
Мой старт-ап ;) https://website39.site
SaintRu
Сообщения: 88
Зарегистрирован: 2020.05.13, 11:22
Контактная информация:

Re: Вопрос по архитектуре

Сообщение SaintRu »

Появилась идея, как вариант:
Для Магазина делаем абстрактный класс BaseShop с общим кодом и общим интерфейсом (абстрактные ф-ции) наследуемый от ActiveRecord
от него наследуем уже нужные классы ShopOnline и ShopAd
Тоже самое с товаром - BaseProduct => ProductOnline и ProductAd
А для отображения используем в репозитории свою ф-цию в search($params): ActiveDataProvider
где через UNION объединяем запрос с двух таблиц.
Насколько эта идея ложится в ООП?
Мой старт-ап ;) https://website39.site
BalykhinAS
Сообщения: 179
Зарегистрирован: 2018.02.05, 13:41
Контактная информация:

Re: Вопрос по архитектуре

Сообщение BalykhinAS »

А как быть если клиент хочет перейти с витрины на онлайн? Как по мне в вашем случае нет необходимости делать абстрактные классы и наследников. Достаточно смотреть на настройки соответствующего типа.
SaintRu
Сообщения: 88
Зарегистрирован: 2020.05.13, 11:22
Контактная информация:

Re: Вопрос по архитектуре

Сообщение SaintRu »

Wizard писал(а): 2021.04.15, 14:51 А как быть если клиент хочет перейти с витрины на онлайн? Как по мне в вашем случае нет необходимости делать абстрактные классы и наследников. Достаточно смотреть на настройки соответствующего типа.
Да, а вот про переход с типа на тип я не подумал.
Да и с UNION вышли проблемы, таблицы должны иметь общие колонки, либо различия выносить в отдельные таблицы "1 к 1", а так же сортировка в ActiveDataProvider идет отдельно по каждой таблице, потом они объединяются и на экране выглядит глупо ;) и в getModels() хранится только первый класс, т.е. get_class() показывает тот класс который в выражении $query1->union($query2) первый :?
Короче куча проблем возникла, в общем, надо объединять в одну таблицу и типизировать, хотя часть полей будет пустой в таблицах
Мой старт-ап ;) https://website39.site
BalykhinAS
Сообщения: 179
Зарегистрирован: 2018.02.05, 13:41
Контактная информация:

Re: Вопрос по архитектуре

Сообщение BalykhinAS »

SaintRu писал(а): 2021.04.17, 01:04
Wizard писал(а): 2021.04.15, 14:51 А как быть если клиент хочет перейти с витрины на онлайн? Как по мне в вашем случае нет необходимости делать абстрактные классы и наследников. Достаточно смотреть на настройки соответствующего типа.
Да, а вот про переход с типа на тип я не подумал.
Да и с UNION вышли проблемы, таблицы должны иметь общие колонки, либо различия выносить в отдельные таблицы "1 к 1", а так же сортировка в ActiveDataProvider идет отдельно по каждой таблице, потом они объединяются и на экране выглядит глупо ;) и в getModels() хранится только первый класс, т.е. get_class() показывает тот класс который в выражении $query1->union($query2) первый :?
Короче куча проблем возникла, в общем, надо объединять в одну таблицу и типизировать, хотя часть полей будет пустой в таблицах
Вынесите различия в отдельную связь
Ответить