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