6

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

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

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

4

8 回答 8

7

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

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

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

于 2009-01-18T01:53:55.823 回答
5

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

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

于 2009-01-18T02:56:22.593 回答
4

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

参考

于 2009-01-18T01:54:47.443 回答
2

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

绝大多数 Web 应用程序默认为 3 层(浏览器、Web 服务器、数据库服务器)。大多数 Intranet 应用程序是 2 层(客户端、数据库服务器)。但无论哪种情况,我都会构建一个 UI 层、一个业务层和一个数据层。他们有关注点分离并帮助我构建我的代码以实现可维护性。同样在任何一种情况下,我通常最终都将它们全部部署在一个盒子上;Web 服务器或客户端工作站。所以层和层甚至不匹配。

于 2009-01-18T04:10:51.087 回答
0

我一直认为层是架构中的任何物理分离,也就是说,一台机器。我发现这些人最近也有同样的想法,这是一本非常好的书。

但在阅读了其他回复后,我深思熟虑,我同意 Garry 的观点

于 2009-01-18T01:53:54.577 回答
0

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

于 2009-01-18T05:41:23.057 回答
0

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

所以,跟进问题/评论。如果数据库中的存储过程中有一堆逻辑(业务或其他),是否也应该将其视为一个层?如果您正在使用 Microsoft SQL Server 的 Service Broker 等数据库引擎的功能怎么办?这可以被视为本身有两个层次。

此外,后台服务和/或守护程序,它们是单独的层和/或层还是属于现有的层?

于 2009-01-28T05:31:14.570 回答
0

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

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

于 2009-01-28T06:08:19.597 回答