什么是N层架构?

最近我看到了不less开发人员的招聘信息,其中包括一句或多或less这样的句子:“必须具有N层体系结构的经验”,或者“必须能够开发N层应用程序”。

这让我问,什么是N层架构? 如何获得经验呢?

维基百科 :

在软件工程中,多层体系结构(通常称为n层体系结构)是一种客户机 – 服务器体系结构,其中,演示文稿,应用程序处理和数据pipe理在逻辑上是分离的过程。 例如,使用中间件来为用户和数据库之间的数据请求提供服务的应用程序采用多层体系结构。 “多层架构”最广泛的使用是指三层架构。

什么是“层级”是有争议的,但在我看来,它至less需要跨越stream程边界。 否则就是所谓的图层。 但是,它不需要在物理上不同的机器上。 虽然我不推荐,但可以将逻辑层和数据库托pipe在同一个框中。

替代文字

编辑 :其中一个含义是,表示层和逻辑层(有时称为业务逻辑层)需要跨越“有线”机器边界,有时通过不可靠,缓慢和/或不安全的networking。 这与简单的桌面应用程序非常不同,在该应用程序中,数据与文件或Web应用程序位于同一台计算机上,您可以直接访问数据库。

对于n层编程,您需要将数据打包成某种可移动的forms,称为“数据集”,然后通过networking传播。 .NET的DataSet类或Web服务协议(如SOAP)很less有这样的尝试,通过电线飞行的对象。

它的基础是如何将表示层与核心业务逻辑和数据访问分开( Wikipedia )

3层意味着表示层+组件层+数据访问层。 N层是在不必要的图层被添加超过这三个时,它被贴上stream行语,所以它似乎不像你的build筑师是一群破解猴子。 我说这是基于我必须使用的N层体系结构。

这是一个stream行词,指像正常的Web架构,例如Javascript – ASP.Net – 中间件 – 数据库层。 这些东西都是一个“层”。

如果我明白了这个问题,那么在我看来,提问者真的在问“好吧,所以三层层面是很好理解的,但是在四层层面上似乎混杂着炒作,混乱和不确定性,或者泛化,N层体系结构意味着什么,所以被广泛理解和认同的N层定义是什么?

这实际上是一个相当深的问题,为了解释为什么,我需要深入一点。 忍受着我。

经典的三层架构:数据库,“业务逻辑”和表示,是澄清如何遵守关注点分离原则的好方法。 也就是说,如果我想改变“业务”如何服务客户,我不应该通过整个系统来研究如何做到这一点,特别是决策业务问题不应该分散通过代码很好。

现在,这种模式已经运行了好几十年了,它是经典的“客户 – 服务器”模型。 快速转向云产品,其中Web浏览器是广泛和物理上分布的一组用户的用户界面,并且通常最终不得不添加内容分发服务,这不是经典三层架构的一部分(并且需要自行pipe理)。

当涉及到服务,微服务,数据和计算如何分布等概念时,这个概念就会泛化。 无论是否是“层”,很大程度上取决于该层是否向层之后(或之下)的服务提供接口和部署模型。 所以一个内容分发networking将是一个层次,但是一个authentication服务不会。

现在,阅读关于这个概念的N层架构示例的其他描述,您将开始理解这个问题。 其他观点包括基于供应商的方法(例如NGINX),内容感知负载平衡器,数据隔离和安全服务(例如IBM Datapower),所有这些都可能会增加给定体系结构,部署和用例的价值。

N层数据应用程序是分为多层的数据应用程序。 也称为“分布式应用程序”和“多层应用程序”,n层应用程序将处理分成分散在客户端和服务器之间的分层。 开发访问数据的应用程序时,应该在组成应用程序的各个层之间有一个明确的分隔。

依此类推http://msdn.microsoft.com/en-us/library/bb384398.aspx

N层数据应用程序是分为多层的数据应用程序。 也称为“分布式应用程序”和“多层应用程序”,n层应用程序将处理分成分散在客户端和服务器之间的分层。 开发访问数据的应用程序时,应该在组成应用程序的各个层之间有一个明确的分隔。

典型的n层应用程序包括表示层,中间层和数据层。 分离n层应用程序中各层的最简单方法是为要包含在应用程序中的每个层创build离散项目。 例如,表示层可能是Windows窗体应用程序,而数据访问逻辑可能是位于中间层的类库。 另外,表示层可以通过诸如服务之类的服务与中间层中的数据访问逻辑通信。 将应用程序组件分成不同的层次增加了应用程序的可维护性和可伸缩性。 它通过使更容易采用可应用于单层的新技术而无需重新devise整个解决scheme。 另外,n层应用程序通常将敏感信息存储在中间层中,从而与表示层保持隔离。

采取从微软网站 。

我的理解是,N-Tier使用单独的物理机器将业务逻辑,客户端访问和数据彼此分开。 理论是,其中一个可以独立于其他更新。

当我们谈论层时,我们通常谈论物理过程(具有不同的存储空间)。

因此,如果一个应用程序的层被部署在不同的进程中,那么这些不同的进程将会是不同的层次。

例如,在三层应用程序中,业务层与大型机(单独进程)进行对话并与报告服务(单独进程)进行对话,则该应用程序将是五层。

因此,通用名称是n层。

当构build通常的MCV (三层体系结构)时,可以决定使用双层接口来实现MCV,以便实际上可以replace特定的层而不必修改一行代码。

我们经常看到这个好处 ,例如在你想要使用多个数据库的情况下(在这种情况下,你在控制层和数据层之间有一个双重接口)。

当你把它放在View层上时,你可以用另一台机器代替USER接口,从而实现REALinput(!!!)的自动化,从而可以运行繁琐的可用性testing。没有任何用户不得不点击并重新点击并重新重新点击相同的东西一遍又一遍。

一些人将这种3层架构描述为1或2个双接口作为4层5层架构,隐含地暗示了双接口。

其他情况包括(但不限于)您 – 在半或全部复制的数据库系统的情况下实际上能够将其中一个数据库视为“主”,因此您将拥有一个层包括主数据库和另一个由从数据库组成。

移动示例

因此,多层(或N层 )实际上有一些解释,但我肯定会坚持三层+包含精简接口磁盘组成的额外层,以实现所述层交换,并且就testing(尤其是在移动设备上使用),现在可以通过模拟用户以控制逻辑无法区分的方式和真实的用户点击模式,在真实的软件上运行用户testing。 在模拟真实用户testing时 ,这几乎是最重要的,因为您可以logging来自用户OTA的所有input,然后在进行回归testing时重新使用相同的input。