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