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);
}

通常、私はこれを次のようなものにリファクタリングします

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);
}

ここで、Computerクラスがキーです。このクラスはデータベースや他の外部システムと相互作用せず、純粋関数型などの副作用もありません。somethings同じとが与えられるとothersresultは常に同じになります。

だから私の質問は:

  • これは名前の付いた既知のパターンですか
  • 次の機能を持つクラスの一般名は何でしょうかComputer

Strategy、、、Mediatorのパターンを見てきましたが、Command完全にフィットしているとは思えません。

4

1 に答える 1

0

お使いのコンピューターはビルダーの一形態です。

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

GoFには、多態的な結果を含むビルダーの例があることに注意してください。その使い方も一般的ですが、厳密には必要ないと思います。

.NETとJavaには、フレームワークでの両方の使用法の十分な例があります。

于 2012-05-14T14:39:04.867 に答える