Setti
@Setti

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

Привет!

Думаю о паттерне обработки выборки из базы.

В целом задача в упрощенном виде такая: есть выборка некоторого множества товаров из базы, нужно произвести обработку значений для каждого товара:

— применить скидки

— применить фильтры к товару для данного покупателя

— всякие бонусы

— дополнительные атрибуты в зависимости от ситуации

и т.д. и т.п.

Сделать class Items_pool и понавешать foreach для каждого случая — первое, что приходит в голову, но чувствую, что это некрасиво. Есть какие-то best practice?
  • Вопрос задан
  • 2487 просмотров
Решения вопроса 1
Angelina_Joulie
@Angelina_Joulie
Предлогаю Chain-of-responsibility pattern
en.wikipedia.org/wiki/Chain-of-responsibility_pattern

Если я правильно поняла задачу, как пошаговое выполнение каких-то действий.
Таким образом каждый блок будет отвечать за добавление/отнимание чего бы то ни было от «базовой» цены.

А для того, что бы контролировать последовательность — используем абстрактную фабрику или фабричный метод (да, они отличаются).
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@Nc_Soft
Вы тянете все товары из базы, а потом применяете фильтры?
Ответ написан
Gluttton
@Gluttton
Чем не устравивает решение поставленной задачи на стороне SQL-сервера?
Ответ написан
Gluttton
@Gluttton
Тем, что слишком много логики ложится на модель.

Помоему императивное «жевание» результата декларативной операции так же приведет к увеличению логики.
Сделать class Items_pool и понавешать foreach для каждого случая — первое, что приходит в голову, но чувствую, что это некрасиво

Для применения курса валюты на стороне клиента необходимо пройтись циклом по выборке, а при решении задачи средствами SQL достаточно попросить сервер результат умножить на курс.

Вам виднее, но мне кажеться логичным формирование индивидуального запроса на стороне клиента, (например с использованием хранимой процедуры если количество атрибутов строго ограничено, в противном случае слышал, что может помочь Query Object, но сам никогда не использовал) и получать от сервера «готовые» данные.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы