三层架构

时间:2011-01-01 16:45:33

标签: c# 3-tier presentation-layer middle-tier data-layer

我对三层架构有一些疑问。

  1. 如何正确实现三层架构中的应用程序?
  2. 如何在这些层级之间进行通信?
  3. 数据层是否完全等于DBMS? (如果我们使用存储过程,如果我们使用对象关系映射框架,那么如何?)
  4. 期待听到你的答案。 感谢。


    PS:请不要理解我在问一般问题。好 ?我正在问如何正确设计大规模应用程序。什么是最好的方法?。不期待looooong答案。

7 个答案:

答案 0 :(得分:2)

这些是广泛的答案,我会尽力给你一些指示。

  1. “正确”是一个有点主观的术语。一般来说,在我看来,最重要的是将图层保留在自己的模块中(例如,它自己的DLL),并让接口进出模块。通过在每个层中使用接口,您可以将定义与实现分开,从而进一步将层彼此分离。如果层中有单个入口点,并且它基于接口,则可以根据需要具有多个底层实现。另一方面,如果使用接口作为回调,那么层客户端(即其他层)只需要实现接口,以便在层之间获得良好的流量。

  2. 这取决于您自己如何实现图层。如果您像上面建议的那样设计图层,那么您只需使用接口进入图层即可。另一个解决方案可能是使用事件调度程序使其异步 - 一个层只会触发一个事件,另一个层会监听此事件并对其进行操作。这一切都取决于项目的具体要求。

  3. 不,数据层是应用程序中与DBMS交互的层。使用ORM只是实现数据层的一种方法,而使用存储过程是一种将一些逻辑从应用程序移动到DBMS本身的方法,原因有很多。

  4. 我想你会得到几个答案;你应该把所有这些考虑在内,在网上做一些阅读,然后做一些实验,直到找到你喜欢的东西。

答案 1 :(得分:1)

  1. 三层是演示,业务逻辑和数据。确保不要混淆顾虑。 UI不应包含任何业务逻辑等。

  2. 任何层级都应该只知道它下面的层。对于前者UI应该只与Business Logic通信,不应该对数据层有任何了解。要实现这一目标code to interfaces instead of concrete implementations。使用Dependency Injection来保持模块松散耦合。

  3. 这取决于您选择如何实施它。从YAGNI校长开始。尽量让事情尽可能简单,只有在真正需要时才使用ORM之类的东西。

答案 2 :(得分:1)

此主题过于宽泛,无法在所需的深度中正确回答此问题。那说:

  1. 关键项是正确限制图层之间的依赖关系,以便每个图层只知道“下面”图层。例如业务层不了解表示层。

  2. 3层架构没有说明层之间如何相互通信。业务(层)功能经常作为表示层使用的Web服务公开。

  3. 数据层与数据库不完全相同。您将始终需要一些代码来与数据存储进行交互(例如ORM)。此代码应位于其自己的模块中,以最大限度地减少耦合。

答案 3 :(得分:0)

这取决于很多因素。我会考虑为您的数据访问层(DAL)使用repositiry模式。理想情况下,这将与对象关系映射器(ORM)一起使用,如实体框架4或nhibernate。然后我会有一个包含业务规则和服务的单独域层。您的域层将为您的UI和您DAL之间的请求提供服务。对于您的UI,您可以选择Web表单或MVC方法。两者仍然可以在三层中工作,但你可以更好地分离MVC的问题。当你想做一些单元测试时这很好。以下是关于上述内容的一些很好的链接。

http://daveswersky.com/2010/05/26/entity-framework-4-then-and-now/

http://channel9.msdn.com/blogs/matthijs/aspnet-mvc-2-basics-introduction-by-scott-hanselman

http://www.asp.net/mvc/tutorials/mvc-music-store-part-1

答案 4 :(得分:0)

三层架构是一个不是一步一步教学的概念。保持简单和孤立。如果您正在处理数据存储和检索,请将其放在数据层中。当有逻辑时,将它放在逻辑/中间层。主题/皮肤,视图,小部件占位符位于表示层。

研究其他代码。一个好的起点是monoRail

阅读大量文档,你越了解别人做得越多越好。

最重要的是,享受它的乐趣。如果你感到不知所措或者事情变得复杂,那就退后一步,找出错误的地方。

答案 5 :(得分:0)

在3层体系结构中实现应用程序的最佳方法是使用使用MVC的语言框架。对于PHP,我推荐CodeIgniter http://codeigniter.com/

通常情况下,如果您按照OOP在三个级别之间传递对象。好吧,大多是两个。 Control获取请求,询问Model(DB)并获取一个返回的对象,使用它的属性和方法来显示View。

按照Ci中的一些教程。您将了解MVC中发生的事情。

答案 6 :(得分:0)

三层体系结构中的三层分别是表示层,业务逻辑层和数据访问层。除了这三个之外,我们还可以使用业务对象层来实现可以将对象与数据库映射的属性类,也可以使用实体框架。

演示层: 这是用户执行其活动的应用程序的最顶层。让我们以用户需要填写表格的任何应用程序为例。这种形式不过是表示层。在Windows应用程序中,Windows窗体是表示层,在Web应用程序中,Web窗体属于表示层。基本上,用户的输入验证和规则处理是在此层完成的。

业务层: 这是在表示层的顶部。顾名思义,大多数业务操作都在这里执行。例如,收集表单数据后,我们要使用我们的自定义业务规则来验证它们。基本上,我们在这一层中定义类和业务实体。

数据访问层: 在业务逻辑层之上是数据访问层。它包含帮助业务层与数据库连接并执行CRUD操作的方法。通常,所有与数据库相关的代码和内容都属于数据访问层。有时,人们使用与平台无关的数据访问层从各个数据库供应商那里获取数据。

更多详细信息-https://www.c-sharpcorner.com/UploadFile/dacca2/understand-3-tier-architecture-in-C-Sharp-net/