赞
踩
GRASP是通用职责分配软件模式(General Responsibility Assignment Software Patterns)的缩写,能够帮助我们理解基本对象的设计,提高面向对象设计(OOD)的觉悟。
GRASP总共有9中模式分别是:
GRASP的通常的关系图
问题:如何设计对象,子系统和系统,使其内部的变化或不稳定性不会对其他元素产生不良影响?
解决方案:识别变化或不稳定的地方,分配职责用以在变化地方创建稳定的接口。
问题:怎么降低依赖性,减少变化带来的影响,提高重用性
解决方案:分配职责时,使耦合性尽可能的低,利用这一原则评估方案。
Notice: 高耦合不是问题,问题是依赖了不稳的元素,一旦不稳定的元素改变,耦合的类就将改变。
问题:怎么保持对象是有重点的,可理解的,可管理的,并且能够支持低耦合?
解决方案:分配职责可保持较高的内聚性。利用这一点来评估方案。内聚是对元素职责的相关性和集中度的度量。内聚低的类通常表示粗粒度的抽象,或承担了本应该委托给其他对象的职责。
问题:应该由谁来创建某类的实例
解决方案:满足以下条件,应该由A类实例来创建B类的实例。
问题:为了避免两个或者多个事物之间直接耦合,应该如何分配职责?如何使对象解耦,以支持低耦合并提高复用性潜力?
解决方案:将职责分配给中介对象,是其作为其他构件或服务之间的媒介,以避免它们之间的直接耦合,中介实现了其他构件之间的间接性。
问题:如何处理基于类型的选择?如何创建可插拔的软件构件?
解决方案:当相关选择或行为随类型有所不同时,使用多态操作为变化的行为类型分配职责。
问题:给对象分配职责的基本原则是什么?
解决方案:把职责分配给具有完成职责所需信息的类。
问题:当不想违背高内聚和低耦合或者其他目标,但是基于专家模式提供的方案又不合适时,哪些对象应该承担这一职责。
解决方案:人为的制造一个类分配一组高内聚的职责,该类并不代表问题领域里面的概念,是需要的类,用以支持高内聚和低耦合。
问题:在UI层之上接受和协调系统操作的的第一个对象是什么?
控制器是UI层之上的第一个对象,它负责接受和处理系统操作消息。
解决方案:把职责分配给能代表以下选择之一的类:
<UseCaseName>Handler
,<UseCaseName>Session
。Notice: 此处的控制器模式不是MVC的C。它类似于MVC的C,MVP中的P。就是隔离UI层和业务层。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。