如何处理业务和数据访问层之间的双向依赖关系?

时间:2010-03-10 15:01:13

标签: c# data-access-layer business-logic

我有一个三层应用程序(演示文稿,业务逻辑和数据访问)。在数据访问层中,我有一个名为Unit的对象,我在业务层中有另一个名为Unit的对象。

在业务层中的Insert()对象上调用Unit时,它会在数据访问层中的相应对象上调用Insert()方法,并将自身作为参数传递。我遇到的问题是数据访问层没有引用业务层,允许它这样做会导致循环依赖。

我的方法有缺陷吗?如果是这样,那么什么是我的问题的一个很好的解决方案?

1 个答案:

答案 0 :(得分:2)

当你说你正在做的方式需要层之间的双向依赖时,你是对的,这几乎总是一件坏事。这种依赖的原因是您的业务逻辑层承担了持久层的一些责任(通过在业务逻辑层中实现Insert())。

似乎你在这里混合了两个不兼容的概念。

首先,您声明代码中有三个层:表示,业务和数据访问。此声明的问题在于您还声称使用active record类似模式(unit.Insert())。如果您确实拥有独特的域(业务)层和持久性(数据访问)层,那么域对象将不知道如何Insert()

看看repository pattern。此模式更适合建立不同的持久层。如果使用此模式,则可以在持久层中定义“实体”,并将域层中的Unit对象映射到持久层中的Unit对象。 AutoMapper可以避免手动将域模型映射到实体的痛苦。