三層還是多層?事務處理放在哪里?


首先,經典的三層架構形成的主要目的是什么?

無非就是划清表現層、業務邏輯層和數據層三者的關系。方便代碼維護升級。相互解耦和!

當任何一層有內部變動時,不牽扯其他層的代碼變動,這就是主要目的!

那么最近我總在思考一個問題:

DAL數據層是負責BLL邏輯層最終要執行的數據庫操作。

而涉及到BLL業務邏輯需要事務處理時,到底事務處理代碼是放到BLL層還是DAL層成了一個討論比較多的話題。

我在一個博客里看到有處理辦法是由BLL層創建一個固有的Tran對象來穿插所有事務操作。為每個DAL都創建Tran對象接手執行方法,接收BLL傳來的Tran對象,所有事務執行完畢后,由BLL來執行RollBack操作。 博客地址:http://www.cnblogs.com/yyl8781697/archive/2012/02/01/SqlTransaction.html

這樣做為整個項目帶來的好處就是BLL層不牽扯數據層,那么BLL拿到的Tran對象算什么?

每個DAL層都接受Tran對象是否增加了代碼量和維護成本呢?

每個DAL層都要判斷是立即執行還是Tran,到最后的RollBack是交給BLL層來提交還是其他方式。

我想了很久,我們分層的主要目的是什么,又談到文章開頭部分。

分層的中心思想就是解耦和,方便維護跟升級。那么現在出現的事務處理到底是直接在BLL層獲取Connection並在BLL內部執行所有Tran操作,還是獲取一個Tran對象貫通所有DAL操作,最后RollBack呢。

總覺得這樣做有點不倫不類!

所以最后我自己得出了一個自認為比較合適的方案。

那就是多寫一個“Tran(事務層)”,專門存放所有事務操作。這樣層次清晰,代碼責任划分明顯。也更方便維護。

這樣的好處有如下幾點:

1、BLL完全脫離任何跟DB相關的代碼,專心處理業務邏輯。

2、不影響DAL的簡單、單一數據庫處理代碼。

3、集中管理項目Tran事務操作部分。

胡言亂語這么多,也不知道大家能否理解我的想法,或者我這樣做是否正確呢?

特地厚臉皮放在首頁,讓大家都來討論一下,或者大家都有更好的方案來指點下我這個井底之蛙! 見笑了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM