Сколько бизнес-кода можно иметь на фабрике?
Я изучаю шаблоны, используя проблемы, которые у меня есть. Итак, извините за некоторые слишком простые вопросы.
У меня есть фабрика, которая создает четыре разных типа продукции:
class ProductFactory:
def product_a(self):
return ProductA()
def product_b(self):
return ProductB()
def product_c(self):
return ProductC()
def product_d(self):
return ProductD()
Но ProductA немного сложен. Фактически, ProductA построен с использованием двух разных классов, потому что это разные источники данных, которые нужно сложным образом собрать для создания полезного ProductA.
Итак, мои сомнения:
Разве это нормально, если мой метод product_a() в ProductFactory будет ответственным за то, чтобы возиться с этими двумя источниками данных, сделать все необходимое и, наконец, создать аккуратный ProductA? Или product_a() не должен ничего знать о том, как ProductA монтируется с использованием значительной бизнес-логики?
Например, только иллюстрация, мой ProductA будет выглядеть примерно так:
class ProductFactory:
def __init__(self, data_source1=None, data_source2=None):
self.data_source1 = data_source1
self.data_source2 = data_source2
def product_a(self):
formated_data = self.data_source1.do_creepy_stuff()
messed_data = self.data_source2.mess_a_lot()
final_data = formated_data.update(messed_data)
return ProductA(final_data)
def product_b(self):
return ProductB()
if __name__ == "__main__":
data_source1 = DataSource1('my_file')
data_source2 = DataSource2('my_directory')
factory = ProductFactory(data_source1, data_source2)
product = factory.product_a()
Если эта идея в порядке, было бы лучше передать источники данных в качестве параметра в метод product_a() или в качестве параметра в конструктор фабрики (как в примере)?
В общем... Я очень смущен, чтобы дать фабрике ответственность за то, чтобы знать, как выполнять методы из этих источников данных (например, data_source1.do_creepy_stuff ())... Я предполагаю, что любое изменение в моих классах источников данных может загрязнить мой завод.
Но в то же время у меня фактически есть ProductA, который использует различные источники данных в качестве своих частей И этими источниками данных необходимо манипулировать перед монтированием ProductA, просто потому, что эти источники данных также используются другими частями программного обеспечения, которое имеет ничего не делать с продуктами.
Итак, я действительно усердно работаю, чтобы понять, как лучше справиться с этой ситуацией, и фабрика кажется лучшим решением, но... есть эти сомнения...
Спасибо за любую помощь!!