項目總結(採用領域驅動開發方式)

最近在做一個項目。採用J2EE作爲開發平臺,通過領域驅動開發(DDD)的方式進行開發。
 
首先說一下系統總體架構。系統分爲表現層,業務層(業務層分爲應用層和領域層),持久層,
其中表現層用Struts MVC框架,業務層用Spring框架,持久層用hibernate框架,現在主
要總結一下業務層和持久層。
 
業務層:根據DDD,業務層應該分爲應用層和領域層,其中應用層的無狀態的服務通過
Spring IOC容器進行裝配和管理。核心業務邏輯放到領域層,而應用層只是一個很薄的層,
指揮領域層的模型對象完成業務操作。領域模型根據DDD分爲了實體,值對象,和服務,其
中實體是系統中一些需要記錄和跟蹤的對象,比如Account對象等,值對象則是一些對實體
的描述,以及實體的狀態等,比如項目的站內信中,可以將消息的狀態做爲抽象消息的值對
象。爲了提高實體的內聚性,將一些不是實體的職責分配給領域層服務對象。當然DDD中還
有關於聚合,工廠,倉庫,個人理解工廠主要是用來創建對象的,工廠控制了對象生命週期
的開始,而對象的生命週期不可能只有開始這麼簡單,所以倉庫就發揮了作用,倉庫就是用
來管理對象的中間狀態的。倉庫可以通過緩存來管理對象,提高系統的性能。至於事務處理,
因爲項目不需要分佈式,所以直接採用JDBC事務,具體就是通過Spring管理的hibernate
事務來實現,將事務邊界界定在應用層服務的開始和結束,這樣也充分發揮Spring的聲明式
事務管理功能。
 
持久層採用hibernate框架來完成。首先定義一個支持CRUD操作的泛型DAO,然後利用
Spring支持回調模板類(HibernateTemplate)來實現最基礎的CRUD操作,其它的Dao接
口繼承泛型接口。這樣CRUD操作在統一的基類中完成,並且還可以利用泛型帶來的安全性
檢查。
    
最後先請教一下各位兄弟,我對於應用層服務和領域層服務的劃
分不是很清楚,請問一下各位具體的劃分標準是什麼?各位在項
目中怎麼做的?我現在是把應用層服務當做Facade來用,用來
封裝業務邏輯,各位兄弟還有什麼好的方法嗎?請指教一下,謝了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章