Спасибо за видео! Подскажи, где можно прочитать про то как понимать структурные схемы которые у тебя нарисованы. Начинаю гуглить структурные схемы там такое ощущение выдаются функциональные, точно не как у тебя.
Больше похоже на вариацию абстрактной фабрики. Для чего создавать класс под каждый рецепт пиццы в котором мы просто хардкодим значения? А если клиент закажет без какого-то ингредиента? Мы не сможем использовать конкретный рецепт. Или попросит позажарестие. Думаю, что можно упростить и сделать гибче. class PizzaBuilder: def __init__(self, name): self.pizza = Pizza(name) def prepare_dough(self, dough_depth, dough_type): self.pizza.dough = PizzaBase(dough_depth, dough_type) return self def add_sauce(self, sauce_type): self.pizza.sauce = sauce_type return self def add_topping(self, *topping_types): self.pizza.toppings.extend(topping_types) return self def set_cooking_time(self, cooking_time): self.pizza.cooking_time = cooking_time return self def build(self): return self.pizza margarita_pizza = PizzaBuilder('Margarita') \ .prepare_dough(PizzaDoughDepth.THIN, PizzaDoughType.CORN) \ .add_sauce(PizzaSauceType.TOMATO) \ .add_topping(PizzaToppingType.BACON, PizzaToppingType.CHILI) \ .set_cooking_time(15) \ .build()
Все равно не очень понятно чем куча методов строителя лучше чем передача параметров в конструктор. Нужно знать все методы и их правильную последовательность в клиентском коде а если какие-то методы не обязательны то тут мы напоремся на нарушение SOLID в части разделения интерфейса.
Так на этот случай и существует реализация с классом директора, на которого и возлагается обязанность нужным образом инициализировать создаваемый экземпляр класса через строителя)
Спасибо за видео! Подскажи, где можно прочитать про то как понимать структурные схемы которые у тебя нарисованы. Начинаю гуглить структурные схемы там такое ощущение выдаются функциональные, точно не как у тебя.
Гуглите UML (Unified Modeling Language) =)
Больше похоже на вариацию абстрактной фабрики.
Для чего создавать класс под каждый рецепт пиццы в котором мы просто хардкодим значения?
А если клиент закажет без какого-то ингредиента? Мы не сможем использовать конкретный рецепт. Или попросит позажарестие.
Думаю, что можно упростить и сделать гибче.
class PizzaBuilder:
def __init__(self, name):
self.pizza = Pizza(name)
def prepare_dough(self, dough_depth, dough_type):
self.pizza.dough = PizzaBase(dough_depth, dough_type)
return self
def add_sauce(self, sauce_type):
self.pizza.sauce = sauce_type
return self
def add_topping(self, *topping_types):
self.pizza.toppings.extend(topping_types)
return self
def set_cooking_time(self, cooking_time):
self.pizza.cooking_time = cooking_time
return self
def build(self):
return self.pizza
margarita_pizza = PizzaBuilder('Margarita') \
.prepare_dough(PizzaDoughDepth.THIN, PizzaDoughType.CORN) \
.add_sauce(PizzaSauceType.TOMATO) \
.add_topping(PizzaToppingType.BACON, PizzaToppingType.CHILI) \
.set_cooking_time(15) \
.build()
Скинь свой код пожалуйста
Так в описании видео ссылка на репозиторий с кодом)
@@_MADTeacher хера я слепой, спасибо
Все равно не очень понятно чем куча методов строителя лучше чем передача параметров в конструктор. Нужно знать все методы и их правильную последовательность в клиентском коде а если какие-то методы не обязательны то тут мы напоремся на нарушение SOLID в части разделения интерфейса.
Так на этот случай и существует реализация с классом директора, на которого и возлагается обязанность нужным образом инициализировать создаваемый экземпляр класса через строителя)
@@_MADTeacher Спасибо за ответ.
Если у вас в конструкторе дофига параметров, время призадуматься, мб не Божественная ли у вас сущность🥴 имхо…