2011-02-24 2 views
0

В настоящее время мы используем процесс пользовательского интерфейса от Microsoft. В основном это MVP «Framework». Контроллеры взаимодействуют друг с другом по входным/выходным аргументам.шаблон усадки смешивания и заводской шаблон

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

вводные операции - это просто dto, поэтому его до контроллера, как интерпретировать XML.

сценарий:

CalculateProductInputArgs ->ProductController ->CalculateProductOutputArgs

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

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

код (псевдо питона):

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

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

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

+0

Да, это может смутить разработчиков. –

Смежные вопросы