我试图找到教程和好的例子来解释这两者之间的区别,但找不到任何信息。
纯粹的虚构和间接行为是为了创建和分配中间对象的责任,那么谁能解释一下这些设计模式之间的区别是什么?
谢谢!
发布于 2013-03-06 21:36:01
如果您想要在组件之间创建较低的耦合,则可以使用间接。拉尔曼在应用统一建模语言和模式时建议的示例是一个类TaxCalculatorAdapter。为了使客户端不必知道可能的适配器的内部工作原理,他间接地隐藏了它们,只公开了所需的API。这种间接性将高度耦合到适配器,但仅松散耦合到客户端。
来自纯制造的PersistentStorage确实是一个间接的(拉曼在书中如此陈述),因为它提供了较低的耦合。Pure Fabrication超越了这一点,因为它创建的对象不是域模型的一部分。
拉曼给出的例子是一个域类Sale。由于Sale有所有要保存的数据,因此它也是保存销售的逻辑的候选者(信息专家)。但是,持久化逻辑与Sale的概念无关,因此该类将变得不内聚。此外,通过将Sale耦合到特定的DB,您可以限制重用(间接地进行救援)。由于保存是一项常规活动,因此您可能还会在也需要保存的对象中复制代码。为了避免这种情况,您可以虚构一些东西(纯粹的虚构),这意味着您创建了一些不属于域模型的东西(这里是:PersistentStorage),但仍然捕获了应用程序中的基本活动。
因此,纯制造是一种特化,或者更确切地说,是间接的变体。
发布于 2019-08-28 14:58:22
纯粹的虚构和间接都是GRASP的原则。this dzone文章中的以下示例可能会澄清您对pure fabrication和indirection的概念。
纯粹的制造:
我们知道银行系统的域模型包含Account、Branch、Cash、Check、Transaction等类。域类需要存储有关客户的信息。为了做到这一点,一种选择是将数据存储责任委托给域类。此选项将降低域类的内聚性(多个职责)。最终,此选项违反了SRP原则。
另一种选择是引入另一个不代表任何领域概念的类。在银行示例中,我们可以引入一个名为PersistenceProvider的类。此类不表示任何域实体。这个类的目的是处理数据存储功能。因此,PersistenceProvider是纯属虚构的。
间接性:
这一原则回答了一个问题:如何使对象以一种使它们之间的联系保持弱的方式进行交互?
解决方案是:将交互的责任交给中间对象,以便不同组件之间的耦合度保持在较低水平。
例如,软件应用程序使用不同的配置和选项。为了将域代码从配置中解耦,添加了一个特定的类-如下面的清单所示:
Public Configuration{
public int GetFrameLength(){
// implementation
}
public string GetNextFileName(){
}
// Remaining configuration methods
}这样,如果任何域对象想要读取某个配置设置,它将询问configuration类对象。因此,主代码与配置代码解耦。
如果您已经阅读了纯制造原理,那么这个配置类就是一个纯制造的例子。但间接的目的是创建解耦。另一方面,纯制造的目的是保持域模型的整洁,并且仅表示域概念和职责。
许多软件设计模式,如Adapter、Facade和Observer,都是间接原则的特化。
发布于 2018-10-16 11:37:39
纯制造类是一种类,它不是在问题域中设计的概念,这个类具有高内聚性、低耦合性和重用性。它解决了分配避免things.it之间直接耦合的责任的问题,还确保了对象之间的低耦合&维护更高的驻留能力。
https://stackoverflow.com/questions/14352106
复制相似问题