14

我试图找到可以解释这两者之间差异的教程和好的示例,但找不到任何信息。

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

谢谢!

4

3 回答 3

21

如果要在组件之间创建较低的耦合,则使用间接。Larman 在应用 UML 和模式中建议的示例是一个 TaxCalculatorAdapter 类。为了使客户端不必知道可能的适配器的内部工作原理,他用间接方式隐藏它们,只公开所需的 API。这种间接性将与适配者高度耦合,但仅与客户端松散耦合。

PersistentStorage from Pure Fabrication确实是一个间接函数(Larman 在书中这样说),因为它提供了较低的耦合。Pure Fabrication不仅如此,它还创建了不属于您的域模型的对象。

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

因此,Pure Fabrication 它是一种专业化,或者更确切地说是间接的一种变体。

于 2013-03-06T13:36:01.240 回答
3

纯制造和间接都是GRASP的原则。以下dzone 文章中的示例可能会清除您对pure fabrication的概念indirection

纯制造:

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

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

间接:

这一原则回答了一个问题:你如何使对象以一种使它们之间的联系保持弱的方式进行交互?

解决方案是:将交互的责任交给一个中间对象,使不同组件之间的耦合保持在较低水平。

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

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

这样,如果任何域对象想要读取某个配置设置,它将询问配置类对象。因此,主代码与配置代码解耦。

如果你读过纯制造原理,这个配置类就是一个纯制造的例子。但是间接的目的是创建解耦。另一方面,纯粹制造的目的是保持领域模型的整洁,只代表领域概念和职责。

许多软件设计模式,如AdapterFacade和 ,Observer都是间接原则的特化。

于 2019-08-28T06:58:22.003 回答
-1

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

于 2018-10-16T03:37:38.980 回答