2012-05-09 5 views
0

メソッドの実装をテストするためにナイーブとハードがこのこれはパターンですか?

public void getFromDatabaseComputeAndStore(SomeType param) { 
    Collection<Something> s = dao.retrieveSomethingFromDatabase(param); 
    Collection<Other> o = dao.retrieveOtherFromDatabase(param); 
    Result r = null; 
    <do massive computation, call other methods, figure out what r should be> 
    <based on s and o> 
    dao.store(r); 
} 

のようになります。通常、私は

Computerクラスが鍵となり
public void getFromDatabaseComputeAndStore(SomeType param) { 
    Computer computer = new Computer(); 
    Collection<Something> s = dao.retrieveFromDatabase(param); 
    Collection<Other> o = dao.retrieveOtherFromDatabase(param); 
    computer.setSomething(s); 
    computer.setOther(o); 
    computer.execute(); 
    Result r = computer.getResult(); 
    dao.store(r); 
} 

のようなものにこれをリファクタリングと思います。このクラスはデータベースや他の外部システムとやりとりすることはなく、副作用はありません。例えば純粋に機能的です。同じsomethingsothersを指定すると、resultは常に同じになります。

だから私の質問は以下のとおりです。

  • が、これは私が見てきたComputer

の機能を持つクラスの一般的な名前になり何名

  • と既知のパターンですStrategyMediator、およびCommandパターンであるが、私はそれらが完全に適合しているとは思わない。

  • +0

    なぜ2つの引数を取る方法がないのですか?特に、複数のスレッドを使用していないか、いくつかの新しいコードの他に他の利点がありません。 –

    +0

    [Master/Workerパターン](http://stackoverflow.com/a/8573733/829571)のように見えます。 http://blog.gigaspaces.com/2009/08/24/the-master-worker-pattern/も参照してください。 – assylias

    +0

    私が示したように、結果を計算するのに必要な計算量が非常に大きくなる可能性があり、それを分離したいかもしれないからです。 – slipset

    答えて

    0

    あなたのコンピュータはビルダーの一種です。

    ビルダーの使用の1つは、ビルダーのクライアントが部分的に構成されたオブジェクトまたは無効なオブジェクトにアクセスすることがないように、オブジェクトの複雑な構築を可能にすることです。 Builderを構成し、そこから完成したオブジェクトをフェッチします。

    GoFには、多型結果を含むBuilderの例があります。その使い方もよくありますが、厳密に必要とは感じません。

    .NETとJavaには、両方のフレームワークの使用例が豊富に用意されています。

    関連する問題