我有一个业务逻辑层(BLL)和数据访问层(DAL)。 DAL层作为IUnitOfWork注入到Unity的BLL中。
我在BLL中使用IUnitOfWork进行所有数据库操作,但现在我需要将一个抽象工厂注入BLL。其中一个工厂实现需要从数据库中提取一些数据。我所做的是在构造函数中将IUnitOfWork注入该工厂,工厂本身可以访问DAL层。你能告诉我这是否可以接受? BLL以外的其他类是否可以访问IUnitOfWork?这违反了良好做法吗?
答案 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层。
现在你需要一个神奇的地方,你可以用统一的方式注册所有的实现,这样你的决心就可以了。这是一个了解一切的单一地方。