Сведения о вопросе

FUTER

15:38, 19th August, 2020

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

Просмотров: 282   Ответов: 4

Привет!

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

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

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

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

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

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

и т.д. и т.п.

Сделать class Items_pool и понавешать foreach для каждого случая — первое, что приходит в голову, но чувствую, что это некрасиво. Есть какие-то best practice?



  Сведения об ответе

PAGE

18:43, 22nd August, 2020

Предлогаю Chain-of-responsibility pattern
en.wikipedia.org/wiki/Chain-of-responsibility_pattern

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

А для того, что бы контролировать последовательность — используем абстрактную фабрику или фабричный метод (да, они отличаются).


  Сведения об ответе

lool

09:32, 27th August, 2020

Вы тянете все товары из базы, а потом применяете фильтры?


  Сведения об ответе

PROGA

10:19, 28th August, 2020

Чем не устравивает решение поставленной задачи на стороне SQL-сервера?


  Сведения об ответе

VCe znayu

04:12, 14th August, 2020

Тем, что слишком много логики ложится на модель.

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

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться