Сколько бизнес-кода можно иметь на фабрике?

Я изучаю шаблоны, используя проблемы, которые у меня есть. Итак, извините за некоторые слишком простые вопросы.

У меня есть фабрика, которая создает четыре разных типа продукции:

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, просто потому, что эти источники данных также используются другими частями программного обеспечения, которое имеет ничего не делать с продуктами.

Итак, я действительно усердно работаю, чтобы понять, как лучше справиться с этой ситуацией, и фабрика кажется лучшим решением, но... есть эти сомнения...

Спасибо за любую помощь!!

0 ответов

Другие вопросы по тегам