??? 項目基本上采用如下交互模式.
??? 流程如下.
- 一個頁面對應一個用類
- 一個頁面對應一個Struts Action.
- 頁面上一個動作(提交按鈕)對應Action一個方法(或者對應if語句)
- 一個Struts Action對應一個BO類
- 一個Struts Action 方法(頁面一個動作)對應BO一個方法
- 一個BO對應1到多個DAO.
? 其中業務對象BO,
- 都是按照無狀態設計的,類似函數大集合.
- 函數之間不考慮復用,函數之間功能獨立,代碼重復率高.
- 業務對象都是都是根據用例來劃分的(1 vs 1).
- 業務對象之間不考慮關系,全部都是函數載體.
- DAO主要服務于業務對象.基本上也是1 vs 1
- 只能服用CRUD情況.復雜的sql文如果很相似可以合并.
- 由于設置上是為業務對象服務,業務對象之間設置溝通很少,所以DAO實現也多重復
? 但是開發效率很高.從外到里,全程一人設計.單獨看功能完整,全局看,雷同的太多了.
? 首先提煉業務對象.從全局角度考慮,劃出有限個業務對象.利用對象關系勾勒出完整的業務邏輯.
? 其中每個業務對象與PO緊密合作,PO依賴與DAO,實現對象的基本操作(CRUD).
? 以上實現業務對象層,主要用來描述業務對象之間的關系,已經持久化功能..
? 再設計出查詢層,支持復雜查詢,獲取各種查詢結果.
? 門戶層對客戶端(Struts Action)提供業務接口,支持如下:
- 對業務對象層操作
- 對查詢層操作
- 對于復雜業務邏輯,結合查詢層和業務層來實現.
?
?附上代碼。?
項目代碼?? 主要改進如下類
- CompinfoServiceImp
- 直接調用Compinfo,不顯示調用DAO
- Compinfo
- 內部隱藏調用DAO
??? 首先說說我們現在采用的開發框架.然后慢慢的進行改造.
??? 首先是標準的WEB應用程序.包括WEB層,業務層(BO層)和持久化層(DAO/PO).
??? 1.WEB層,采用Struts.
??? ?? 1.1 JSP頁面采用少量的Struts標簽,其他功能通過自定義標簽完成.
?????? 1.2 頁面操作分為 添加(修改)/列表 兩部分.基本上通過CSS來展現.其中列表部分采用Displaytag
?????? 1.3 按需要采用Ajax
??? 2.業務層采用Spring.
?????? 2.1 通過DelegatingActionProxy綁定Struts
?????? 2.2 BO只有一個空父類.提供Log4j的實例.
?????? 2.3 BO依賴與BaseDAO及具體業務DAO.
?????????? 2.3.1? BaseDAO完成基本的增刪改查,
?????????? 2.3.2? 具體業務DAO完成關于本表的復雜的查詢
?????????? 2.3.3? 多表關聯的查詢,則單獨封裝在DAO中
?????? 2.4 事務控制統一由Spring AOP配置完成.
??? 3.持久層采用Hibernate
?????? 3.1 BaseDAO繼承HibernateDaoSupport
?????? 3.2 普通HSQL文查詢.
??? 以上是當前項目的狀況,以后會逐一對其改進.