Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Architecture n-tier对您意味着什么?_Architecture_N Tier Architecture - Fatal编程技术网

Architecture n-tier对您意味着什么?

Architecture n-tier对您意味着什么?,architecture,n-tier-architecture,Architecture,N Tier Architecture,多年来,我注意到不同的开发人员在n层系统的开发中对什么构成层有不同的标准,所以我很好奇stackoverflow的共识是什么 单独的逻辑层是否足以将其称为单独的层,或者必须在单独的服务器(物理或虚拟)上部署才能将其称为单独的层 让我换一种说法来回答这个问题。如果调用机制只能是进程中的、线程本地的或单元本地的,那么根据类如何组织到库或包中,是否可以声称它是两个不同的层?我一直认为层是体系结构中的任何物理分离,也就是说,一台机器。我发现最近男人们也这么想,这是一本非常好的书 但是,在阅读了其他回答后

多年来,我注意到不同的开发人员在n层系统的开发中对什么构成层有不同的标准,所以我很好奇stackoverflow的共识是什么

单独的逻辑层是否足以将其称为单独的层,或者必须在单独的服务器(物理或虚拟)上部署才能将其称为单独的层


让我换一种说法来回答这个问题。如果调用机制只能是进程中的、线程本地的或单元本地的,那么根据类如何组织到库或包中,是否可以声称它是两个不同的层?

我一直认为层是体系结构中的任何物理分离,也就是说,一台机器。我发现最近男人们也这么想,这是一本非常好的书


但是,在阅读了其他回答后,我同意Garry的看法。

一个单独的逻辑层足以让我称之为层。它不一定要在一个单独的服务器上,但是定义的与其他层的分离确实使它成为可能

例如,我们曾经在一台服务器上运行我称之为三层系统(db、dll、asp页面)。根据某些定义,这是一个单层系统。我们现在有一个单独的服务器上运行的数据库,唯一需要的更改是一个连接字符串,但现在这将是一个两层的解决方案

这就是为什么我觉得层的概念更多的是关于在不同的机器上运行它们的能力,而不是实际上必须这样做。对我来说,这似乎更为一致

层和层的概念是 经常互换使用。然而, 一个相当普遍的观点是 确实存在差异,并且 层是一种逻辑结构 构成要素的机制 升级软件解决方案,同时升级一层 是一种物理结构机制 对于系统基础设施


.

对我来说,物理层是指系统的一部分,设计用于在不同的物理机器上运行。是的,您可以随时将您的db连接字符串指向另一台服务器,但是如果您的DAL太过健谈,存在n+1和无限记录集问题,那么网络延迟将很快杀死您


另一方面,逻辑层支持关注点分离、内聚和耦合的优点。严格地说,它甚至不必在单独的程序集中-命名空间就可以了。只是不要调用您知道不应该调用的类,而是独立帮助您。

层是一种最小化耦合的机制;它们是合乎逻辑的。分层旨在最大限度地提高性能或消除安全风险;他们是身体上的。它们真的不一样,我不知道为什么人们试图互换使用它们


绝大多数web应用程序默认为3层(浏览器、web服务器、数据库服务器)。大多数intranet应用程序是两层(客户端、db服务器)。但无论哪种情况,我都构建了一个UI层、一个业务层和一个数据层。它们将关注点分离,并帮助我构建代码的可维护性。同样,在这两种情况下,我通常都会在一个盒子上部署它们;web服务器或客户端工作站。因此层和层甚至不匹配。

我同意Garry Shutler的观点,但补充一点,在单个进程/线程或甚至同一个程序集中也可能存在许多层。比物理(硬件、可执行隔离或二进制隔离)隔离更重要的是开发人员的代码布局(IMHO)。与aspnet应用程序一样:同一个dll可能包含所有三层:数据访问层、域和表示层。

我不得不说,定义需要敲定。我通常认为层是功能和责任的逻辑分离,层是物理分离的需求或能力。有些层可能有多个层,有些层可能跨层。我通常使用一个服务层,该层能够在必要和/或需要时通过配置提供物理分离

因此,跟进问题/评论。如果您的数据库中的存储过程中有一组逻辑(业务或其他),那么是否也应将其视为一个层?如果您正在利用数据库引擎的功能,如ServiceBroker for Microsoft SQL Server,该怎么办?这可以看作是有两个层次


另外,后台服务和/或守护进程是独立的层和/或层还是属于现有层?

请查看计算中术语“层”的历史。没有人说在台式机/微型机/大型机上使用1层计算。在客户机-服务器时代,没有人说是两层计算。3层成为客户机-服务器加中间中间件(面向消息的中间件和事务代理)的体系结构绰号。我认为n-tier是随着另一个术语“EAI-或企业架构集成”而普及的。这与面向服务的体系结构的想法完全相同,只是大多数供应商的实现要么是专有的,基于标准的,但非常昂贵,要么两者兼而有之。在XML-RPC、SOAP和REST出现之后,他们将其称为“Web服务”,然后应用其背后的EAI原则,形成面向SOA的体系结构和企业服务总线


我的观点是,这些术语都没有暗示任何物理分离。。。它总是关于功能的逻辑分离。碰巧的是,这些逻辑应用程序层中有许多被设计成无状态的,因此它们可以物理上分离,以实现水平可伸缩性

没错,我相信这是一个可扩展性的问题。你设计了一个可扩展的层,但你不需要立即扩展。很好的分解。简洁明了。可能重复的