“Layers”和“Tiers”的区别是什么?它们与编程有关。

257

"图层"和"层级"有什么不同?


7
我在软件领域遇到的几乎所有人都将这两个术语混为一谈,好像它们完全相同。 - RBT
2
层指的是蛋糕内部,可以是两到六层海绵蛋糕,用奶油夹在一起,然后再装饰。层叠指的是逐渐增大的多个蛋糕堆叠在一起的数量。是的,这是一个真正的烹饪定义,如果与所选答案进行比较,那么它非常有启发性:https://dev59.com/6XVD5IYBdhLWcg3wAWkO#120487 - carloswm85
14个回答

302
逻辑仅仅是组织代码的一种方式。典型的层包括Presentation、Business和Data,与传统的3层模型相同。但是当我们谈论层时,我们只是在讨论代码的逻辑组织方式。这并不意味着这些层可能在不同的计算机上运行,或者在单个计算机上的不同进程中运行,甚至在单个计算机的单个进程中运行。我们所做的只是讨论一种按照特定功能定义的层集合的组织方式。
然而,物理仅仅是关于代码运行的位置。具体来说,层被部署和运行的地方就是层的位置。换句话说,层的物理部署就是层次的物理部署。

来源:Rockford Lhotka,所有应用程序都应该是n层吗?


51

阅读Scott Hanselman在这个问题上的文章:关于“三层/多层体系结构/设计”的提醒

请记住,在“Scott World”(希望这也是您的世界 :)),“层”是部署单元,而“层”是代码中责任的逻辑分离。您可能会说您有一个“3层”系统,但只在一台笔记本电脑上运行它。您可能会说您有一个“3层”系统,但只有ASP.NET页面与数据库进行交互。精确性具有强大的力量,朋友们。


47

层是指代码的逻辑分离。逻辑层可以帮助您更好地组织代码。例如,一个应用可能有以下几个层:

  1. 表示层或用户界面层
  2. 业务层或业务逻辑层
  3. 数据访问层或数据层

上述三个层位于它们自己的项目中,可能有3个或更多项目。当我们编译这些项目时,我们会得到相应的层DLL。现在我们有3个DLL。

根据我们如何部署应用程序,我们可能会有1到3个层。因为现在有3个DLL,如果我们将所有DLL都部署在同一台机器上,则只有1个物理层,但有3个逻辑层。

如果我们选择在每台机器上分别部署每个DLL,则我们有3个层和3个物理层。

因此,层是逻辑分离,而物理层是物理分离。我们也可以说,物理层是层的物理部署。


我从你的回答中理解到,我们可以在三个不同的服务器上部署3层(DLL)。对吗?请问如何在表示层引用业务逻辑层? - Mazhar Khan
@MazharKhan 你可能想使用一个服务来将业务层功能暴露给表示层。 - Amit Saxena

45

为什么总是试图使用复杂的词汇?

层(Layer) = 代码的一部分,如果你的应用程序是一个蛋糕,那么这就是一片。

层级(Tier) = 物理机器,即服务器。

一个层级可以托管一个或多个层。


层的例子:

  • 表示层 = 通常与用户界面相关的所有代码
  • 数据访问层 = 所有与数据库访问相关的代码

层级:

你的代码托管在一个服务器上 = 你的代码托管在一个层级上。

你的代码托管在2台服务器上 = 你的代码托管在2个层级上。

例如,一个机器托管网站本身(表示层),另一个更安全的机器托管所有更安全敏感的代码(真正的业务层、数据库访问层等)。


实施分层架构有很多好处。这是很棘手的,正确实施分层应用需要时间。如果您有时间,请参阅微软的这篇文章:http://msdn.microsoft.com/en-gb/library/ee658109.aspx


17

我找到了一个定义,它说层是逻辑分离,而层级是物理分离。


15
  1. Tier 表示「结构中一系列排列在彼此上方的行或层」,Layer 表示「覆盖表面或物体的一张、一定数量、一定厚度的材料,通常为多个之一」。

  2. Tier 是一个 物理单元,代码/进程在其中运行。例如:客户端、应用服务器、数据库服务器;

    Layer 是一个 逻辑单元,用于组织代码。例如:展示层(视图)、控制器、模型、仓储库、数据访问。

  3. Tier 表示设计的演示、业务、服务和数据功能在不同的计算机和系统之间进行物理分离。

    Layer 是组成应用程序或服务的软件组件的逻辑分组。它们有助于区分组件执行的不同类型的任务,使得创建支持组件的可重用性的设计更加容易。每个逻辑层包含多个离散的组件类型,分组为子层,每个子层执行特定类型的任务。

