2015-11-20 79 views
0

我有一個業務邏輯層(BLL)和數據訪問層(DAL)。 DAL層作爲IUnitOfWork注入BLL with Unity。工廠類訪問DAL層

我正在用BLUn內部的IUnitOfWork做所有數據庫操作,但現在我需要在BLL中注入一個抽象工廠。工廠實現之一需要從數據庫中提取一些數據。我所做的是在構造函數中將IUnitOfWork注入該工廠,並且工廠本身可以訪問DAL層。你能告訴我這是否可以接受嗎? BLL以外的其他課程是否可以訪問IUnitOfWork?這是違反良好做法嗎?

回答

0

您的數據庫操作應該僅限於您的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個魔術地點,您可以在所有實施中註冊統一,以便解決問題。那是知道一切的唯一地方。