敏捷模型2
在一个真正的迭代开发环境中,我们不需要把所有的结构和设计问题事先完成。我们通过重构(改善代码而不影响功能)可以持续地对最初建立的设计进行改造,这是十分重要的。因为当真正开始编码后,可能会发现很多实现问题的更好方法。尽管项目的范围在一开始就定义好了,但随着迭代的逐渐进行,客户需求才不断地被加入其中,而不是在一开始就把一切锁定下来。问题的关键在于项目相关的所有人必须积极地交流沟通。
不需要在一开始对类设计得很具体,可以只在必要时进行。
设计系统时先制定出规范,然后不断的循环进行测试。
如果你认为极限编程人员不进行设计和文档工作的话,我希望能在你看完本章后将此误解消除,事实并非如此。
迭代后的第一天是将用例分割成一个个的任务,这其实也是设计中的一部分,这样有助于分解模块并且得到最终的实现点。
另一个关于XP工作类型的观点是出于一个资深的软件架构师,他在一家提供IT解决方案的知名公司工作,并使用XP和AMDD技术在很多项目中取得成功。他说:“在XP项目中还有一种级别的设计,它每天都会进行。这就是重构,它也是一种很重要的设计活动。虽然迭代开始阶段的设计很重要,但在代码写好后的设计工作使得一个好的设计更加出色。”
综上几条可以看出,软件工程其实就是设计加上重构,这样每一个版本的产品才会更加的有效。
CRC用来表示各种类、它们的责任以及合作者。表3.1显示了一个CRC卡片布局的范例以及对3个组成部分的描述。虽然图中显示的是一个电子版的CRC卡,实际中的CRC卡画在一个3×5英寸大小的卡片上,如果需要的话,可以把它转换为类图。
表3.1 一个简单的CRC卡片的布局范例
类名(名词)
责任(一个类的功能,例如业务方法、异常处理、安全方法、属性或变量)
合作者(提供实现高级需求的解决方案需要的其他类)
CRC卡是一种非正式的面向对象技术,它可以帮助我们发现类之间的关系。我喜欢使用CRC卡,这样客户和开发者可以在非正式的会议上讨论对象而不需使用电脑。除此之外,如果需要的话,可以用CRC卡来生成正式的类图(在本章后面我们将做这个工作)。
表3.2到表3.4是本书后面将要开发的一些类图的CRC卡的范例,它们实现了时间报表清单页面的需求。
表3.2 Timesheet类的CRC卡范例
Timesheet
获得阶段的结束时间
获得输入的时间
获得部门代码
表3.3 TimesheetManager类的CRC卡的范例
TimesheetManager
从数据库中获得时间报表
将时间报表存入数据库中
Timesheet
表3.4 TimesheetListController类的CRC卡的范例
TimesheetListController
(在MVC中)控制时间报表清单的显示
TimesheetManager
我们已经了解了一些CRC卡的基础知识。具备了这些知识,我们就知道接下来该做什么了。
CRC卡片使用
敏捷开发者应该在数据建模、对象建模、重构、映射、实现和性能调整等问题上反复迭代