.Net中的N层体系结构的项目结构 - 交叉引用层

时间:2011-07-28 10:26:12

标签: .net n-tier-architecture

我在.Net中实现了N层体系结构,包括实体层,DAL层,业务层和UI层。

除了原始字段外,实体还包含导航属性。例如,Invoice实体具有InvoiceLines属性,该属性应返回与父Invoice实体关联的所有InvoiceLine实体。

由于存在从持久性介质中检索到这些InvoiceLines并且不想重复代码后需要应用于这些InvoiceLines的业务逻辑,因此Invoice实体上的InvoiceLines属性通过调用来填充自身业务逻辑中的GetInvoiceLinesByInvoiceID方法,返回IEnumerable。

我的问题是这个 - 我不能将这些层分成单独的项目,因为实体项目依赖于业务项目,而业务项目依赖于实体项目,从而引入了交叉引用。我目前拥有所有3层(实体,DAL和商业)生活在同一个项目中,工作正常,但意味着我不能在其他解决方案中分享实体。

我很欣赏通过以这种方式交叉引用图层我违反了某些原则,但是在我的实体上填充导航属性且应用了业务逻辑非常方便。

任何人都可以建议一个更好的方法,或者某种方式我可以这样做,同时将我的图层保存在单独的项目中?

干杯

1 个答案:

答案 0 :(得分:2)

我自己一直处于这种状况,并且通常有一条简单的出路。

我会在这里做一些假设,但希望他们是正确的。如果您使用的是基于接口的方法,您的业务逻辑将实现一些接口,您的实体将实现一些接口。从实体到业务对象的任何依赖性应该只是从业务对象到实体的接口,反之亦然。这应该可以很容易地将接口剥离到一个单独的项目(或者两个)中,然后将业务逻辑和具体实体拆分为他们自己的项目,这只需要引用接口程序集。

希望这是有道理的。