GRASP模式:多态,纯加工,间接,受保护的变体

哈Ha!我叫弗拉迪斯拉夫·罗丹(Vladislav Rodin)。我目前是OTUS的重型架构师课程的负责人,并且还教授软件架构课程。



尤其是对于“建筑和设计模式”课程的新设置的开始,我继续我有关GRASP模式的出版物的系列。










介绍



在Craig Larman的书“应用UML和模式,第三版”中描述了GRASP模式是GoF模式的概括,也是OOP原理的直接结果。它们补充了逻辑阶梯中缺少的步骤,使您可以从OOP原理中得出GoF模式。GRASP模式不是设计模式(像GoF一样),而是在类之间分配责任的基本原理。如实践所示,它们并不是很流行,但是使用全套GRASP模式对设计的类进行分析是编写良好代码的前提。



GRASP模板的完整列表包含9个元素:



  • 信息专家
  • 创作者
  • 控制者
  • 低耦合
  • 高凝聚力
  • 多态性


上一次我们讨论了Controller模式今天,我建议考虑列表中其余的模式。



多态性



应根据类型处理不同的行为,以允许更换系统部件。



建议使用多态操作在类之间分配职责,使每个外部系统具有自己的接口。例如,我们可以通过根据不同客户的需求为某些客户连接某些插件来引用标准化的库或应用程序配置。



代码中存在开关构造违反了该原理,开关需要重构。



过度使用多态会导致代码过于复杂,通常不建议这样做。



纯加工



必须确保低耦合和高内聚性。为此,可能需要合成人工精华。纯加工模式建议您不要犹豫。例如,考虑数据库的外观。这是一个纯人工物体,在被摄对象区域没有类似物。通常,任何外墙都是纯净的(当然,除非是相应应用程序中的建筑外墙)。



间接的



必须在对象之间分配职责,避免直接绑定。为此,您可以将组件或服务之间的通信职责分配给中间对象。



转换为俄语后,该模式表示以下含义:代码中的任何对象都必须通过其接口(相同的中间对象)进行调用。



间接寻址是本文列出的最关键的模式。首先,在安全性方面非常简单。其次,由于第一点,它使代码具有很大的灵活性,而不必进行过早的优化。如果所有类都通过接口相互调用,则可以从系统中“剥离”任何片段并将其在其他地方重用。而且,使用间接寻址使您几乎可以添加四人一组的任何模板,而不会增加过多的负担或重构类。



受保护的版本



必须对系统进行设计,以使其某些元素的更改不会影响其他元素。作为解决方案,提出了确定可能的变化或不稳定性的点并以确保系统稳定运行的方式分配职责。



实际上,这不是一种模式,而是通过遵循其余模式实现的目标。



输出量



GRASP模板包含8种模式:



  1. 信息专家-我们处理包含信息的地方。
  2. 创建者-我们在需要它们的地方创建对象。
  3. 控制器-我们将多线程逻辑移动到单独的类或组件中。
  4. 低耦合5)高内聚性-我们设计的类具有统一的业务逻辑,并且它们之间的连接数量最少。
  5. 多态性-如果需要,我们以多态调用的形式为系统行为安排各种选项。
  6. Pure Fabrication — , , Low Coupling High Cohesion.
  7. Indirection — .
  8. Protected Variations — , .






:






All Articles