我一直在苦恼如何构建我的三层应用程序。我总是遇到不想要的依赖问题,这是我做错了什么的明显迹象。
你通常如何构建你的三层架构?
我看到有两种方法:
- 业务层处于顶部(或底部,取决于您如何看待它),所有其他层都依赖于它。业务层定义了其需要执行工作的接口,特别是数据访问方面的接口。数据访问层实现这些接口,并使用依赖注入将它们注入到中间层中。UI通过依赖注入消耗输出接口。业务对象是数据层填充的POCO。数据层没有自己的代码模型(它使用业务层中定义的业务对象)。业务层对UI层和数据层一无所知,而UI层和数据层则知道业务层。
- UI层位于顶部,业务层位于中间,数据层位于底部。数据层发布业务层消耗的接口。业务层具有UI层消耗的接口。这是一种直接的1-2-3情况。数据层定义代码对象,业务层具有自己的模型(并且类似于AutoMapper的东西用于在它们之间进行映射。但是在业务层执行此映射)。数据层对业务或UI层一无所知,业务层了解数据层,但不了解UI层,UI层了解业务层,但不了解数据层。
你使用这两个中的任何一个吗?哪一个?为什么?你使用不同的方法吗?
我认为,#1提供了一种以业务为中心的做事方法。UI可以轻松更改,而不会影响业务层和数据层。
第二种方式更为直接,并且通常需要在数据层更改时更改业务层。当然,您可以使用精心计划的接口抽象化这一点(像Repository模式),但某些地方必须更改。UI可以更改,而不会影响任何一层。