我一直想知道人们如何使用 CRC(班级责任协作)卡。我在书中读到过它们,在互联网上找到了模糊的信息,但从未真正理解它们。我认为有人应该制作一个 youtube 视频来展示 CRC 卡的会话,因为我的一本书描述它很难用文本表达,它应该“由已经掌握它的人来教授”。遗憾的是,据我所知,这里没有人使用 CRC 卡,我想了解更多信息。

更新

任何显示人们详细阐述这种技术的视频链接将不胜感激。

有帮助吗?

解决方案

我会尝试给出答案。因此,CRC 卡通常用于在面向对象的环境中进行建模,以便更好地理解必须开发的系统(但我想您已经知道了)。CRC 卡出现在最后,即在实际实施之前。达到该级别的不同步骤可能如下:

  1. 出发点是进行需求获取。这里建议尽早并持续地让客户参与进来(看看敏捷方法,即极限编程)
  2. 然后可以使用用例图 (UML) 或用户故事(敏捷极限编程方法)对需求进行建模。这里的关键问题是找到正确的涉及对象。当然,这在很大程度上取决于您所在的域。如果您选择“困难”方式,则可以应用“名词提取”等技术。因此,您解析规范文档并提取所有名词(包括复合名称和带有形容词的名词)。分析所有这些并丢弃不相关的。
  3. 一旦你有了正确的名词 -> 对象,你就可以开始创建你的 CRC 卡。那么 CRC 会话中做了什么?主要任务是查找(之前)找到的对象并分配其职责,然后将其放在小索引卡(我们的 CRC 卡)上。“职责”主要是特定对象的核心功能,“协作”部分是实现某些功能所需的其他对象(这些是模型中不同对象之间的依赖关系)。分配职责的要点是,以某种平衡的方式将职责很好地分配到整个系统上。另一个非常重要的一点是避免对象之间的任何责任重复(这就是 CRC 卡的用处)。
    CRC 会议应该从头脑风暴会议开始,开发人员之间进行积极的讨论,并且应该直接在实际的索引卡上进行。

我希望我能够以某种方式帮助你。

问候,
树里

其他提示

很难用如此答案来总结,但我会尝试。设计对象的挑战之一是平衡从整体角度的思考和从单个对象的角度的思考。你需要整体视角来完成计算,但你需要个体对象视角来有效细分逻辑和数据。

保持这种平衡正是 CRC 卡的用武之地。当他们坐在桌子上时,您可以从整体上查看计算结果。然而,当你拿起一张卡片时,你会在身体上、动觉上被鼓励从那个物体的角度来看——我需要用有限的资源来完成这一小部分计算,我将如何完成它?

随着时间的推移,同时持有两种观点的能力似乎会渗透到大脑中。卡片上写的东西越来越少。然后卡片是空白的。过了一会儿,如果人们愿意从一堆空白卡片中取出一张卡片,他们就会指出卡片所在的位置。最终,人们无需卡片就能享受到思维方式的好处。不过,当与尚未掌握平衡的人交谈时,拿出真实的卡片可能是一种有用的沟通辅助。

我发现这些卡片的最大弱点是缺乏反馈。您可以欺骗自己代码的结果如何。我建议仅在出现有趣的问题之前使用卡片,转向测试/代码进行确认,然后继续设计。

沃德和我在大约 15 年前制作了一个设计会议的视频,但我在网上找不到它,也没有副本。无论如何,我不确定它作为教学工具是否有用。我不知道其他视频,但它们可能很有趣,特别是如果您必须比较几个不同设计师的风格。

来源 - Kent Beck、Ward Cunningham,听说过他们吗?

我认为你的发言 “据我所知,这里没有人使用 CRC 卡” 几乎概括了 CRC 卡的开发状况。在我看来,CRC 卡是从传统的计划驱动开发向敏捷开发迈出的一步。世界已经向前发展。我不会关注如何使用 CRC 卡,而是研究诸如 时分双工, ,它可以利用 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,这在卡上不存在,因此禁止包含它。

在他们的书中 对象设计:角色、职责和协作 2003年出版 丽贝卡·维尔夫斯-布洛克 和 Alan McKean 详细讨论了 CRC 卡。他们真正强调了它对整个过程的影响,这应该是一种非常有触觉的体验,并且在试图充实设计/需求时,它放松了人们绕过物理对象的思维。

该章的副标题表明,使用卡片是“探索性设计”阶段的一部分,因此它可能先于进行大量编码,但我认为您没有理由不在每次迭代中继续回到它们一个敏捷项目,提醒自己你认为自己要去哪里,并在需要时进行审查(当然作为一个团队)。

我似乎记得他们甚至建议在房间里传一个球,这样只有拿球的人才能发言,所以也许这与其说是 CRC 卡,不如说是让每个人都在一个房间里讨论角色和责任重要的对象?

如果您想阅读 CRC 卡的实际案例研究(当然还有 Kent 和 Ward 的原始论文),请查看 CRC卡簿.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top