我正在学习使用实际问题的模式。所以,抱歉一些基本的问题。
我有一个工厂,可以创建四种不同类型的产品:
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 。
所以,我怀疑:
ProductFactory 中的 product_a()方法是否可以负责处理这两个数据源,做一切必要的事情并最终构建整洁的的产品A ?或 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 用于不同的数据源,因为它的部分 AND 这些数据源必须在安装之前进行操作ProductA ,简单来说,这些数据源也被软件的其他部分用于与产品无关。
所以,我真的在努力去理解处理这种情况的最佳方法, 工厂 似乎是最好的解决方案,但是......那些疑惑......
感谢您的帮助!!