"图层"和"层级"有什么不同?
"图层"和"层级"有什么不同?
来源:Rockford Lhotka,所有应用程序都应该是n层吗?
阅读Scott Hanselman在这个问题上的文章:关于“三层/多层体系结构/设计”的提醒:
请记住,在“Scott World”(希望这也是您的世界 :)),“层”是部署单元,而“层”是代码中责任的逻辑分离。您可能会说您有一个“3层”系统,但只在一台笔记本电脑上运行它。您可能会说您有一个“3层”系统,但只有ASP.NET页面与数据库进行交互。精确性具有强大的力量,朋友们。
层是指代码的逻辑分离。逻辑层可以帮助您更好地组织代码。例如,一个应用可能有以下几个层:
上述三个层位于它们自己的项目中,可能有3个或更多项目。当我们编译这些项目时,我们会得到相应的层DLL。现在我们有3个DLL。
根据我们如何部署应用程序,我们可能会有1到3个层。因为现在有3个DLL,如果我们将所有DLL都部署在同一台机器上,则只有1个物理层,但有3个逻辑层。
如果我们选择在每台机器上分别部署每个DLL,则我们有3个层和3个物理层。
因此,层是逻辑分离,而物理层是物理分离。我们也可以说,物理层是层的物理部署。
为什么总是试图使用复杂的词汇?
层(Layer) = 代码的一部分,如果你的应用程序是一个蛋糕,那么这就是一片。
层级(Tier) = 物理机器,即服务器。
一个层级可以托管一个或多个层。
层的例子:
层级:
你的代码托管在一个服务器上 = 你的代码托管在一个层级上。
你的代码托管在2台服务器上 = 你的代码托管在2个层级上。
例如,一个机器托管网站本身(表示层),另一个更安全的机器托管所有更安全敏感的代码(真正的业务层、数据库访问层等)。
实施分层架构有很多好处。这是很棘手的,正确实施分层应用需要时间。如果您有时间,请参阅微软的这篇文章:http://msdn.microsoft.com/en-gb/library/ee658109.aspx
我找到了一个定义,它说层是逻辑分离,而层级是物理分离。
Tier
表示「结构中一系列排列在彼此上方的行或层」,Layer
表示「覆盖表面或物体的一张、一定数量、一定厚度的材料,通常为多个之一」。
Tier
是一个 物理单元,代码/进程在其中运行。例如:客户端、应用服务器、数据库服务器;
Layer
是一个 逻辑单元,用于组织代码。例如:展示层(视图)、控制器、模型、仓储库、数据访问。
Tier
表示设计的演示、业务、服务和数据功能在不同的计算机和系统之间进行物理分离。
Layer
是组成应用程序或服务的软件组件的逻辑分组。它们有助于区分组件执行的不同类型的任务,使得创建支持组件的可重用性的设计更加容易。每个逻辑层包含多个离散的组件类型,分组为子层,每个子层执行特定类型的任务。
两层结构表示客户端和服务器。
在此场景中,客户端和服务器可以存在于同一台机器上,也可以位于两台不同的计算机上。下图说明了一个常见的 Web 应用程序场景,其中客户端与位于客户端层的 Web 服务器进行交互。该层包含演示层逻辑和任何所需的业务层逻辑。Web 应用程序与托管数据层逻辑的单独机器通信。
分层和分层模式的优点:
分层有助于最大化代码维护性、优化应用程序在不同部署方式下的工作方式,并为必须作出某些技术或设计决策的位置提供清晰的界定。
将您的层放置在分开的物理层级上可以通过在多个服务器上分配负载来提高性能。它还可以通过将更敏感的组件和层隔离到不同的网络或互联网上而有助于安全性。
1 层应用程序可以是一个 3 层应用程序。
表现逻辑
,应用逻辑
,数据访问逻辑
]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]
来自博客的图表
我喜欢Microsoft Application Architecture Guide 2中的以下描述:
层描述应用程序中功能和组件的逻辑分组;而层描述了在单独的服务器、计算机、网络或远程位置上分布功能和组件的物理分布。虽然层和层都使用相同的名称集合(表示、业务、服务和数据),但请记住,只有层意味着物理分离。
我使用“层”来描述我的解决方案中组件内的架构或技术栈。当涉及到网络或进程间通信时,我使用“层级”来逻辑地分组这些组件。