您的业务逻辑 dll 不应引用数据访问层。数据访问层应该引用您的业务逻辑 dll。业务逻辑代码应该定义它想要与之交谈的接口,以便访问数据库(或其他业务逻辑外部的东西),其他 dll 应该实现它们以为业务逻辑层提供服务。
这就是依赖倒置原则。它说高级模块不应该依赖于低级模块。这里的业务逻辑是高级模块。从业务逻辑 dll 的角度来看,数据访问 dll 只是实现细节。
显示示例
BLL:
public interface IPersonRepository
{
void SavePerson(Person p);
}
public class PersonServices
{
PersonServices(IPersonRepository repo)
{
//
}
public void FirePerson(Person toFire)
{
toFire.FireHim();
repo.SavePerson(toFire);
}
}
达尔:
public class PersonRepository : IPersonRepository
{
// ...
}
用户界面:
var repo = new PersonRepository();
var ps = new PersonService(repo); // wire by hand or use container
ps.FirePerson(somePerson);
参考:
用户界面-> BLL
-> 达尔
DAL -> BLL
BLL -> 什么都没有!