發表文章

目前顯示的是 十一月, 2015的文章

使用CRC cards的『責任驅動設計』方法

圖片
本文簡單介紹一般人比較不熟習的所謂『責任驅動設計』(Responsibility-Driven Design 簡稱 RDD),這種設計方法是根據系統的責任,來設計類別的行為與方法或功能,因此RDD可運用在軟體發展上。

1989年Rebecca Wirfs-Brock與Brain Wilkerson在OOPSLA'89發表『責任驅動設計』的軟體設計方法,後來她們與Lauren Wiener共同寫了一本叫『Designing Object-Oriented Software』(PTR Prentice Hall 1990)的書用以實作RDD,2003年Wirfs-Brock與Alan McKean合著『Object Design - Roles, Responsibilities, and Collaborations』(Addison-Wesley)一書更深入介紹RDD,讀者如沒有這兩本書而有興趣的話可從網路叫出RDD相關文章參考。

本文介紹這種軟體設計方法,乃是因為在OOSE或OOAD的書籍很少提到,據我所知上課時老師也很少介紹,這種方法的設計觀念是認為,軟體物件以及大型原件的設計是基於『責任』(responsibilities)、『角色』(roles)、以及『合作』(collaborations),這種觀念,有部份異於諸如UP之類的「傳統」軟體發展想法,但是RDD是一種非正規(informal)的設計概念,其後半部如與傳統的設計與實作連結,這個方法應該值得關注,不過我在此地必須說明,RDD並非完全脫離一般OOAD甚至OOSE的觀念,只不過它對於物件的定義有別於UML的型態 ,物件並非單純資料與演繹的結合,而認為物件是結合其『角色』與『責任』的東西,當要執行某些責任時需與其他物件合作才能完成。因此,RDD的重點在於,發展物件之間的合作與溝通模式,以及物件責任與動態,而不在於物件的內部狀態(internal state)與結構,CRC cards的內涵剛好符合這種需要。如果我們定義軟體應用系統是由一群物件間的相互作用(interactions)而成,則這種相互作用就是得自於client/server模式。
Client/Server模式 物件的作業元(operations)在RDD中視為『服務』,這種服務可以提供需要的其他物件,因此只要服務存在,我們說物件就有責任…