总体成本和简单性是分层架构风格的主要优势。分层体系结构本质上是单一的,不具有与分布式体系结构样式相关联的复杂性,简单易懂,而且构建和维护成本相对较低。然而,作为一个警告注意,这些评级开始迅速下降,因为整体分层体系结构变得更大,因此更加复杂。-软件架构的基本原理,\ Mark Richards,Neal Ford,第10章。“分层建筑风格”。
在“软件体系结构的基本原理”中,它们暗示分层体系结构风格本质上是单一的。
在我看来,这似乎是一种值得怀疑的说法:
我正在寻找引用权威来源支持的答案。
发布于 2023-03-25 10:54:46
我手边没有你引用的那本书,但从我通过googling可以找到的摘录中,我确信作者是在谈论具体的水平分层。
表示层/业务层/持久层/数据库层
以及将此作为其主要和唯一体系结构风格的软件体系结构。引文似乎是断章取义的。
因此,当我们添加缺失的上下文并提出相反的问题时,“是一种完全水平分层的体系结构,本质上是单一的”,那么答案显然是“是的”--当我们在一个应用程序系统中找到上述层时,它们中没有一个能单独映射到“用例”,它们通常需要一起工作来为用户创建有用的东西。但真正的问题是“独占”属性,它排除了“垂直层”,比如微观服务。
一旦您在体系结构中引入了其他结构元素,您很可能就离开了Richards和Ford所描述的领域--我猜这应该会回答您的问题:
发布于 2023-03-25 03:19:37
不是的。
我怎么知道?
现在,所有这些,层给你的能力,轻松地增长你的代码库。一旦它变得如此之大,一个人很难维持,那么就很难称它为微服务。但这并不是天生的铁板一块。那只是让它长出来。
发布于 2023-03-25 08:13:21
在应用程序中创建层的目的是相互分离技术责任。具有分层体系结构的应用程序通常具有表示层、服务层和数据访问层,但可能有更多。
当系统变得越来越大时,它们就变得很难维护。一个地方的变化可能会在另一个地方产生意想不到的后果。为了解决这一问题,可以将模块集成到系统架构中。系统中的每个模块负责特定的功能。在一个模块中,我们仍然需要相同的技术能力,因此我们可以再次应用分层来分离这些技术关注点。
当团队变得更大时,在同一个应用程序上工作就变得更加困难。为了部署新版本,所有模块都必须处于稳定状态。这减慢了释放周期。为了解决这个问题,人们发明了微服务,这样团队就可以分成几个较小的团队。
概括上:层次、模块和微服务解决了不同的问题。
作者在问题中引用了分层与“分布式体系结构”的比较。这意味着技术问题被分散到不同的服务中。
建立这样的系统不是个好主意。几个服务,可能由不同的团队维护,必须合作,以获得新的版本,为一个单一的新功能。
团队和微观服务更好地围绕单独的功能形成。这使得团队能够有自己的发布周期,并做出自己的技术决策。当然,将技术关注点划分为几个层次就是其中之一。
要回答这个问题:“分层架构风格本质上是单一的”。我想说的是:是的,任何使用层的应用程序(部分/微服务)都应该作为一个单一(单块)单元部署。
https://softwareengineering.stackexchange.com/questions/444682
复制相似问题