当前位置:  开发笔记 > 编程语言 > 正文

如何使用CRC卡精心设计?

如何解决《如何使用CRC卡精心设计?》经验,为你挑选了5个好方法。

我一直想知道人们如何使用CRC(类责任合作)卡.我在书中读到过它们,在互联网上发现了模糊的信息,但从未真正掌握过它.我认为有人应该制作一个显示CRC卡会话的YouTube视频,因为我的一本书描述它很难用文字表达,它应该"由已经掌握它的人教授".可悲的是,我知道周围没有人使用CRC卡,我想了解更多.

UPDATE

任何链接到视频,显示人们用这种技术进行阐述,将不胜感激.



1> Kent Beck..:

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

保持这种平衡是CRC卡的用武之地.当他们坐在桌子上时,你可以看到整个计算.但是,当你拿起一张卡片时,你在物理上,动力学上鼓励采取那个对象的观点 - 我有这个计算的一小部分与有限的资源有关,我将如何完成它?

随着时间的推移,同时保持两种观点的能力似乎渗透到大脑中.越来越少写在卡上.然后卡片是空白的.过了一段时间,人们只是指出卡片的位置,如果他们打算从堆栈中取出一个空白的卡片.最终,人们可以在不需要卡片的情况下获得思维方式的好处.但是,当与没有掌握平衡的人交谈时,拔出实力卡可能是一种有用的通信辅助.

我发现卡片最大的缺点是缺乏反馈.你可以欺骗自己如何编写代码.我建议只使用卡片直到出现一个有趣的问题,转向测试/代码进行确认,然后重新开始设计.

沃德和我在15年左右的时间制作了一个设计会议的视频,但我没有在任何地方找到它,我也没有副本.我不确定它在任何情况下都可以用作教学工具.我不知道其他视频,但它们可能很有趣,特别是如果你要比较几种不同的设计师风格.


@ [声明]:呃......你不太可能得到更好的答案 - 这是发明它的人之一!
@ [声明]:我没有说别人不应该回答.但请注意前两个答案,一个是肯特贝克论文的链接,另一个是肯特贝克的答复.可能会出现一种模式... ;-)

2> Juri..:

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

    起点是进行需求启发.这里建议尽早和持续地让客户参与(看看敏捷方法,即极限编程)

    然后可以使用用例图(UML)或用户故事(敏捷极端编程方法)对需求进行建模.这里的关键问题是找到合适的对象.当然,这在很大程度上取决于您所在的域名.如果你采用"硬"方式,你可以应用"名词提取"等技术.因此,您解析规范文档并提取所有名词(包括复合名称和带有形容词的名称).分析所有这些并丢弃不相关的.

    一旦拥有了正确的名词 - >对象,您就可以开始创建CRC卡了.那么在CRC会话中做了什么?主要任务是查找并分配您(之前)找到的对象的职责,然后将这些对象放在小索引卡(我们的CRC卡)上."职责"主要是特定对象的核心功能,"协作"部分是实现某些功能所需的其他对象(这些是模型中不同对象之间的依赖关系).分配责任的重点是责任以某种平衡的方式在整个系统中很好地分配.另一个非常重要的一点是避免对象之间的任何重复(这是CRC卡帮助的地方).
    CRC会议应该从头脑风暴会议开始,在开发人员之间进行积极讨论,并且应该直接在实际索引卡上执行.

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

问候,
Juri



3> Steven A. Lo..:

去源 -肯特·贝克,沃德·坎宁安,听说过他们吗?


似乎'来源'来找我们:)

4> tvanfosson..:

我认为你的声明"我在这里没有人知道谁使用CRC卡"几乎总结了开发中CRC卡的状态.在我看来,CRC卡是从传统的,计划驱动的开发到敏捷开发的一步.世界继续前进.我没有专注于如何使用CRC卡,而是研究像TDD这样的技术,它可以利用UML和CRC卡等技术作为中间工件,但更集中于代码,尤其是测试.这是CRC卡发明者采取的方向,我建议你也采取.



5> Robert Gould..:

在我看来,最简单的方法是使用它们而不会弄得一团糟,就是在文件头中写下一些CRC卡,如下所示:

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

然后,每当您需要添加功能时,请检查您的卡,并确保您不会违反您在其中所述的任何合同.比如所有的突然取决于UIMouseEvent,例如,卡片上没有任何地方,所以它是禁止包含它的.

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有