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