【问题标题】:Factory class access to DAL Layer工厂类访问 DAL 层
【发布时间】:2016-02-23 08:26:07
【问题描述】:

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

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

【问题讨论】:

    标签: design-patterns


    【解决方案1】:

    您的数据库操作应仅限于您的 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 层。

    现在您需要 1 个神奇的地方来统一注册所有实现,以便您的解决方案有效。那是一个对所有事物都了解的地方。

    【讨论】:

      猜你喜欢
      • 2010-10-11
      • 2014-08-05
      • 2012-08-18
      • 2011-01-15
      • 2013-12-05
      • 2021-10-25
      • 2012-01-05
      • 2011-05-04
      • 2011-11-02
      相关资源
      最近更新 更多