工厂类访问DAL层

时间:2015-11-20 18:30:11

标签: design-patterns

我有一个业务逻辑层(BLL)和数据访问层(DAL)。 DAL层作为IUnitOfWork注入到Unity的BLL中。

我在BLL中使用IUnitOfWork进行所有数据库操作,但现在我需要将一个抽象工厂注入BLL。其中一个工厂实现需要从数据库中提取一些数据。我所做的是在构造函数中将IUnitOfWork注入该工厂,工厂本身可以访问DAL层。你能告诉我这是否可以接受? BLL以外的其他类是否可以访问IUnitOfWork?这违反了良好做法吗?

1 个答案:

答案 0 :(得分: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(或定义您的界面的单独项目)中可能被定义,但可以从您的BLL和DAL访问

您的MyDBUnitOfWork包含在DAL中,但BLL不知道这一点。你的工厂也一样。你不会需要访问你的DAL层。

现在你需要一个神奇的地方,你可以用统一的方式注册所有的实现,这样你的决心就可以了。这是一个了解一切的单一地方。

相关问题