.Net 中 N 层架构的项目结构 - 交叉引用层 [已关闭]

问题描述 投票:0回答:1

我正在 .Net 中实现 N 层架构,由实体层、DAL 层、业务层和 UI 层组成。

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

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

我的问题是这样的 - 我无法将各个层分离到单独的项目中,因为实体项目依赖于业务项目,而业务项目又依赖于实体项目,从而引入了交叉引用。目前,我的所有 3 层(实体、DAL 和业务)都位于同一个项目中,工作正常,但意味着我无法在其他解决方案中仅共享实体。

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

任何人都可以建议一种更好的方法,或者我可以通过某种方式来做到这一点,同时将我的图层保留在单独的项目中吗?

.net n-tier-architecture
1个回答
2
投票

我自己也多次遇到这种情况,通常有一个简单的解决方法。

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

希望这是有道理的。

© www.soinside.com 2019 - 2024. All rights reserved.