Привет, мне было поручено создать приложение со следующим заданием.
Внедрить интерфейс, который рассчитывает цены на основе промо-правил.
co = Checkout.new(promotional_rules)
co.scan(item)
co.scan(item)
price = co.total
По сути, в зависимости от установленных промо-правил, определенные предметы соответственно обесцениваются.
У меня была некоторая обратная связь с моим кодом, в которой говорилось, что я инкапсулировал группу promo_rules, а затем все равно выставил правила в виде массива - плохо ОО
Я изначально создал объект promo_rules, который содержит массив правил.
def initialize
@rules = []
end
def addrule(rule)
@rules.push(rule)
end
Тогда в моем объекте оформления заказа у меня есть объект promo_rules, который был настроен и передан в инициализатор. Я перебираю массив правил, содержащихся в объекте promo_rules, и применяю их к элементам, сканируемым объектом извлечения.
def initialize(promotionalrules=Promotionalrules.new)
@promotionalrules = promotionalrules
end
....Other code
for rule in @promotionalrules.getrules
for item in @items
##Execute rule on current item.
end
end
Я не слишком доволен своим кодом ... цикл с циклом и т. Д. Но я просто ищу некоторую помощь с инкапсуляцией, так как я не уверен, где я ошибся.
Любые предложения о хороших шаблонах проектирования, которые будут применяться к брифу, также будут полезны, так как не слишком уверены в подходе, который я выбрал. Спасибо