25 January 2014

翻译自维基百科GRASP (object-oriented design)

General Responsibility Assignment Software Patterns(通用职责分配软件模式),简写为GRASP,由面向对象设计中对类和对象的职责分配原则组成。

GRASP使用的模式和原则有:控制器、创建者、间接性、信息专家、高内聚、低耦合、多态、防止变异和纯虚构。所有这些模式都回答了一些软件设计问题,并且这些问题几乎在每一个软件开发项目中都会遇到。这些技术还没有被用来发明新的工作方式,而是为了改善文档和规范旧的开发方式,是在面向对象设计中不断尝试和测试的编程原则。

Larman说:“软件开发中最关键的设计工具是一个在设计原则上受过良好教育的头脑,而不是UML或者其它技术。”因此,GRASP是一个真正的思维工具,一个学习援助,在面向对象软件的设计中有所帮助。

控制器

与此相关: Model–view–controller

控制器模式分配负责处理系统事件的职责给一个非UI类,这个类通常代表整个系统或者一个用例场景。一个控制器对象是负责接收或处理系统事件的非用户界面对象。

一个用例控制器应该被用来处理该用例的所有系统事件,并且可能会是多个用例(例如:对于创建和删除用户这两个用例,你可以使用一个UserController,而不是两个分开的用例控制器)。

它被定义为位于UI层以下的第一层对象,用于接收和协调(“控制”)一个系统操作。控制器应该委托需要完成的工作给其它对象;它协调或控制整个过程。它自己不应该处理太多工作。在具有常见信息系统逻辑架构的布局的面向对象系统中,GRASP控制器可以看作是应用/服务层的一部分(假设应用程序已经在应用/服务层和领域层之间有明确的区分)。

创建者

与此相关:Factory pattern

对象的创建是一个面向对象的系统中最常见的活动之一。哪一个类应该负责创建对象是对象和特定类之间关系的基本属性。简单地说,“创建者模式是负责创建类的一个对象”。

如果以下条件之一(越多越好)为真时,将创建类A的实例的职责分配给类B:

  • B“包含”或组成聚集A。
  • B记录A。
  • B直接使用A。
  • B具有A的初始数据,并且在创建A时会将这些数据传递给A。

高内聚

与此相关:Cohesion (computer science)

高内聚是一种评价模式,旨在保持对象功能的适当集中,便于管理和理解。高内聚通常用于支持低耦合。高内聚意味着一个给定的元素的职责密切相关和高度集中。将程序分为多个类和子系统是提高一个系统内聚性的过程。另外,低内聚指一个给定的元素拥有太多不相关的职责。低内聚经常遭受难以理解,难以重用,难以维护和难以修改的缺点。

间接性

与此相关:Information hiding 间接性模式支持两个元素之间的低耦合(同时也潜在的支持重用性)。它是通过将调解的职责分配给两个元素之间的中间对象。这方面的一个例子是在数据(模型)和表示(视图)之间引入控制器组件在Model-view-controller模式中。

信息专家

与此相关:Information hiding 信息专家(也称专家,或专家原则)是一种用于确定委托责任到哪里的原则。这些责任包括方法,计算字段,依此类推。

使用信息专家的原则,一个分配责任的通用方法是观察给定的责任,确定责任需要哪些信息,然后确定这些信息被存储在哪里。

信息专家会将责任分配给那些具有满足该责任所需信息的类。

低耦合

主要文章:Loose coupling 低耦合是一种评价模式,用于决定如何分配职责以支持:

  • 类之间的依赖较低。
  • 当改变某一个类时,对其它类带来较低的影响。
  • 更高的可重用性。

多态性

主要文章:Polymorphism in object-oriented programming 根据多态性,当相关选择或行为随类型(类)有所不同时,使用多态操作为变化的行为类型分配职责。

防止变异

主要文章:Delegation pattern 防止变异模式可以在其它元素(对象、系统、子系统)发生变化时,通过包装不稳定的接口和使用功能多态性来创建这个接口的各种实现,防止对其它元素产生不良影响。

纯虚构

与此相关:Service (systems architecture) 纯虚构是指一个并不代表问题领域中的概念的类,特别用来实现低耦合,高内聚,和可重用性,当由专家模式提出的方案无法解决问题的时候。这种类在Domain-driven design被称为“服务”。