Skip to Content
软件架构:核心挑战
book

软件架构:核心挑战

by Neal Ford, Mark Richards, Pramod Sadalage, Zhamak Dehghani
May 2025
Beginner to intermediate
462 pages
5h 45m
Chinese
O'Reilly Media, Inc.
Book available
Content preview from 软件架构:核心挑战

第 8 章 重复使用模式 重复使用模式

本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com

Wednesday, February 2, 15:15

随着开发团队成员着手拆分域服务, ,他们在如何处理所有共享代码和共享功能的问题上开始出现分歧。Taylen 对 Skyler 处理共享代码的做法感到不满,于是走到 Skyler 的办公桌前。

"你到底在干什么?"泰伦问道。

"斯凯勒回答说:"我要把所有的共享代码转移到一个新的工作区,这样我们就可以从中创建一个共享的 DLL。

"单个共享 DLL?"

"这就是我的计划,"斯凯勒说。"反正大多数服务都需要这些东西,所以我打算创建一个所有服务都能使用的单一 DLL。"

"泰伦说:"这是我听过的最糟糕的想法。"大家都知道,在分布式架构中应该有多个共享库!"

"我不这么认为,"希尼说。"在我看来,管理一个共享库 DLL 比管理几十个共享库 DLL 要容易得多。

"鉴于我是这个应用程序的技术负责人,我希望你能将该功能拆分成单独的共享库"。

"斯凯勒说:"好吧,好吧,如果你满意的话,我想我可以把所有的授权都移到单独的 DLL 中去。

"什么?"泰伦说。"授权代码必须是共享服务,你知道的--不是在共享库里。"

"不,"斯凯勒说。"这段代码应该放在共享的 DLL 中。

"那边在喊什么?"艾迪生问道。

"Taylen 希望将授权功能放在共享服务中。这太疯狂了。斯凯勒说:"我认为应该放在通用共享 DLL 中。

"不可能,"泰伦说。"它必须有自己独立的共享服务"。

"而且,"斯凯勒说,"泰伦坚持使用多个共享库来实现共享功能,而不是一个共享库。

"这样吧,"艾迪森说。"让我们来看看共享图书馆粒度的取舍,也来看看共享图书馆和共享服务之间的取舍,看看能否以更合理、更周到的方式解决这些问题。"

代码重用是软件开发的正常组成部分。常见的业务领域功能, ,如格式化器、计算器、验证器和审计,通常在多个组件中共享,常见的基础架构功能也是如此,如安全性、日志记录和指标收集。在大多数单体架构中,代码重用很少被考虑,只需简单地导入或自动注入共享类文件即可。然而,在分布式架构中,如图 8-1 所示,情况就变得复杂了,因为会出现如何处理共享功能的问题。

Code Reuse
图 8-1. 代码重用是分布式架构的一个难点

在高度分布式架构(如微服务和无服务器环境)中,架构师经常鼓吹 "重用就是滥用!"和 "什么都不共享!"等短语,试图减少这些类型架构中的共享代码量。人们甚至发现,这些环境中的架构师会对著名的DRY 原则(不要重复自己)提出相反的建议,他们会使用一个相反的缩写词 WET(Write every time 或 Write everything twice)。

虽然开发人员应尽量限制分布式架构中的代码重用量,但这是软件开发中的一个事实,必须加以解决,尤其是在分布式架构中。在本章中,我们将介绍在分布式架构中管理代码重用的几种技术,包括复制代码、共享库、共享服务和服务网格中的侧车。针对每种方案,我们还将讨论每种方法的利弊和权衡。

代码复制

代码复制中,共享代码被复制到每个服务 (或者更具体地说,每个服务的源代码库)中,如图 8-2 所示,从而完全避免了代码共享。虽然听起来有些疯狂,但这种技术在微服务早期很流行,当时人们对 ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

掌握API架构

掌握API架构

James Gough, Daniel Bryant, Matthew Auburn
SQL经典实例(第2版)

SQL经典实例(第2版)

Anthony Molinaro, Robert de Graaf

Publisher Resources

ISBN: 9798341656741