17

我刚刚遇到以下句子:

随着行业从三层模型转变为 n 层模型,对象关系阻抗失配变得更加普遍。

但是我找不到三层和n层之间区别的简明解释。我知道三层是什么,我假设 n 层只是增加一层或多层。我只是不确定这些额外的层级是什么。如果有人有简短的解释或只是一个好的链接,那将不胜感激。

4

9 回答 9

26

在开发中,我们将层理解为“责任级别”抽象。

这种级别的责任将概念组合在一起,以提供对现实的连贯语义视图,或者至少与现实相似的东西。

从这个意义上说,所谓的 3 层模型或 n 层模型只是该概念的不同实现。

一个很好的层级示例遵循 jerarquical 模型,其中责任被仔细地分配给适当的人。例如,一个普通的企业有商业、营销、系统、开发和测试部门(例如),它们代表了业务层级。这样一来,职责就很明确了,开发提供产品,测试测试,市场推广和商业销售,所有这些都让系统保持基础设施运行(只是一个例子)。

这个比喻最初是用 3 层模型来处理的,其中确定了三个层。通常这层是数据库抽象层,它负责数据库的通信和抽象,业务规则层,它保存描述业务流程的规则,以及抽象用户与系统交互的用户界面层。

这样,我们对每一层的职责都有角色,这样如果用户需要与系统交互,他将与一层通信,而不是在整个系统中搞砸。

N 层代表了前一个概念的演变,它使用更多层来满足特定需求。通常用户界面层和数据库抽象层都保持不变,因为它们的角色非常明确,而业务规则层则进一步细化。

为此,我们始终考虑问题的特征以及我们现在和将来要提供的功能。例如,如果一个应用程序需要与智能客户端一起工作,或者它预见到与智能客户端一起工作,那么业务层通常分为代理层和后端层,首先将调用路由到它们应该去的地方。

最后,重要的是在不同层之间抽象职责的概念,并将所有相关操作从语义视图集中在同一个地方。

请注意,此外,n 层架构允许在开发人员之间分配这些“职责”。这样,一个给定的团队可以负责数据库抽象层,而其他团队负责代理层,另一个团队负责图形抽象层。当团队成员需要访问数据库时,他会查找 DAL 文档并使用所提供的工具之一,或者要求 DAL 团队提供他需要的功能,这样他就不会直接访问数据库,而是通过人员更好地了解数据库本身的设计和复杂性。

于 2009-01-18T18:27:43.270 回答
11

如果我们将层级视为蛋糕层; 每一层都有自己的成分,做自己的事情。每个应用程序的层只与它上面或下面的层交互。

3 层表示蛋糕有 3 层。通常是底部的数据,然后是应用程序逻辑层(PHP/ruby/etc),然后是顶部的表示层(html)

拥有 n 层架构意味着您设计了多层结构。您拥有的层数将取决于您决定如何制作它。

对于更大的或 Web 应用程序,这似乎更有意义。

我通常最终得到一个 5 层的应用程序。每一层只能与其上层或下层交互。这可以在您的应用程序中提供出色的可扩展性和标准化。

客户层

网页浏览器


表示层

渲染 HTML - Coldfusion/Flash/Ruby/PHP 等。


业务逻辑层

根据需要运行流程和计算 - Coldfusion/Flash/Ruby/PHP 等。


数据集成层

(来自我的开发语言、存储过程等的查询)


数据层

(数据库 - MySQL 等)

于 2009-01-18T19:53:54.203 回答
8

报价似乎来自此代码项目页面。它似乎也很好地解释了 n 层以包括 Web 服务、javascript、工作流等。所有 3 层模型不一定包括的东西。

于 2009-01-18T18:01:05.817 回答
7

n-tier 意味着 n 是任意数字 - 当 n=3 时,它与 n-tier 相同。

3 层的通常定义是表示、逻辑和数据(以任何顺序),是的,SOA 可能会使新手感到困惑,因为有时它位于数据层,有时位于逻辑层,有时同时位于逻辑层和数据层。

整个主题是……主观的。如果您需要一些层,则将其称为 n 层 - 如果您知道 n = 7,则将其称为 7 层或 n 层。

于 2009-01-18T18:17:28.920 回答
3

嘿,我什至无法定义 3 层。有时他们在客户端上打折 javascript,有时在客户端和客户端 Web 浏览器上的 javascript 被认为是另一层。因此,如果您假设数据库 = 第 3 层、Web 服务器 = 第 2 层、客户端 Web 浏览器 = 第 1 层,那么与数据库对话的 ASP 页面可以是 3 层。而其他时候 Web 服务器 = 第 1 层、中间件 = 第 2 层、数据库 =第 3 层。这真的取决于谁在编写定义/书籍。

一般来说,n 层似乎是指更多地拆分中间件层。但除此之外,我没有看到一致的定义。

于 2009-01-18T17:56:53.877 回答
1

那句话出自哪里?他们指的是什么行业?我不得不想象这与SOA有关,因为这是唯一对这种陈述有意义的事情。

我听到的大多数发表这种声明的人都认为,在面向服务的领域中,每个服务在某种程度上都是它自己的层。我不同意,因为大多数情况下,这些不同的服务在逻辑上无论如何都可以分为常见的三层(表示、逻辑和数据)。但同样,这一切都非常主观。

于 2009-01-18T17:49:26.497 回答
1

嗨,请检查此链接,以便您对此有所了解

http://msdn.microsoft.com/en-us/library/ms973829.aspx

于 2009-12-16T15:23:00.400 回答
1

这个关于应用程序架构的 Wiki 书籍章节是关于层、层和决定您需要使用什么的简单指南。

于 2012-03-27T15:33:47.090 回答
0

如果没有在上下文中看到这句话,我认为它指的是服务和中间件的爆炸式增长。

于 2009-01-18T17:43:53.700 回答