且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《实现模式(修订版)》—第1章1.1节章节概览

更新时间:2022-09-17 08:40:45

本节书摘来自异步社区《实现模式(修订版)》一书中的第1章1.1节章节概览,作者【美】Kent Beck,更多章节内容可以访问云栖社区“异步社区”公众号查看。

第1章 引言
实现模式(修订版)
现在开始吧。你选中了我的书(现在它就是你的了),你也编写过代码,很可能你已经从自己的经验中建立了一套属于自己的风格。

这本书的目标是要帮助你通过代码表达自己的意图。首先,我们对编程和模式做一个概述(第2章~第4章)。接下来(第5章~第8章)用一系列短文和模式,讲述了“如何用Java编写出可读的代码”。如果你正在编写框架(而不是应用程序),最后一章会告诉你如何调整前面给出的建议。总而言之,本书关注的焦点是用编程技巧来增进沟通。

用代码来沟通有几个步骤。首先,必须在编程时保持清醒。第一次开始记录实现模式时,我编程已经有一些年头了。我惊讶地发现,尽管能够快捷流畅地作出各种编程中的决定,但我没法解释自己为什么如此确定诸如“这个方法为什么应该被这样调用”或者“那块代码为什么属于那个对象”之类的事情。迈向沟通的第一步就是让自己慢下来,弄明白自己究竟想了些什么,不再假装自己是在凭本能编程。

第二步是要承认他人的重要性。我很早就发现编程是一件令人满足的事,但我是个以自我为中心的人,所以必须学会相信其他人也跟我一样重要,然后才能写出能与他人沟通的代码。编程很少会是一个人与一台机器之间孤独的交流,我们应该学会关心其他人,而这需要练习。

所以我迈出了第三步。一旦把自己的想法暴露在光天化日下,并且承认别人也有权和我一样地存在,我就必须实实在在地展示自己的新观点了。我使用本书中介绍的实现模式,目的是更有意识地编程,为他人编程,而不仅仅是为自己编程。

你当然可以仅为其中的技术内容——有用的技巧和解释——而阅读本书,但我认为应该预先提醒你,除了这些技术内容,本书还包含了很多东西,至少对我而言是这样。

这些技术内容都可以在介绍模式的章节里找到。学习这部分内容有一个高效的策略:需要用的时候再去读。如果用这种“just-in-time”的方式来读,那么可以直接跳到第5章,把后续的章节快速扫一遍,然后在编程时把本书放在手边。用过书中的很多模式之后,你可以重新回到前面介绍性的内容中来,读一下那些技巧背后的道理。如果有兴趣透彻理解手上的这本书,也可以细细地从头读到尾。和我写过的大部分书不同,这本书的每一章都相当长,因此在阅读时要保持专注才行。

书中的大部分内容都以模式的形式加以组织。编程中需要做的抉择大多曾经出现过。一个程序员的职业生涯中可能要给上百万个变量命名,不可能每次都用全新的方式来命名。命名的普遍约束总是一致的:需要把变量的用途、类型和生命周期告诉给阅读者,需要挑选一个容易读懂的名字,需要挑选一个容易写、符合标准格式的名字。把这些普遍约束加诸一个具体的变量之上,然后就得到了一个合用的名字。“给变量命名”就是一个模式:尽管每次都可能创造出不同的名字,但决策的方法和约束条件总是重复出现的。

我觉得,模式需要以多种形式来呈现,有时一篇充满争议的文章能***地阐释一个模式,有时候是一幅图,有时候是一个故事,有时候是一段示例。所以我并没有尝试把所有模式都塞进同一种死板的格式里,而是以我认为最恰当的方式来描述它们。

书中总共包含了77个明确命名的模式,它们分别涵盖了“编写可读的代码”这件事的某一方面。此外我还在书中提到了很多更小的模式或是模式的变体。我写这本书的目的是给程序员们一点建议,告诉他们如何在每天最平凡的编程任务中帮助将来的阅读者理解代码的意图。

本书的深度应该介于Design Patterns(中译版《设计模式:可复用面向对象软件的基础》)和Java语言手册之间。Design Patterns讨论的是开发过程中每天要做几次的那种决策,通常是关于如何协调对象之间交互的决策,实现模式的粒度更小。编程时每过几秒钟就可能用上一个模式。语言手册很好地介绍了“能用Java做什么”,但对于“为什么使用某种结构”或者“别人读到这段代码时会怎么想”这样的问题谈论甚少,而这正是实现模式的重点所在。

在写这本书时,我的一个原则就是只写我熟悉的主题。比如说并发(concurrency)问题就没有涵盖在这些实现模式中,并非因为并发不重要,只是因为我对这个主题没有太多可说的。我对待并发问题的策略一向很简单:尽可能地把涉及并发的部分从我的程序中隔离出去。虽然我一直用这个办法还干得不错,但这确实没有多少可解释的。更多关于并发处理的实践指导,我推荐诸如Java Concurrency in Practice(中译版《Java并发编程实践》)之类的书籍。

本书完全没有涉及的另一个主题是软件过程。我给出的建议只是告诉阅读者如何用代码来交流,不管这代码是在一个漫长流程的最后阶段编写出来的,还是在编写出一个无法通过的测试之后立即编写出来的,我希望这些建议都同样适用。总而言之,不管冠以怎样的名目,只要能降低软件开发的成本就是好事。

此外本书也尽量避免使用Java的最新特性。我在选择技术时总是倾向于保守,因为无所不用其极地尝试新技术已经伤害过我太多次了(作为学习新技术的策略,这很好;但对于大部分开发工作而言,风险太大)。所以,你会在本书中看到一个非常朴实的Java子集。如果希望使用Java的最新特性,可以从别的地方去学习它们。

1.1 章节概览
本书总共分成了7大块,如图1.1所示,分别是:

总体介绍(Introduction)——这几个简短的章节描述了“用代码沟通”的重要性与价值所在,以及实现模式背后的思想;
类(Class)——这部分的模式讲述了为什么要创建类,如何创建类,如何用类来书写逻辑等问题;
状态(State)——关于状态存取的模式;
行为(Behavior)——这部分的模式告诉阅读者如何用代码来表现逻辑,特别是如何用多种不同的方式来做这件事;
方法(Methods)——关于如何编写方法的模式,它们将告诉你,根据你对方法的分解和命名,阅读者会作出怎样的判断;
容器(Collections)——关于选择和使用容器的模式;
改进框架(Frameworks)——上述模式的变体,适用于框架开发(而非应用程序开发)。


《实现模式(修订版)》—第1章1.1节章节概览