两层结构表示客户端和服务器。

在此场景中,客户端和服务器可以存在于同一台机器上,也可以位于两台不同的计算机上。下图说明了一个常见的 Web 应用程序场景,其中客户端与位于客户端层的 Web 服务器进行交互。该层包含演示层逻辑和任何所需的业务层逻辑。Web 应用程序与托管数据层逻辑的单独机器通信。

Layers vs Tiers

分层和分层模式的优点:

  • 分层有助于最大化代码维护性、优化应用程序在不同部署方式下的工作方式,并为必须作出某些技术或设计决策的位置提供清晰的界定。

  • 将您的层放置在分开的物理层级上可以通过在多个服务器上分配负载来提高性能。它还可以通过将更敏感的组件和层隔离到不同的网络或互联网上而有助于安全性。

1 层应用程序可以是一个 3 层应用程序。


11
是应用程序中相关功能的逻辑分离,层之间的通信明确且松散耦合。[表现逻辑应用逻辑数据访问逻辑]
层次结构(tiers)是在一个单独的计算机进程中托管各个(这些独立的服务器托管)的物理分离。
enter image description here
如图所示:
1-Tier & 3-Layers « App Logic  with out DB access store data in a files.
2-Tier & 3-Layers « App Logic & DataStorage-box.
2-Tier & 2-Layers « Browser View[php] & DataStorage[procedures]
2-Tier & 1-Layers « Browser View[php] & DataStorage, query sending is common.
3-Tier & n-Layer  « Browser View[php], App Logic[jsp], DataStorage

n-分层应用程序的优点:
更好的安全性
可扩展性:随着组织的增长,您可以通过数据库群集扩展您的DB层而不触及其他层。
可维护性:Web设计师可以更改View代码,而不触及其他层。
轻松升级或增强[例如:您可以添加附加的应用程序代码、升级存储区域,甚至添加多个呈现层以适应独立设备,如移动设备、平板电脑、PC]

enter image description here 来自博客的图表


9

我喜欢Microsoft Application Architecture Guide 2中的以下描述:

层描述应用程序中功能和组件的逻辑分组;而层描述了在单独的服务器、计算机、网络或远程位置上分布功能和组件的物理分布。虽然层和层都使用相同的名称集合(表示、业务、服务和数据),但请记住,只有层意味着物理分离。


8
是的,我的朋友说得没错。 层是应用程序的逻辑分区,而层级是系统的物理分区 层级划分取决于层划分。就像一个应用程序在单台机器上执行,但它遵循三层架构,因此我们可以说层架构可以存在于层级架构中。 简单来说,如果三层架构能够在单个机器上实现,那么我们可以说它是一层架构。如果我们将每个层实现在单独的机器上,则称为3层架构。一层也可以运行几个层级。 在层架构中,相关组件易于彼此通信。 就像我们遵循以下架构
演示层 业务逻辑层 数据访问层
客户端可以与“演示层”交互,但出于安全原因,他们访问下面层的公共组件(例如业务逻辑层的公共组件),以便访问“业务逻辑层”。 为什么要使用层架构?因为如果我们实现层次结构,我们就可以提高应用程序的效率,例如
安全性
可管理性
可扩展性
其他需要,例如开发应用程序后,需要更改dbms或修改业务逻辑等等,那是必要的。
为什么要使用分层结构?因为每个层的物理实现提供更好的效率,如果没有层次结构,我们无法实现分层结构。单独的机器用于实现单独的层,并且单独的层实现一个或多个层,这就是我们使用它的原因。 它用于容错的目的。 易于维护。
简单的例子
就像一家银行在一个办公室里开业,其中员工分类如下:
门卫
负责现金的人
负责介绍银行方案的人
经理
他们都是系统的相关组件。
如果我们去银行贷款,那么首先是门卫微笑着打开门,然后我们去找介绍所有贷款方案的人,之后我们去经理办公室通过贷款。 之后最后我们去收银员柜台取贷款。 这些是银行的层次架构。
层级呢? 银行在一个城镇开设了一家分行,在另一个城镇开设了一家分行,之后又开设了一家分行,但每个分支机构的基本要求是什么?
门卫
负责现金的人
负责介绍银行方案的人
经理
完全相同的层和层级概念。

很好的解释,亲爱的。 - Dulaj Kulathunga

6

我使用“层”来描述我的解决方案中组件内的架构或技术栈。当涉及到网络或进程间通信时,我使用“层级”来逻辑地分组这些组件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接