工厂里有多少业务代码是可以的?

2024-05-21 08:58:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用我实际遇到的问题学习模式。所以,对不起,有些太基本的问题。你知道吗

我有一个工厂,生产四种不同类型的产品:

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。你知道吗

所以,我怀疑:

我的ProductFactory中的product_a()方法负责处理这两个数据源,做所有必要的事情并最终构建整洁的ProductA可以吗?或者ProductA()不应该知道ProductA是如何使用相当大的业务逻辑装载的?你知道吗

例如,只有一个示例,myProductA看起来像:

    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()方法,或者作为参数传递给工厂构造函数(如示例所示)?你知道吗

总的来说。。。让工厂知道如何从这些数据源执行方法(比如数据源1.do\u screeny\u stuff())我很困惑。。。我想我的数据源类的任何变化都可能污染我的工厂。你知道吗

但同时,我实际有一个产品a,它使用不同的数据源作为它的一部分这些数据源必须在安装产品a之前进行操作,因为这些数据源也被与产品无关的软件的其他部分使用。你知道吗

所以,我真的很努力去理解处理这种情况的最佳方法,一个工厂似乎是最好的解决方案,但是。。。有人怀疑。。。你知道吗

谢谢你的帮助!!你知道吗


Tags: 方法selfdatareturn产品工厂defproduct