天天看點

《C++程式設計慣用法——進階程式員常用方法和技巧》——1.4 使用CRC卡片來輔助設計

本節書摘來自異步社群出版社《c++程式設計慣用法——進階程式員常用方法和技巧》一書中的第1章,第1.4節,作者: 【美】robert b. murray ,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

由kent beck和ward cunningham設計的crc卡片是一種用來幫助設計人員在設計階段前期進行設計的工具,此時設計人員應該做的事情就是:從問題域中找到合适的對象并了解它們之間的關系。

crc卡片的含義十分簡單,也沒有什麼技術含量在裡面。當一群人聚在一起開始進行高層設計時,他們會為每個潛在的類建立一張索引卡片,在該卡片上面,他們會寫上類的名字,它主要的功能,以及它将會和哪些類進行互動。

有了這些卡片後,設計者就可以利用它們來模拟不同的場景。每個參與者負責其中一個或多個對象的角色,然後描述他的對象在面對其他對象的請求時應該做出的反應。通過這種角色模拟,設計者就可以進一步細化系統中類的職能和協作,并把它們記錄在卡片上。整個設計小組可以也基于這種讨論來為那些有着不精确(或者是模糊)含義名字的類取一個更貼切的名字。

由于卡片上面的空間有限,這就鼓勵設計者們盡可能采取簡單的抽象模型—我們很難在一張索引卡片上面描述出複雜的抽象模型。這種卡片也有助于設計者将類進行分類,以構造合适的繼承體系。我們可以将那些獲得大家一緻通過的卡片放到桌子上面,并接着對那些剩下的卡片進行重複的讨論,直到大家取得一緻意見為止。

進行這樣的角色模拟有時可能會出現一些偏離項目的話題,但它同時也鼓勵大家進行“頭腦風暴(brainstorm)”,将自己認為想的比較好的東西在非正式的場合中提出來和大家一起讨論。雖然大部分的離題讨論都将無疾而終,但有時偶爾的一兩個火花也會産生那些在傳統且正式的設計複審時産生不了的突破。

crc卡片并不能代替完備的、用來描述類的行為細節的文檔。它們主要的作用也就存在于設計的初始階段:它們可以幫助設計人員正确地得到高層架構的資訊,更早(而不是更晚)地了解和分辨出那些重要的問題。

注意:它們不可能像索引卡片那樣被整理,你可以将它們粘在牆上,并保留對它們進行重新排列的權利(就像你使用post-it随手貼一樣)。

繼續閱讀