第一部分
8月7日
开始体验JUnit测试驱动开发,为《敏捷软件开发技术指导大纲(提案)》做准备。
8月10日
撰写《敏捷软件开发技术指导大纲(提案)》,对于项目开发中若干重大事情进行讨论。主要包括:
1. 方法学的选择:敏捷软件开发
2. 开发范型的选择:面向对象
3. 开发工具和框架的选择:Eclipse+Struts+Spring+Hibernate
4. 开发规范:面向对象设计原则,Java开发编码规范
同时这也是接下来的行动指南,可以从下面的记录中看到如何来一步一步完成上面这些内容的学习、研究和实践的。
8月11-8月13日
研究持续集成:Ant+JUnit+CruiseControl
8月14日
白天和宋岩一起完成了作业计划的领域建模,同时也将整个系统的核心进行了建模工作。
晚上和铁东进行了3个小时的结对编程,完成了白天建模的代码。
应用了领域驱动设计、TDD、结对编程。发现了Eclipse很多功能对于敏捷开发非常有帮助,比如对于JUnit和重构的集成,代码辅助生成等。
8月15-8月18日
研究Struts+Spring+Hibernate,一方面在做方案比选;一方面在看相关的书籍,并进行小程序的测试,同时在撰写编程规范。
选型工作主要包括如下内容:
1. 在Struts1.2和Struts2.0中选择了Struts1.2,原因是比较成熟,资源比较多,另外有MyEclipse工具支持。
2. Spring选择了1.2版本,起初是因为有工具支持,特别是和Hibernate的整合方面,不过后来看来,这也并无益处。不过仔细考虑之后,发现2.0并未添加什么对我们有用的新特性,因此1.2和2.0对于我们而言是没有区别的。
3. Hibernate3是毫无疑问的选择了。
考虑的问题主要是两方面:
1、如何使用它们
2、团队中如何使用它们
Spring的进展比较快,如何进行依赖注入,事务管理,持久化封装,与Struts整合都在理论上搞通了。也就是知道如何操作了。
再已有的工具基础上引进了MyEClipse帮助开发SSH。Hibernate的研究主要基于这个工具,对于Hibernate的细节,也就是它究竟能做什么还不是很了解。
8月19日
已经利用Struts+Spring做出了用户登录Demo。
8月20日
使用xfire搞定Web Service,Delphi和J2EE可以同时访问权限服务。
开始研究Spring+Hibernate的Demo。
8月21日
看到Struts2.0的例子,发现其配置文件和标签都特别简洁,继承了WebWork的一些优点,进行了一番挣扎,决定还是使用Struts1.2。
研究Hibernate,可以利用工具创建出Hibernate程序,不过创建出来的POJO非常恶心。
8月22日
终于和邢戬结对编程完成了SSH的Demo,并且意外使用了Hibernate的级联保存功能,深刻认识到了所谓的对象-关系阻抗不匹配的含义中的一部分(组合关系映射问题)。
8月23日
我研究Struts,邢戬研究Hibernate,宋岩一直在做界面。
8月24日
刘老师提出Weblogic里有O/R Mapping功能,于是研究了一天,撰写了《持久化策略选型:EJB2.x实体和Hibernate》一文。
同时确定了系统平台,J2EE服务器选用Weblogic,并且和Oracle都放在小型机上。
于是开始着手研究AIX和Weblogic。
8月25日
早上刘老师又提出了JBoss,统一用开源或免费的技术平台,JBoss的最新版本已经将IoC容器内置到其中了,也就是说使用JBoss再使用Spring的意义就不大了,但是能够做并不意味着做得好,就像虽然J2EE标准化规范中存在O/RM解决方案,但是业内公认很糟糕就没必要用了。
下午开会确定了垂直切片的系统环境,终于可以开始着手开发。
8月26日~8月27日
开始系统研究Hibernate,有感于自己持久化理论之差。
根据需求,我们不得不使用Ajax技术,宋岩开始寻找这方面的资料,并且找到了Ext解决方案。并且发现这个已经是社区上的首选框架了。
分别撰写需求报告。
8月28日
和宋岩结对编程搞定了Ext显示昼夜作业计划功能。
8月31日
和宋岩结对编程搞定了在Ext grid中选中一条记录。
对于Ajax框架有了更多了解,宋岩又研究了GWT等内容。
我继续研究Hibernate,主要研究了Spring的HibernateTemplate类,对于其用法和源代码进行了研究,体会到了开源的一些好处。
9月1日
和邢戬结对编程完成了昼夜作业计划的插入,先在JUnit下测试通过了对于昼夜作业计划的保存(遭遇了业务主键生成问题,流水号都是数字竟然使用varchar2型,无法排序,在HQL中做类型转化,找了很久才找到;本来想着只保存昼夜作业计划明细表,没想到它还对应了一个主表,造成参照完整性破坏)。由于中间研究AIX,Weblogic,JBoss,EJB等等内容,所以直到要演示了才开始实际的编程。
下午展示了一下功能。并深入的讨论了代理主键替代业务主键的问题。
9月2日到9月8日
宋岩和邢戬结对研究Ext+DWR。
9月8日
开会进行了分工:
1、宋岩、邢戬负责表现层。主攻Ext及其它Ajax框架+Struts
2、我和赵元负责Spring+Hibernate
3、郭勇和高鹏负责AIX
4、段文文和张慧琳负责数据库
9月9日
刘老师又提出Dorado,宋岩和邢戬研究了一上午,觉得其过于强大,无法驾驭,对于所有的东西自成体系,没法和其他框架整合。
花了一晚上时间,终于完成了使用Ext Form向Grid写入数据功能。
9月10日
终于实现了Ext+Struts+Spring+Hibernate的整合中的增加记录,选中一条记录回显到Form中。这样做不破坏原有的体系架构。宋岩和邢戬停止尝试DWR,开始转向直接使用Ext与Struts交互。
9月11日
使用Ext完成了删除功能,并且和Dialog联合了起来。
下午和宋岩结对编程,晚上和邢戬结对编程。
9月13日
经过两天,Ext这方面已经取得了很大的进步,宋岩对于这部分内容也越来越熟悉。
完成添加昼夜作业计划功能,不过存在中文乱码问题。
黄老师提出自动安排泊位和桩位功能,涉及到ComboBox联动问题。
9月14日
解决中文乱码问题和ComboBox联动问题。
和邢戬实践了契约式编程,通过定义接口来协调两层的工作。发现还需要对如何进行测试驱动开发进行培训和讲解。
我负责解决技术问题,做出Demo,然后宋岩和邢戬应用到实际的任务中,不过其间依然存在很多问题,致使宋岩通宵达旦,终于完成了添加昼夜作业计划功能。同时增加了Ext menu,Toolbar等,界面更加美观。
9月15日
当切换到新的数据库时,发现两个业务主键的生成规则竟然变了,导致程序异常无法使用。再一次看出业务主键的缺点。同时发现Hibernate对于数据库切换觉有优势,只需要修改配置文件即可。
后来又花了一下午时间,我和邢戬解决了上述问题。
在过去的一个月时间里,对照《敏捷软件开发技术指导大纲(提案)》中的内容:
1、敏捷开发方法
1) JUnit测试驱动开发
2) Ant自动构建,CruiseControl持续集成
3) 结对编程
4) 重构
5) 简单设计,领域驱动设计
2、面向对象
1) 领域建模
2) 契约式编程
3、技术和框架的应用
1) AIX:基本命令的使用,安装Oracle
2) Weblogic和JBoss
3) EJB实体Bean和Hibernate
4) Spring
5) Struts
6) Ajax框架:Ext,Dorado,DWR,GWT
7) Xfire Web Service
4、规范
完成了昼夜作业计划第一个迭代版本,具体的经验成果请见下一部分。