工厂可以拥有多少商业代码?

时间:2017-07-23 20:05:47

标签: python design-patterns architecture software-design re-engineering

我正在学习使用实际问题的模式。所以,抱歉一些基本的问题。

我有一个工厂,可以创建四种不同类型的产品:

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 ,简单来说,这些数据源也被软件的其他部分用于与产品无关。

所以,我真的在努力去理解处理这种情况的最佳方法, 工厂 似乎是最好的解决方案,但是......那些疑惑......

感谢您的帮助!!

0 个答案:

没有答案