Skip to Content
强大的 Python
book

强大的 Python

by Patrick Viafore
May 2025
Intermediate to advanced
380 pages
4h 39m
Chinese
O'Reilly Media, Inc.
Content preview from 强大的 Python

第 16 章 依赖关系 依赖关系

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

要编写一个没有依赖关系的程序是很困难的。 函数依赖于其他函数,模块依赖于其他模块,程序依赖于其他程序。 体系结构是分形的;无论从哪个层次来看,你的代码都可以表示为某种方框箭头图,如图 16-1。不管是函数、类、模块、程序还是系统,都可以绘制与图 16-1类似的图来表示代码中的依赖关系。

Box-and-arrows diagram
图 16-1. 方框箭头图

但是,如果不积极管理依赖关系,,很快就会出现所谓的 "意大利面条代码",使方框箭头图看起来像图 16-2

A tangled mess of dependencies
图 16-2. 错综复杂的依赖关系

在本章中,你将了解有关依赖关系的所有知识,以及如何对其进行控制。你将了解不同类型的依赖关系,所有这些关系都应使用不同的技术进行管理。你将学习如何绘制依赖关系图,以及如何解释你是否拥有一个健康的系统。您还将学习如何真正简化代码架构,这将有助于您管理复杂性并提高代码库的健壮性。

关系

从本质上讲,依赖关系是一种关系。 当一段代码需要另一段代码以某种特定方式执行时,我们称之为依赖关系。使用依赖关系通常是为了以某种方式重用代码。函数调用其他函数来重用行为。模块导入其他模块以重用该模块中定义的类型和函数。在大多数代码库中,从头开始编写所有代码是没有意义的。重复使用代码库中的其他部分,甚至是其他组织的代码,都会带来巨大的好处。

重复使用代码可以节省时间。你不必浪费精力编写代码,只需调用或导入你需要的功能即可。此外,您所依赖的任何代码都可能在其他地方使用过。这意味着已经进行了一定程度的测试,从而减少了错误的数量。如果代码易于阅读,还能获得加分。 正如Linus 法则Linus's Law,Linux 的创造者 Linus Torvalds)所说:1

"只要有足够的眼球,所有的虫子都是肤浅的"

换句话说,因为有这么多人在看代码,所以发现错误的可能性会更高。这也是有利于可读性和可维护性的另一点。如果你的代码具有可读性,其他开发人员就会更容易发现并修复其中的错误,从而帮助你提高代码的健壮性。

但有一个问题。说到依赖关系,天下没有免费的午餐。 您创建的每一个依赖关系都会造成耦合,或将两个实体绑在一起。如果依赖关系以不兼容的方式发生变化,你的代码也需要随之改变。如果这种情况经常发生,你的健壮性就会受到影响;当你的依赖关系发生变化时,你就会不断地挣扎以保持不被淘汰。

依赖关系中还有人为因素。 你所依赖的每一段代码都是由一个活生生的人维护的(甚至可能是一群人)。这些维护者有他们自己的日程安排、截止日期,以及他们对所开发代码的愿景。这些很可能与你的时间表、截止日期和愿景不一致。一段代码被重复使用的次数越多,它就越不可能满足每个用户的所有需求。当你的依赖关系与你的实现出现分歧时,你要么忍受困难,要么选择其他依赖关系(可能是你能控制的),要么将其分叉(自己维护)。你的选择取决于你的具体情况,但在每种情况下,健壮性都会受到影响。

任何一个在 2016 年工作过的 JavaScript ...

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.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

Mächtiges Python

Mächtiges Python

Aaron Maxwell

Publisher Resources

ISBN: 9798341658127