我一直想知道人们如何使用CRC(类责任合作)卡.我在书中读到过它们,在互联网上发现了模糊的信息,但从未真正掌握过它.我认为有人应该制作一个显示CRC卡会话的YouTube视频,因为我的一本书描述它很难用文字表达,它应该"由已经掌握它的人教授".可悲的是,我知道周围没有人使用CRC卡,我想了解更多.
任何链接到视频,显示人们用这种技术进行阐述,将不胜感激.
在SO答案中总结很难,但我会尝试.设计对象的挑战之一是从整体角度思考思维,从单个对象的角度思考.您需要整体透视才能完成计算,但您需要单独的对象透视图来有效地细分逻辑和数据.
保持这种平衡是CRC卡的用武之地.当他们坐在桌子上时,你可以看到整个计算.但是,当你拿起一张卡片时,你在物理上,动力学上鼓励采取那个对象的观点 - 我有这个计算的一小部分与有限的资源有关,我将如何完成它?
随着时间的推移,同时保持两种观点的能力似乎渗透到大脑中.越来越少写在卡上.然后卡片是空白的.过了一段时间,人们只是指出卡片的位置,如果他们打算从堆栈中取出一个空白的卡片.最终,人们可以在不需要卡片的情况下获得思维方式的好处.但是,当与没有掌握平衡的人交谈时,拔出实力卡可能是一种有用的通信辅助.
我发现卡片最大的缺点是缺乏反馈.你可以欺骗自己如何编写代码.我建议只使用卡片直到出现一个有趣的问题,转向测试/代码进行确认,然后重新开始设计.
沃德和我在15年左右的时间制作了一个设计会议的视频,但我没有在任何地方找到它,我也没有副本.我不确定它在任何情况下都可以用作教学工具.我不知道其他视频,但它们可能很有趣,特别是如果你要比较几种不同的设计师风格.
我会尝试给出答案.因此,CRC卡通常用于在面向对象的环境中进行建模,以便更好地理解必须开发的系统(但我认为您已经知道了).当你在实际实施之前到达时,CRC卡就到了最后.达到该级别的不同步骤可能如下:
起点是进行需求启发.这里建议尽早和持续地让客户参与(看看敏捷方法,即极限编程)
然后可以使用用例图(UML)或用户故事(敏捷极端编程方法)对需求进行建模.这里的关键问题是找到合适的对象.当然,这在很大程度上取决于您所在的域名.如果你采用"硬"方式,你可以应用"名词提取"等技术.因此,您解析规范文档并提取所有名词(包括复合名称和带有形容词的名称).分析所有这些并丢弃不相关的.
一旦拥有了正确的名词 - >对象,您就可以开始创建CRC卡了.那么在CRC会话中做了什么?主要任务是查找并分配您(之前)找到的对象的职责,然后将这些对象放在小索引卡(我们的CRC卡)上."职责"主要是特定对象的核心功能,"协作"部分是实现某些功能所需的其他对象(这些是模型中不同对象之间的依赖关系).分配责任的重点是责任以某种平衡的方式在整个系统中很好地分配.另一个非常重要的一点是避免对象之间的任何重复(这是CRC卡帮助的地方).
CRC会议应该从头脑风暴会议开始,在开发人员之间进行积极讨论,并且应该直接在实际索引卡上执行.
我希望我能以某种方式帮助你.
问候,
Juri
去源 -肯特·贝克,沃德·坎宁安,听说过他们吗?
我认为你的声明"我在这里没有人知道谁使用CRC卡"几乎总结了开发中CRC卡的状态.在我看来,CRC卡是从传统的,计划驱动的开发到敏捷开发的一步.世界继续前进.我没有专注于如何使用CRC卡,而是研究像TDD这样的技术,它可以利用UML和CRC卡等技术作为中间工件,但更集中于代码,尤其是测试.这是CRC卡发明者采取的方向,我建议你也采取.
在我看来,最简单的方法是使用它们而不会弄得一团糟,就是在文件头中写下一些CRC卡,如下所示:
/////////////////////// //* CRC CARD //* Class: UISliderEvent //* Responsability: Event that holds the value and id of a Slider's movement //* Collaborators: UISlider, UIEvent //////////////////////
然后,每当您需要添加功能时,请检查您的卡,并确保您不会违反您在其中所述的任何合同.比如所有的突然取决于UIMouseEvent,例如,卡片上没有任何地方,所以它是禁止包含它的.