使用CRC(Class,Responsibilities,Collaboration)卡片来作为团队的设计。CRC卡的最大价值在于允许人们从思考过程模式中脱离出来,更充分的专注于对象技术。CRC卡允许整个项目组对设计做出贡献。参与系统设计的人越多,能够收集到的好主意也就越多。
个别的CRC卡被用来描述对象。对象的类写在卡的最上边、责任在左边下边编成表,每个责任的右边是协作的类列表。因为以前CRC会议是大家全力参与的,通常只需要很少的有类名的卡片,实际上没有写出完整的卡片,所以,我们说“要写”。这个例子显示咖啡制造商问题的一部分。
CRC会议继续进行,一些人模拟系统和对象交流,把消息传给其他的对象。通过一步步处理弱点,问题很容易地被解决。设计选择可以通过做建议的模拟实验迅速地做出决定。
如果你发现很多人在讲话并且移动卡片,立即简单的限制站着的人数,把卡片移到下一人。当一个人座下的时候,其它的人可以站起来。自由讨论会议这项工作,常常发生的情况就像当艰难的问题最终被解答的时候,开发组变得吵闹一样。
CRC卡受到的最大的批评之一是缺乏有记录的设计。CRC卡使设计看上去显而易见,所以这通常不需要。应该要求永久性的记录,每一个类一张卡,每个卡作为文档详细记录和保留。一旦预想已经建立和运行,在一段时间内,设计被人记住了。
因为在这些卡里面,我们写上了类名,它的职责,以及它的协作关系,我们管这样的卡片叫“CRC卡”。CRC就是Class,Responsibility和Collaboration的简称。
CRC卡的典型应用
为什么用CRC卡,而不用文档或者更先进的UML工具?
1.卡片上面的空间很小,这样就可以防止我们给这个类太多的职责。如果一个类的职责太多的话(比如,超过4个),尝试以更抽象的方式去考虑一下,将职责划分。
2.CRC卡主要是用在探索或者讨论类的设计的阶段。如果我们觉得这个设计不行的话,我们既不用修改文档,也不用修改类图,只要把卡片丢了就行了。此外,一旦设计完成,我们就可以把所有的卡丢了。它们不是用来做文档的。
3.如果我们觉得现在的卡片不合适,之前设计的比较好,我们只要简单的把之前的卡片拿出来组合就行了。