第一部分
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、規范
完成了晝夜作業計劃第一個迭代版本,具體的經驗成果請見下一部分。