你是一个优秀软件开发人员吗?你知道GRASP
一.职责分配和职责驱动设计
在一个软件项目开始的时候,我们通常需要进行需求分析,了解客户需要设计一个什么样的软件,这个软件中应当有什么功能。需求分析了解到的是现实世界中客户需求的业务功能,每个业务功能往往是一个业务流程,即客户在日常工作中不断在完成的业务流程。同时,在用户的问题世界中,必然有一些东西或者说事物,它们之间存在着相互的关联。
拿一个软件评审管理系统作为一个例子吧。评审管理系统的业务需求如下:
1通过以上需求的描述,我们不难发现整个问题世界中的相关事物:评审组织者、评审计划、评审者、评审对象、评审表、疑问、评审报告、评审结论、问题。我们也不难分析出这些事物相互关系,比如评审计划与评审者是一对多,而评审报告与评审结论是一对一。
在RUP领域模型中的对象将成为软件开发中形成具体对象的基础(软件开发中形成什么对象是根据软件开发的具体需求而定的,并不一定要与领域模型的对象一致)。用例模型中的用例,将通过赋予这些对象行为而得以实现。现在的问题就出来了,用例模型中的功能,或者说一系列行为,应当如何分配给这些对象呢。也就是说,为了完成同一个任务,我可以将行为A我们通过对现实世界的分析,或者说对于领域模型的分析,设计出了软件系统中的对象,这时候我们应当为每一个对象分配职责。什么是对象的职责呢,当然是通过对现实世界的分析,定义的这个对象应当完成的任务。比如评审者对象的职责是存取与评审者相关的数据。当然对象的职责不一定是一个,比如评审计划包含了评审对象和评审者的子项,所以它在工作不繁忙的情况下可以代理处理评审对象和评审者的信息存取。但是一个对象的职责不应当过多(也就2职责分配现在已经被普遍认为是一个优秀的软件设计应当遵循的原则,它有以下好处:
1这种通过考虑对象、职责、协作的对象设计及构件方式,被称为“职责驱动设计(RDD
二.GRASP模式挨个析
GRASP(原创)一个优秀软件开发人员的必修课:GRASP(2)低耦合
(原创)一个优秀软件开发人员的必修课:GRASP(3)高内聚
一个对象撕心裂肺的怒吼:谁来创建我!GRASP(4)创建者模式
(待续)
|