您的數據庫操作應該僅限於您的DAL層。你得到的是,在你的DAL層您有類似
class MyDBUnitOfWork: IUnitOfWork {
public void Save(someobject) {/*db operations here */}
public someobject Load(somequery) { ....}
}
現在
在BLL你有這樣的事情
class BusinessTransaction {
public void IncrementSomething(UnityContainer container) {
var unitofwork = container.Resolve<IUnitOfWork>();
var obj = unitofwork.Load(42)
obj.Prop++;
unitofwork.Save(obj);
}
}
你所看到的在這裏發生的是,IUnitOfWork在BLL是probally定義(或定義您的接口的單獨項目),但可從BLL和DAL訪問,但MyDBUnitOfWork包含在DAL中,但BLL不知道這一點。你的工廠也一樣。你將不需要訪問你的DAL層。
現在,您需要1個魔術地點,您可以在所有實施中註冊統一,以便解決問題。那是知道一切的唯一地方。