Давайте рассмотрим простой пример: у меня есть продукты.Продукты могут быть в одной или нескольких категориях, а также в одном или нескольких каналах.
Итак, у меня есть объект для продукта, категории и канала, а также их классы сопоставления и фабрики.
Мой подход № 1 должен быть на 100% отделен;ProductFactory просто создает экземпляр продукта.А внутри класса Product у меня есть метод отложенного создания экземпляров, который вызывает фабрику категорий и каналов и сохраняет объект по мере необходимости.
Это отлично подходит для страницы сведений о продукте, но когда дело доходит до списка продуктов, мой запросколичество становится действительно высоким, так как я должен сделать 2 дополнительных запроса для каждого продукта, и давайте посмотрим правде в глаза: когда я отображаю список продуктов в категории # 2, совершенно безумно создавать 25 раз одну и ту же категорию для каждого продукта.
Мой подход # 2 - немного соединить вещи;ProductFactory делает несколько JOIN и извлекает всю информацию о категории и канале и создает их.ИМО, это так же неприятно, как и первое решение, потому что, если количество запросов становится низким, я просто запускаю запрос большего размера, поэтому в фоновом режиме он ничего не меняет.
Мой подход № 3 состоит в том, чтобы отделить вещи, ноне иметь цепочечной автоматизации;Сначала я зациклился на всем продукте, создал массив всех категорий и всех каналов, управлял дублирующим идентификатором, а затем создал их все.Это кажется хорошим, но код больше не является цепным.(Т.е. я не могу сделать $ product-> getCategory (), чтобы получить список категорий, в которых хранится продукт.)
Какой подход вы предлагаете?