смешивание декоратора и фабричного рисунка - PullRequest
0 голосов
/ 24 февраля 2011

В настоящее время мы используем пользовательский интерфейс Process от Microsoft.Который в основном имеет тенденцию быть "Структурой" MVP.Контроллеры взаимодействуют друг с другом через аргументы ввода / вывода.

Контроллер определяет эти два метода void OnEnterTask(object inputArguments), OutputArguments OnLeaveTask().В основном все входные аргументы содержат xml-данные.

входные аргументы - просто dto's, так что это зависит от контроллера, как интерпретировать xml.

сценарий:

CalculateProductInputArgs-> ProductController -> CalculateProductOutputArgs

, если контроллеру продуктов просто нужно работать с отдельными продуктами, которые работают очень хорошо.но он должен иметь возможность связываться с CompositeProductController.Который посылает CalculateCompositeProductInput/OutputArgs

, поэтому мои мысли представляют собой комбинацию декораторов, которая создается заводским

кодом (псевдопифон):

class Processor:
    """abstract"""
    def ProcessInput(input):
        pass

    def ProcessOutput(output):
        pass

class ProductProcessor(Processor):
    """implements specific product behaviour"""
    pass

class CompositeProductProcessor(ProductProcessor):
    """implements specific product behaviour"""
    def __init__(productprocessor):
        self.processor = productprocessor

    def ProcessInput(input)
        productInput = input.Product
        compositeData = input.CompositeData
        self.processor(productInput)    

class Factory:
    def CreateProcessor(input):
        productprocessor = ProductProcessor() #maybe a specialized processor
        if input.IsComposite():
            composite = CompositeProductProcessor(productprocessor)
            return composite
        return productprocessor

мой простой вопрос.это хорошая практика?или у тебя есть идеи получше?

привет:)

1 Ответ

1 голос
/ 24 февраля 2011

Вполне разумно иметь фабрику, которая решает, какой декоратор (ы) вам нужно создать.

Единственное изменение, которое я могу предложить, - это найти другое имя для CompositeProductProcessor, поскольку это не реализациясоставного шаблона, и наименование может сбить читателя с толку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...