29

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

更新

任何显示人们使用此技术详细说明的视频的链接将不胜感激。

4

6 回答 6

34

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

保持这种平衡是 CRC 卡的用武之地。当它们坐在桌子上时,您可以将计算视为一个整体。但是,当你拿起一张卡片时,你会受到身体上的、动觉上的鼓励去观察那个物体——我有这个计算的一小部分要使用有限的资源,我将如何完成它?

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

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

Ward 和我在大约 15 年前制作了一段设计会议的视频,但我在网上找不到任何地方,也没有副本。我不确定它在任何情况下作为教学工具是否有用。我不知道其他视频,但它们可能会很有趣,特别是如果你要比较几个不同设计师的风格。

于 2009-02-27T18:11:28.767 回答
13

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

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

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

问候,
朱里

于 2009-02-27T17:34:41.883 回答
7

源头——肯特贝克,沃德坎宁安,听说过他们吗?

于 2008-09-19T03:15:45.923 回答
7

我认为您的陈述“我知道这里没有人使用 CRC 卡”几乎总结了 CRC 卡的开发状态。在我看来,CRC 卡是从传统的、计划驱动的开发到敏捷开发的道路上的一步。世界已经在前进。我不会专注于如何使用 CRC 卡,而是研究TDD之类的技术,它可以利用 UML 和 CRC 卡之类的技术作为中间工件,但专注于代码,尤其是测试。这是 CRC 卡的发明者所采用的方向,我建议您也采用。

于 2009-02-28T17:33:20.473 回答
5

在我看来,使用它们而不弄乱的最简单方法是在文件头中写下小 CRC 卡,如下所示:

///////////////////////
//* CRC CARD
//*  Class: UISliderEvent
//*  Responsability: Event that holds the value and id of a Slider's movement
//*  Collaborators: UISlider, UIEvent
//////////////////////

然后,每次您需要添加功能时,请检查您的卡,并确保您没有违反您在其中声明的任何合同。例如突然依赖于 UIMouseEvent ,这在 Card 上没有任何位置,因此禁止包含它。

于 2008-09-19T03:45:53.620 回答
3

Rebecca Wirfs-Brock和 Alan McKean在他们于 2003 年出版的《对象设计:角色、职责和协作》一书中详细讨论了 CRC 卡。他们确实强调了它对整个过程的不同之处在于,这应该是一种非常有触觉的体验,并且在尝试充实设计/要求时,它会放松人们绕过物理对象的思维。

该章的副标题表明使用卡片是“探索性设计”阶段的一部分,因此它可能发生在进行大量编码之前,但我认为你没有理由在每次迭代中不继续使用它们一个敏捷项目,提醒自己你认为你要去哪里,如果需要的话(当然作为一个小组)回顾一下。

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

如果您想阅读 CRC 卡的案例研究(当然除了 Kent 和 Ward 的原始论文),请查看CRC 卡书

于 2009-10-13T16:24:02.710 回答