你是一個(gè)優(yōu)秀軟件開發(fā)人員嗎?你知道GRASP 一.職責(zé)分配和職責(zé)驅(qū)動(dòng)設(shè)計(jì)在一個(gè)軟件項(xiàng)目開始的時(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í),在用戶的問題世界中,必然有一些東西或者說事物,它們之間存在著相互的關(guān)聯(lián)。 拿一個(gè)軟件評審管理系統(tǒng)作為一個(gè)例子吧。評審管理系統(tǒng)的業(yè)務(wù)需求如下: 1通過以上需求的描述,我們不難發(fā)現(xiàn)整個(gè)問題世界中的相關(guān)事物:評審組織者、評審計(jì)劃、評審者、評審對象、評審表、疑問、評審報(bào)告、評審結(jié)論、問題。我們也不難分析出這些事物相互關(guān)系,比如評審計(jì)劃與評審者是一對多,而評審報(bào)告與評審結(jié)論是一對一。 在RUP領(lǐng)域模型中的對象將成為軟件開發(fā)中形成具體對象的基礎(chǔ)(軟件開發(fā)中形成什么對象是根據(jù)軟件開發(fā)的具體需求而定的,并不一定要與領(lǐng)域模型的對象一致)。用例模型中的用例,將通過賦予這些對象行為而得以實(shí)現(xiàn)。現(xiàn)在的問題就出來了,用例模型中的功能,或者說一系列行為,應(yīng)當(dāng)如何分配給這些對象呢。也就是說,為了完成同一個(gè)任務(wù),我可以將行為A我們通過對現(xiàn)實(shí)世界的分析,或者說對于領(lǐng)域模型的分析,設(shè)計(jì)出了軟件系統(tǒng)中的對象,這時(shí)候我們應(yīng)當(dāng)為每一個(gè)對象分配職責(zé)。什么是對象的職責(zé)呢,當(dāng)然是通過對現(xiàn)實(shí)世界的分析,定義的這個(gè)對象應(yīng)當(dāng)完成的任務(wù)。比如評審者對象的職責(zé)是存取與評審者相關(guān)的數(shù)據(jù)。當(dāng)然對象的職責(zé)不一定是一個(gè),比如評審計(jì)劃包含了評審對象和評審者的子項(xiàng),所以它在工作不繁忙的情況下可以代理處理評審對象和評審者的信息存取。但是一個(gè)對象的職責(zé)不應(yīng)當(dāng)過多(也就2職責(zé)分配現(xiàn)在已經(jīng)被普遍認(rèn)為是一個(gè)優(yōu)秀的軟件設(shè)計(jì)應(yīng)當(dāng)遵循的原則,它有以下好處: 1這種通過考慮對象、職責(zé)、協(xié)作的對象設(shè)計(jì)及構(gòu)件方式,被稱為“職責(zé)驅(qū)動(dòng)設(shè)計(jì)(RDD 二.GRASP模式挨個(gè)析GRASP(原創(chuàng))一個(gè)優(yōu)秀軟件開發(fā)人員的必修課:GRASP(2)低耦合 (原創(chuàng))一個(gè)優(yōu)秀軟件開發(fā)人員的必修課:GRASP(3)高內(nèi)聚 一個(gè)對象撕心裂肺的怒吼:誰來創(chuàng)建我!GRASP(4)創(chuàng)建者模式 (待續(xù)) |
以下是原博客的討論:[建議到員博客閱讀]
評論 共 13 條 | 發(fā)表評論 |
沒有下文了? 期待中。GRASP和GoF是不同類型的模式, 出發(fā)點(diǎn)不同。 GRASP是解決類之間如何交互, 如何設(shè)計(jì)合理, 和具體問題無關(guān)。 |
感覺是一種綜合體! |
知道名字就可以!其他的可以google! what we need is the name , add others to google! |
zuly 寫道
知道名字就可以!其他的可以google!
我寫這篇文章的起因是因?yàn)槲遗既辉趃oogle或yahoo這樣的搜索引擎搜索GRASP發(fā)現(xiàn),除了國外的網(wǎng)站,國內(nèi)網(wǎng)站多介紹和討論GoF而很少介紹GRASP,即使這少量的文章也講解非常粗略。個(gè)人認(rèn)為作為優(yōu)秀的開發(fā)人員,理解GRASP比GoF更重要,故寫此文章。此文章后面的內(nèi)容我會(huì)不斷添上,謝謝支持
what we need is the name , add others to google!
|
amigobot 寫道
沒有下文了? 期待中。GRASP和GoF是不同類型的模式, 出發(fā)點(diǎn)不同。 GRASP是解決類之間如何交互, 如何設(shè)計(jì)合理, 和具體問題無關(guān)。
我同意。GRASP與GoF最大的區(qū)別,本人認(rèn)為GoF往往是解決一些具體的問題,比如類的具體創(chuàng)建方式等等,而GRASP是解決對象分析的一些基本原則,即你如何去設(shè)計(jì)你的問題空間中的類和它們的行為,是原則性的東西。后面我會(huì)一個(gè)一個(gè)分析GRASP的9個(gè)模式,也就是9個(gè)基本原則,謝謝支持
|
有點(diǎn)意思。不過從fangang朋友對grasp的介紹,我得到的印象是grasp跟gof作為比較有些不當(dāng),可能是我的理解有誤。希望能看到fangang朋友對grasp給出一個(gè)比較明確的定義,以及適用范圍,比如在軟件開發(fā)生命周期中,grasp在什么階段用合適?有哪些效用。。。等等,期待中。 |
謝謝指教,grasp和gof都是稱為軟件開發(fā)模式,只是描述的內(nèi)容和角度不同,這相關(guān)的問題Craig Larman在《UML和模式應(yīng)用》的第17章中有詳細(xì)描述 |
有一本書闡述了GRASP,《深入淺出設(shè)計(jì)模式 C#/JAVA版》,06年出版的。 |
newman 寫道
有點(diǎn)意思。不過從fangang朋友對grasp的介紹,我得到的印象是grasp跟gof作為比較有些不當(dāng),可能是我的理解有誤。希望能看到fangang朋友對grasp給出一個(gè)比較明確的定義,以及適用范圍,比如在軟件開發(fā)生命周期中,grasp在什么階段用合適?有哪些效用。。。等等,期待中。
grasp(General Responsibility Assignment Software Patterns),它往往適用于對象分析和設(shè)計(jì)中,即在RUP的制作分析模型和設(shè)計(jì)模型階段。grasp有9種模式,是用于解決軟件設(shè)計(jì)中的9種常見的問題,因此其效用各不一樣,不能一概而論。
|
非常感謝newman給我提的數(shù)個(gè)問題。GRASP雖好,GoF雖好,最關(guān)鍵是我們怎么用和啥時(shí)候用,這兩個(gè)問題一直是我反復(fù)思考的問題。我正在籌劃寫一篇關(guān)于軟件開發(fā)過程,特別是分析和設(shè)計(jì)這個(gè)階段,如何運(yùn)用GRASP和GoF的一點(diǎn)兒認(rèn)識,期望和大家切磋切磋 |