且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《C++编程惯用法——高级程序员常用方法和技巧》——1.4 使用CRC卡片来辅助设计

更新时间:2021-07-04 11:51:02

本节书摘来自异步社区出版社《C++编程惯用法——高级程序员常用方法和技巧》一书中的第1章,第1.4节,作者: 【美】Robert B. Murray ,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.4 使用CRC卡片来辅助设计

由Kent Beck和Ward Cunningham设计的CRC卡片是一种用来帮助设计人员在设计阶段前期进行设计的工具,此时设计人员应该做的事情就是:从问题域中找到合适的对象并理解它们之间的关系。

CRC卡片的含义十分简单,也没有什么技术含量在里面。当一群人聚在一起开始进行高层设计时,他们会为每个潜在的类建立一张索引卡片,在该卡片上面,他们会写上类的名字,它主要的功能,以及它将会和哪些类进行交互。

有了这些卡片后,设计者就可以利用它们来模拟不同的场景。每个参与者负责其中一个或多个对象的角色,然后描述他的对象在面对其他对象的请求时应该做出的反应。通过这种角色模拟,设计者就可以进一步细化系统中类的职能和协作,并把它们记录在卡片上。整个设计小组可以也基于这种讨论来为那些有着不精确(或者是模糊)含义名字的类取一个更贴切的名字。

由于卡片上面的空间有限,这就鼓励设计者们尽可能采取简单的抽象模型—我们很难在一张索引卡片上面描述出复杂的抽象模型。这种卡片也有助于设计者将类进行分类,以构造合适的继承体系。我们可以将那些获得大家一致通过的卡片放到桌子上面,并接着对那些剩下的卡片进行重复的讨论,直到大家取得一致意见为止。

进行这样的角色模拟有时可能会出现一些偏离项目的话题,但它同时也鼓励大家进行“头脑风暴(brainstorm)”,将自己认为想的比较好的东西在非正式的场合中提出来和大家一起讨论。虽然大部分的离题讨论都将无疾而终,但有时偶尔的一两个火花也会产生那些在传统且正式的设计复审时产生不了的突破。

CRC卡片并不能代替完备的、用来描述类的行为细节的文档。它们主要的作用也就存在于设计的初始阶段:它们可以帮助设计人员正确地得到高层框架的信息,更早(而不是更晚)地理解和分辨出那些重要的问题。

注意:它们不可能像索引卡片那样被整理,你可以将它们粘在墙上,并保留对它们进行重新排列的权利(就像你使用Post-It随手贴一样)。