以下的分离被认为是2层还是3层架构?

4
我有一个Web应用程序,部署在Web托管上,具体如下:
  1. 代码(没有BLL、DAL等分离)上传到Web托管
  2. 数据库(MSSQL备份文件)上传到Web托管数据库
这是2层架构还是3层架构?
我从不同的来源看到了不同的解释。
  1. 如果代码和数据库驻留在同一台服务器上,则为2层。如果代码和数据库驻留在不同的服务器上,则为3层。
  2. 具有数据库的Web应用程序至少具有3层架构。
  3. 这是2层架构。
此来源对2层的定义:
在2层架构中,Web服务器响应Web页面请求,数据库服务器提供后端数据存储。
此来源对多层的定义:
在3层架构中,Web服务器连接到中间层,通常包括执行特定任务的一系列应用程序服务器,以及现有企业系统的后端层。
希望有人能澄清这个问题。
1个回答

1
这取决于你在问题中对“层级”一词的理解。从基础设施/物理角度来看,在大多数 Web 应用程序中,你将有三个层次:

客户端(浏览器)<-->应用服务器<-->数据库。

与由两个层组成的大多数桌面应用程序相反:

客户端<-->数据库。

请注意,按照此定义,网站并不总是 3 层 - 例如,一个简单的计算复利的网站可能没有任何持久性。

在逻辑上,Web 应用程序架构本身通常具有抽象表示前述层次的层 - 例如,在 MVC 中,模型对应于数据库,控制器对应于在服务器上执行的逻辑,视图对应于呈现给客户端的内容。

因此,从基础设施上讲,你拥有一个三层架构(因为你显然处于第一种情况),但从你所描述的内容来看,你的网站本身可能不遵循严格的多层方法,并将多个逻辑层合并为一个。

请查看这个维基百科文章,它会进一步澄清事情。

更新:此帖子似乎也可以澄清问题。


1
那么,我可以得出结论,从基础设施的角度来看,任何带有数据库的网站都至少是三层架构,而仅显示信息的静态网站则是二层架构。 - vincentsty
关于分层(逻辑角度),MVC本身默认是三层架构。例如:以ASP.NET MVC为例,默认包含模型,视图和控制器,但仍在单个项目中,这意味着无法将模型、视图和控制器分别部署到不同的Web服务器上。因为我在源上读到过,只有当代码本身(bll、dal)被编写成可以部署到不同服务器的意义上时,才认为分层是有效的。 - vincentsty
你的第一个评论是正确的 - n层是关于物理层,大多数情况下由网络分割。关于你的第二个评论,如果你将每种类型的组件控制器/视图/模型视为实体,则可以将MVC视为层,或者像组件一样。MVC只是一种设计模式。它与层数没有关联。你在问题中提到了代码分离 - 这就是我在答案中涉及MVC主题的原因。这是物理层和逻辑组件/层之间的重要区别。 - Plamen Petrov
只有当代码本身(bll,dal)被编写成可以部署到不同服务器的意义时,才认为层叠是有效的。我也在尝试确定这一点,@vincentsty,你有什么结论吗? - Michael Hommé

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