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类是关键。这个类不与数据库或其他外部系统交互并且没有副作用,例如它是纯粹的功能。给定相同的somethingsothersresult将始终相同。

所以我的问题是:

  • 这是一个有名字的已知模式吗
  • 具有以下功能的类的通用名称是什么Computer

我看过StrategyMediatorCommand模式,但我觉得它们并不完美。

4

1 回答 1

0

您的计算机是 Builder 的一种形式。

Builder 的一种用途是允许对对象的复杂构造进行封装,以使 builder 的客户端永远无法访问部分构造或无效的对象。您配置 Builder,然后从中获取已完成的对象。

请注意,GoF 有一个包含多态结果的构建器示例。这种用法也很常见,但我不认为这是严格要求的。

.NET 和 Java 在它们的框架中都有充分的例子来说明这两种用法。

于 2012-05-14T14:39:04.867 回答