三层与n层之间的差异

时间:2009-01-18 17:42:03

标签: design-patterns architecture n-tier-architecture tiers

我刚看到以下句子:

  

由于该行业已经从三个转变   层模型到n层模型,对象关系阻抗不匹配变得更加普遍。

但我无法找到三层和三层之间差异的简明解释。我知道三层是什么,我认为n层只增加了一层或多层。我只是不确定这些额外的层是什么。如果有人有简短的解释或只是一个好的链接,那将非常感激。

9 个答案:

答案 0 :(得分:25)

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

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

在这种意义上,所谓的3层模型或n层模型只是这些概念的不同实现。

层级的一个很好的例子是遵循神经模型,其中责任被认真地提供给适当的人。例如,一个共同的业务有商业,营销,系统,开发和测试部门(例如),它们代表业务层。这样,责任是明确的,开发提供产品,测试测试它,营销推广它和商业销售它,所有这些,而系统保持基础设施运行(只是一个例子)。

这个比喻首先与三层模型接近,其中确定了三层。通常这个层是数据库抽象层,它负责数据库的通信和抽象,业务规则层,它包含描述业务流程和用户界面层,它抽象用户与系统的交互。

这样,我们就拥有了每个层的职责角色,因此如果用户需要与系统进行交互,他将与一个层进行通信,而不是陷入漏洞系统。

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

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

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

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

答案 1 :(得分:11)

如果我们把层层看作是蛋糕层; 每一层都有它自己的成分并做它自己的事情。每个应用程序的层只与其上方或下方的层相互作用。

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

拥有n层架构意味着您可以为其设计多层图层。您拥有的图层数量取决于您决定如何制作图层。

使用大型或Web应用程序似乎更有意义。

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

客户等级

网络浏览器


演示文稿层

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


业务逻辑层

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


数据集成层

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


数据层

(数据库 - MySQL等)

答案 2 :(得分:8)

报价似乎来自此codeproject页面。它似乎也很好地解释了n层,包括Web服务,javascript,工作流等等.3层模型不一定包含所有东西。

答案 3 :(得分:7)

n层意味着n是任何号码 - 当n = 3时,它与n层相同。

3层的通常定义是演示,逻辑和数据(以任何顺序),是的,SOA可能会混淆新手,因为有时它会位于数据层,有时是逻辑层,有时是逻辑层和逻辑层。数据层。

整个主题是......主观的。如果你需要一些层,那么称之为n层 - 如果你知道n = 7,那么称之为7层或n层。

答案 4 :(得分:3)

嘿,我甚至无法得到3层的定义。有时他们会在客户端上对javascript进行折扣,有时客户端和客户端Web浏览器上的javascript被视为另一层。因此,如果您假设数据库=第3层,Web服务器=第2层,客户端Web浏览器=第1层,则与数据库通信的ASP页面可以是3层。其他时候Web服务器=第1层,中间件=第2层,数据库=第3层。这取决于谁在编写定义/书籍。

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

答案 5 :(得分:1)

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

我听过的大多数人发表这种声明都认为,在面向服务的领域,每项服务都是某种程度上属于自己的层级。我不同意,因为大多数情况下,这些不同的服务可以在逻辑上分为常见的三层(表示,逻辑和数据)。但同样,这一切都很主观。

答案 6 :(得分:1)

您好请查看此链接,以便您可以了解这个

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

答案 7 :(得分:1)

这个Wiki-book chapter on application architecture是层,层和决定你需要使用的直接指南。

答案 8 :(得分:0)

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