初次看到.Net版本的PetShop源代碼,很驚訝,因爲發現它的架構和Java裏面常用的分層架構一模一樣。後來才知道.Net PetShop就是仿照Java裏面的PetStore.難怪看起來這麼熟悉了.
都是三層架構:表示層,業務層,數據訪問層;都有和數據表映射的貧血Model對象;面向抽象編程思想是一致的,業務層和數據訪問層都抽象出了一個接口.PetShop裏面使用抽象工廠模式和反射機制來生成對象,這裏如果使用類似Spring的依賴注入框架就更方便了.
1 .Net事務
PetShop有四個數據庫,它使用TransactionScope來控制全局事務.和常用用法一樣,事務控制也是用在業務層中.用起來還是很方便的.
public void Insert(PetShop.Model.OrderInfo order) {
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required)) {//創建事務
dal.Insert(order);//Order數據庫
Inventory inventory = new Inventory();
inventory.TakeStock(order.LineItems);//Inventory數據庫
ts.Complete(); //提交事務
}
}
TransactionScope構造函數中使用了枚舉TransactionScopeOption,它定義了事務的傳播屬性,它有三個值:
Required 要求有事務,不存在則新建 這個是缺省值
RequiresNew 總是新建事務
Suppress 環境事務上下文在創建範圍時被取消,範圍中的所有操作都在無環境事務上下文的情況下完成.(不管事務是否存在,都不參與事務)
J2EE中事務的傳播屬性被分成了六個值,見Java中的事務小結一文