CRC,即Class Responsibility Collaboration,是一种用于设计面向对象软件过程中使用的交流工具和头脑风暴工具。典型的应用场合是首次确定设计中需要哪些类,及这些类如何交互。每个CRC卡上通常有以下几项:类名,父类和子类,本类的职责(responsibility),与本类交互的类型,本卡片的作者。
使用小卡片,迫使设计人员对复杂的设计进行简单有效的描述。它会强迫设计者突出关键思路,阻止设计者在设计的早期过于关心细节的实现;另一方面,也可以阻止设计者为一个类型设计太多的职责。因为卡片的形式比较方便,设计过程中可以摊在一个桌面上,也可以用于向其他人展示设计中各个类的交互。
为画出一个CRC卡片,通常的作法是从软件需要描述文档中找出名词和动词,并决定是否为每个名词设计一个类以及哪些动词是这些类的职责。自然,并不是每个名词都会成为软件中的一个类型,但这些通常是设计的起点。
使用CRC的一般步骤:
Step 1. 选择相关的用例(use case)
Step 2. 按顺序画出与该用例有关的全部卡片。首先是触发这一用例的类型,其次是接受上一个类型消息的类。或者,把所有相关类型和他人的主要职责全部画出,放在桌面上。
Step 3. 把所有的类型和职责全部审阅一遍,命名。
按用例的描述,把CRC上的职责过一遍,给职责命名,并分清每个类型如何处理每项职责或委托给其他类型。
如果是用CRC做头脑风暴的工具,随需要增加新的类型和功能,或是重新在现有的类型间划分职责。本步骤中,并不需要给类型和它们的方法命令,这些工作留到最后阶段完成。
Step 4. 改变使用条件,对设计进行压力测试
在审阅设计的过程中,试着逐个改变用例的假设条件,看是否会影响整个设计。在一个好的设计中,只需要增加一个类型或改动一个类型,就足以应付这些变化。也就是说,改变单个条件的情况下,这种改变可以隔离在一个小范围内。如果需要,增加一个新类型。
并不是全部的卡片的都会进入最后的设计中,一些卡片会因为用途不多而被边缘化,不会成为最终设计的一部分。
Step 5. 增减卡片,完善设计
使用CRC卡片可以在桌面上同时展示多种设计,经过反复的修订,一个粗糙的设计可以演变成一个精致的设计,都最终的设计非常小巧。在修订的过程中,不要扔掉卡片,随着对问题的认识,有可能会用到这些卡片
Step 6. 写出最关键的职责和交互方式,关键交互方工要画出交互图。