2012-02-26 101 views
3

我一直在努力构建我的3层应用程序。我似乎总是会遇到我不想要的依赖性问题,这肯定表明我做错了什么。3层架构依赖关系

您通常如何构建您的3层架构?

我看到2的一个方法可以做到这一点:

  1. 业务层是在顶部(或底部,这取决于你如何看待它)广告中的所有其他层依赖于它。业务层定义了执行工作所需的接口,特别是数据访问。数据访问层实现这些接口,并使用依赖注入将它们注入中间层。 UI同样通过DI消耗输出接口。业务对象是数据层填充的POCO。数据层没有自己的代码模型(它使用业务层中定义的业务对象)。业务层对UI或数据层,UI和数据层了解业务层都一无所知。
  2. 用户界面层位于顶层,商业层层位于中层,数据位于底层。数据层发布业务层消耗的接口。业务具有UI消耗的接口。这是一种1-2-3的情况。数据层定义了代码对象,业务层有它自己的模型(类似于AutoMapper用来映射它们,但是这个映射是在业务层执行的)。数据层对Business或UI层一无所知。业务层了解数据层,但不了解UI层。 UI层知道业务层,但不了解数据层。

enter image description here

你使用了上述两种?哪一个?为什么?你使用不同的方法?

我看到它的方式#1提供了一种以业务为中心的方法。 UI可以随数据层一样轻松更改,而不会影响业务层。

第二个更直接,如果数据层发生变化,通常会要求业务层更改。当然,你可以用精心设计的接口来抽象它(像一个Repository模式,但需要改变的地方)。 UI可以改变而不影响任何一个。

+0

它的价值是什么,我没有看到任何一种方法的问题;都提供了良好的模块化和抽象。我个人使用你描述的第二种方法,因为它对我来说似乎更直接。 – 2012-02-26 10:15:34

+0

相关内容:http://jeffreypalermo.com/blog/the-onion-architecture-part-1/ – 2012-03-27 12:24:07

+0

3层概念的完美概述:http://www.exforsys.com/tutorials/application-development/什么 - 是正tier.html – Jowen 2013-05-08 12:48:04

回答

0

如果它是一个小业务逻辑的CURD应用程序,请使用方法#2。否则,使用方法#1,它实际上是将控制反转(IoC)应用于#2的结果。