纯制造与间接的区别

时间:2013-01-16 05:48:33

标签: oop design-patterns grasp

我试图找到教程和很好的例子来解释这两者之间的差异,但却无法找到任何信息。

纯粹的制作和间接行为是为了创造和分配中间对象的责任,所以任何人都可以解释这些设计模式之间的区别吗?

谢谢!

3 个答案:

答案 0 :(得分:18)

如果要在组件之间创建较低的耦合,请使用间接。 Larman在Apply UML和Patterns中建议的示例是TaxCalculatorAdapter类。为了保护客户端不必知道可能的适配器的内部工作,他用间接隐藏它们,只暴露所需的API。这个间接将与适应者高度耦合,但只与客户松散耦合。

来自Pure Fabrication的PersistentStorage 确实是 Indirecton (Larman在书中说明了这一点),因为它提供了较低的耦合。 Pure Fabrication超出了这个范围,但是它会创建不属于您的域模型的对象。

Larman给出的示例是域类Sale。由于Sale包含要保存的所有数据,因此它也可以保留销售的逻辑(信息专家)。但是,持久性逻辑与销售概念无关,因此该类将变得不连贯。此外,通过将Sale与特定的DB API相结合,可以限制重用(间接到救援)。而且由于保存是一般活动,您可能还会在需要保存的对象中复制代码。为了避免这种情况,你做了一些事情(纯粹的制作),这意味着你创建了一些不属于Domain模型的东西(这里是:PersistentStorage),但仍然在你的应用程序中捕获一个必要的活动。

因此,Pure Fabrication它是Indirection的专业化或变体。

答案 1 :(得分:0)

纯伪造和间接造词都是GRASP的原则。 遵循this dzone文章中的示例,可能会清除关于pure fabricationindirection的概念。

纯加工:

我们知道银行系统的域模型包含AccountBranchCashCheckTransaction等类。需要存储有关客户的信息。为此,一种选择是将数据存储职责委托给域类。此选项将降低领域类的凝聚力(不止一项责任)。最终,该选项违反了SRP原则。

另一个选择是引入另一个不代表任何域概念的类。在银行业务示例中,我们可以引入一个名为PersistenceProvider的类。此类不代表任何域实体。此类的目的是处理数据存储功能。因此PersistenceProvider是纯粹的伪造。

间接:

该原理回答了一个问题:如何使对象之间的相互作用使它们之间的结合力仍然弱?

解决方案是:赋予与中间对象交互作用的责任,以使不同组件之间的耦合保持较低。

例如,一个软件应用程序可以使用不同的配置和选项。为了使域代码与配置脱钩,添加了一个特定的类-如以下清单所示:

Public Configuration{
  public int GetFrameLength(){
    // implementation
  }
  public string GetNextFileName(){
  }
 // Remaining configuration methods
}

通过这种方式,如果任何域对象都想读取某个配置设置,它将询问Configuration类对象。因此,主代码已与配置代码分离。

如果您已阅读纯加工原理,则此Configuration类是纯加工的示例。但是间接的目的是建立去耦。另一方面,纯制造的目的是保持领域模型整洁,仅代表领域概念和职责。

诸如AdapterFacadeObserver之类的许多软件设计模式都是间接原理的特化。

答案 2 :(得分:-1)

纯制造类是一类,在设计的问题域中没有概念,该类被赋予高内聚性,低耦合和重用性。 间接的 它解决了分配避免事物之间直接耦合的责任的问题,还确保了对象之间的低耦合并保持较高的驻留能力。