メソッドの素朴でテストが難しい実装は、次のようになります。
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
同じとが与えられるとothers
、result
は常に同じになります。
だから私の質問は:
- これは名前の付いた既知のパターンですか
- 次の機能を持つクラスの一般名は何でしょうか
Computer
Strategy
、、、Mediator
のパターンを見てきましたが、Command
完全にフィットしているとは思えません。