你是一個(gè)優(yōu)秀軟件開(kāi)發(fā)人員嗎?你知道GRASP
一.職責(zé)分配和職責(zé)驅(qū)動(dòng)設(shè)計(jì)
在一個(gè)軟件項(xiàng)目開(kāi)始的時(shí)候,我們通常需要進(jìn)行需求分析,了解客戶需要設(shè)計(jì)一個(gè)什么樣的軟件,這個(gè)軟件中應(yīng)當(dāng)有什么功能。需求分析了解到的是現(xiàn)實(shí)世界中客戶需求的業(yè)務(wù)功能,每個(gè)業(yè)務(wù)功能往往是一個(gè)業(yè)務(wù)流程,即客戶在日常工作中不斷在完成的業(yè)務(wù)流程。同時(shí),在用戶的問(wèn)題世界中,必然有一些東西或者說(shuō)事物,它們之間存在著相互的關(guān)聯(lián)。
拿一個(gè)軟件評(píng)審管理系統(tǒng)作為一個(gè)例子吧。評(píng)審管理系統(tǒng)的業(yè)務(wù)需求如下:
1通過(guò)以上需求的描述,我們不難發(fā)現(xiàn)整個(gè)問(wèn)題世界中的相關(guān)事物:評(píng)審組織者、評(píng)審計(jì)劃、評(píng)審者、評(píng)審對(duì)象、評(píng)審表、疑問(wèn)、評(píng)審報(bào)告、評(píng)審結(jié)論、問(wèn)題。我們也不難分析出這些事物相互關(guān)系,比如評(píng)審計(jì)劃與評(píng)審者是一對(duì)多,而評(píng)審報(bào)告與評(píng)審結(jié)論是一對(duì)一。
在RUP領(lǐng)域模型中的對(duì)象將成為軟件開(kāi)發(fā)中形成具體對(duì)象的基礎(chǔ)(軟件開(kāi)發(fā)中形成什么對(duì)象是根據(jù)軟件開(kāi)發(fā)的具體需求而定的,并不一定要與領(lǐng)域模型的對(duì)象一致)。用例模型中的用例,將通過(guò)賦予這些對(duì)象行為而得以實(shí)現(xiàn)。現(xiàn)在的問(wèn)題就出來(lái)了,用例模型中的功能,或者說(shuō)一系列行為,應(yīng)當(dāng)如何分配給這些對(duì)象呢。也就是說(shuō),為了完成同一個(gè)任務(wù),我可以將行為A我們通過(guò)對(duì)現(xiàn)實(shí)世界的分析,或者說(shuō)對(duì)于領(lǐng)域模型的分析,設(shè)計(jì)出了軟件系統(tǒng)中的對(duì)象,這時(shí)候我們應(yīng)當(dāng)為每一個(gè)對(duì)象分配職責(zé)。什么是對(duì)象的職責(zé)呢,當(dāng)然是通過(guò)對(duì)現(xiàn)實(shí)世界的分析,定義的這個(gè)對(duì)象應(yīng)當(dāng)完成的任務(wù)。比如評(píng)審者對(duì)象的職責(zé)是存取與評(píng)審者相關(guān)的數(shù)據(jù)。當(dāng)然對(duì)象的職責(zé)不一定是一個(gè),比如評(píng)審計(jì)劃包含了評(píng)審對(duì)象和評(píng)審者的子項(xiàng),所以它在工作不繁忙的情況下可以代理處理評(píng)審對(duì)象和評(píng)審者的信息存取。但是一個(gè)對(duì)象的職責(zé)不應(yīng)當(dāng)過(guò)多(也就2職責(zé)分配現(xiàn)在已經(jīng)被普遍認(rèn)為是一個(gè)優(yōu)秀的軟件設(shè)計(jì)應(yīng)當(dāng)遵循的原則,它有以下好處:
1這種通過(guò)考慮對(duì)象、職責(zé)、協(xié)作的對(duì)象設(shè)計(jì)及構(gòu)件方式,被稱為“職責(zé)驅(qū)動(dòng)設(shè)計(jì)(RDD
二.GRASP模式挨個(gè)析
GRASP(原創(chuàng))一個(gè)優(yōu)秀軟件開(kāi)發(fā)人員的必修課:GRASP(2)低耦合
(原創(chuàng))一個(gè)優(yōu)秀軟件開(kāi)發(fā)人員的必修課:GRASP(3)高內(nèi)聚
一個(gè)對(duì)象撕心裂肺的怒吼:誰(shuí)來(lái)創(chuàng)建我!GRASP(4)創(chuàng)建者模式
(待續(xù))
|