6. 自定義事務(wù)
.Net framework 2.0中內(nèi)置了對事務(wù)的支持,不但可以管理進程內(nèi)的事務(wù)(包括SQLServer事務(wù)),還可以自動提升至MSDTC來管理分布式事務(wù)(包括WCF事務(wù))。所以我們無需再編寫任何事物的管理代碼。
本系統(tǒng)中使用了Enterprise Library中的Data Access Application Block作為數(shù)據(jù)存取方案。但卻沒有很好地利用.Net framework 2.0的事務(wù)功能,而是自己寫了很多管理事務(wù)的代碼。例如使用一個TransactionContext類管理事務(wù)的執(zhí)行,在很多數(shù)據(jù)存取的方法上支持傳入TransactionContext類型的參數(shù),用來管理事務(wù)邊界。
這樣不僅需要花費精力維護TransactionContext類,管理事務(wù)的執(zhí)行,也使數(shù)據(jù)存取接口變的很復(fù)雜,臃腫。
其實我們完全可以利用TransactionScope這一.Net framework2.0中的事務(wù)處理類還管理事務(wù)。簡單的方式是:
Using(TransactionScope cpe = new TranscationScope())
{
數(shù)據(jù)操作方法1();
數(shù)據(jù)操作方法2();
…
數(shù)據(jù)操作方法N();
}
這樣可以自動提交和回滾事務(wù)了,而且可以根據(jù)實際情況,如果其中某個方法調(diào)用了分布式事務(wù)的話,可以自動升級為MSDTC事務(wù)。
關(guān)于如何使用.Net framework2.0中的事務(wù)功能,可以參考:Introducing System.Transactions in the .NET Framework 2.0。
7. 其它問題
還有一些其它的小問題,雖然不涉及到系統(tǒng)架構(gòu),但也會帶來一些負面的影響,包括:
A.代碼重復(fù)
a) 很多數(shù)據(jù)查詢方法功能相同,只是返回的數(shù)據(jù)“格式” 不同(有的返回DataSet,有的返回DataRow,有的返回實體對象),為了調(diào)用方便,做了很多重載的方法,但沒有考慮代碼重復(fù)利用,造成大量的代碼冗余。
B.公共模塊
a) 設(shè)計者把系統(tǒng)中使用到的公共代碼和枚舉等等組織在一起,放在一個文件中,為各個項目所使用。其實這本來很好,但是我卻發(fā)現(xiàn),公共模塊同時被三個層次引用,這樣也是很不好的。這樣會使得系統(tǒng)的分層結(jié)構(gòu)遭到破壞,公共模塊難于理解和使用。應(yīng)該把屬于各層專屬使用的功能集成到各自的層中,每個層中設(shè)一個公共模塊,這樣既保障了分層的清晰,同時又很好地規(guī)劃了公共模塊。