2011-02-24 15 views
0

現在、Microsoftのユーザーインターフェイスプロセスを使用しています。 これは基本的にMVP「フレームワーク」である傾向があります。 コントローラは入力/出力引数を介して互いに通信します。デシリアパターンと工場パターンを混合する

コントローラーはこれらの2つの方法を定義しますvoid OnEnterTask(object inputArguments)OutputArguments OnLeaveTask()。 基本的にすべての入力引数にはxml-dataが含まれています。

入力引数はちょうどdtoなので、xmlをどのように解釈するのかはコントローラーに任せます。

シナリオ:

CalculateProductInputArgs - >ProductController - >CalculateProductOutputArgs

productcontrollerはちょうど非常にうまく機能し、単一の製品を処理するために必要がある場合。 ですが、CompositeProductControllerと通信できる必要があります。

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 

私の素朴な疑問:

CalculateCompositeProductInput/OutputArgsを送信 はので、私のthougtsは工場

コード(疑似パイソン)によって作成されたデコレーターの組み合わせです。 それは良い方法ですか?それとも良いアイデアはありますか?

挨拶:)

答えて

1

それはあなたが作成するために必要なものデコレータ(複数可)を決定する工場を持つことが非常に合理的です。

唯一の変更点は、CompositeProductProcessorという別の名前はCompositeパターンの実装ではないということです。この名前は読者にとって紛らわしいかもしれません。

+0

はい、これは開発者を混乱させる可能性があります。 –