【AICon】探索八个行业创新案例,教你在教育、金融、医疗、法律等领域实践大模型技术! >>> 了解详情
写点什么

书评:实现模式

  • 2007-11-08
  • 本文字数:1878 字

    阅读完需:约 6 分钟

Kent Beck 的新书《实现模式》是一本关于如何撰写 Java 代码的书。本书中的模式,是基于 Kent 对现存代码的阅读以及他自己的编程习惯而形成的。这些模式来自他早年使用 Smalltalk 模式通过代码与其他开发人员进行沟通的过程。它们的级别相对设计模式较低,与 Larman 提出的 GRASP 模式处于同一粒度。本书中的模式试图为如何撰写大家都能看得懂的代码提供一个清晰明确的视角,并告诉你这些代码如何为人的需要和降低成本的需求提供保障。

编程的理论

当然,什么样的代码才是好的代码——更不用说伟大的代码了——这一点所有的开发人员都无法达成一致意见。Kent 提出了他的编程理论作为辨识代码的基础。 作为介绍性章节,第一章介绍了本书的目标,第二章对模式进行了阐述。在本书的第三章中,Kent 描述了在编程中两个具有横切面性质的关注点:价值观与原 则。

价值观是编程过程的统一支配性主题。当我工作状态尚佳的时候,我珍视与其他人沟通的重要性,去除我的代码中多余的复杂性,并保持开放的心态。这些价值观——沟通、简单和灵活——让我在编程时所做的每个决策都充满了丰富的色彩。 此处描述的原则不像上面的价值观那样普及和意义深远,不过每一项原则都被许多模式所表达。价值观,一般都是通用性非常强的,难以直接应用;模式虽可以直接 应用,却是针对特定情景的;原则在价值观和模式之间搭建了桥梁……在面对不确定性的时候,对原则的理解让我可以“做出一些补偿”来与我其他的实践保持一 致,而且结果也很不错。

Kent 接下来详细讨论了价值观和原则。本书中的模式都会回头参考到价值观和原则——它们可以帮助开发人员理解每个模式是如何帮助达成更大的目标的。

这些价值观是:

  1. 沟通(Communication)
  2. 简单(Simplicity)
  3. 灵活(Flexibility)

这些原则是:

  1. 局部效应(Local consequences)
  2. 最小化重复(Minimize repetition)
  3. 将逻辑与数据放在一起(Logic and Data together)
  4. 保持对称性(Symmetry)
  5. 声明式的表达式(Declarative Expression)
  6. 改变指数(Rate of Change)

本章接下来的一章,是关于激励——主要是经济激励——驱动软件开发的激励的。简而言之,我们把大部分的时间都耗费在了软件维护上面。变化的成本是下面这些因素的总和,依次是:理解代码、变更代码、测试代码,最终是发布代码。

模式

本书中的模式是以散文形式写就的,涵盖的内容从何时应该在类中创建一个数据字段开始,到判等方法(equality method),再到子类化过程,全部包括在内。这些模式被分类到不同的章节,包括:

  1. 类:关于如何创建类和接口的模式。
  2. 状态:关于数据的模式。
  3. 行为:关于驻留在类之内但并非必须如此的功能的模式
  4. 方法:关于类中不同类型方法的模式
  5. 集合:关于聚合数据的模式
  6. 框架:关于构建一个框架的不同方面考量的模式

下面是一些模式的例子:(Kent 表述它们的方式要比这些略述优雅得多)

  • 来自“类”模式:
    • 超类名称要简单:对命名这一编码行为,是要保持简洁和还是要保证表义性方面一直存在争论。Kent 讨论了如何为超类起一个好名字。
    • 子类名称要合格:对子类的命名会表述出其与超类之间的相似和差异之处。由于超类不会像子类那样被频繁引用,对子类的命名就不必考虑太多简洁的因素。
  • 来自“状态”模式:
    • 直接访问:形如 x=10 这样的表达式是非常清晰和简洁的。但是太多类似表达式会让代码变得凌乱。
    • 延迟初始化:如果初始化成本过高,有时推迟初始化的过程是很有用的。
  • 来自“方法”模式:
    • 组合方法(Composed method):方法中调用其他方法,而且这些被调用的方法基本上处于同样的抽象层次。
    • 判等方法(Equality method):为正确的相等方式一起定义 equals() 和 hashcode() 方法。

结语

Kent 以优雅简洁的方式为我们分享了他的经验(全书加附录共 156 页)。他并没有制定规则,而是给出了价值观、原则和经验之菁华(rules of thumb):

没有统一的法则。程序员需要思考、沟通和学习。这是敬业精神的一部分。

本书对于初级和高级开发者同样很有帮助——每个人都能获得不同的收获。刚进入软件开发领域的新人们能够通过当今最富才华开发人员之一的眼睛来看待开发工 作。其他有较多经验的人们可以反思他们获得成功的一些实践,通过聚焦于成功的原因,这些实践呈现出了不同的意义。最终,将价值观、原则(特别是价值观)和 软件开发捆绑在一起,让一切都变得不同了——当然是以一种非常好的方式。

查看英文原文: Book Review: Implementation Patterns


译者简介:郑柯,目前任职《程序员》杂志社高级编辑,有志于在中国的软件开发业界推广 Agile 的理念和方法论,笃信以人为本,关注 Ruby,关注敏捷,关注人。参与 InfoQ 中文站内容建设,请邮件至 china-editorial@infoq.com

2007-11-08 06:382215
用户头像

发布了 479 篇内容, 共 152.5 次阅读, 收获喜欢 47 次。

关注

评论

发布
暂无评论
发现更多内容

精选2021年大厂高频Java面试真题集锦(含答案),面试一路开挂

热爱java的分享家

Java 架构 面试 程序人生 经验分享

网络安全是一门高级学科,如何入门,看这里!

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

六年Java老鸟,写给1-3年程序员的几点建议,满满硬货指导

热爱java的分享家

Java 架构 面试 程序人生 编程语言

GitHub标星139K的:“嵌入式Linux系统开发教程”

热爱java的分享家

Java 架构 程序人生 编程语言 经验分享

质量基础设施“一站式”平台,NQI一站式云平台开发

电微13828808271

系统架构性能优化思路

五分钟学大数据

11月日更

Hadoop 企业级生产调优手册 (二)

大数据技术指南

11月日更

深入了解Netty原理篇

邱学喆

Netty

“退微信群”谣言背后:总有人用阴谋论湮没常识

脑极体

Go语言学习查缺补漏ing Day9

Regan Yue

Go 语言 11月日更

Python 可以满足你任何 API 使用需求

华为云开发者联盟

Python API 程序 网络通信 公共数据

微博评论高性能高可用的设计

云里雾花

为什么要做漏洞扫描呢?

华为云开发者联盟

安全 风险 漏洞 漏洞扫描 安全认证

46道史上最全Redis面试题,面试官能问的都被我找到了(含答案)

热爱java的分享家

Java 架构 程序人生 编程语言 经验分享

react源码解析2.react的设计理念

buchila11

React React Hooks

不愧是阿里p8大佬!终于把Java 虚拟机底层原理讲清楚了,请签收

热爱java的分享家

Java 面试 程序人生 编程语言 经验分享

基于实践:一套百万消息量小规模IM系统技术要点总结

JackJiang

网络编程 架构设计 即时通讯 IM

模块六作业

bob

「架构实战营」

智慧警务系统开发,警务通app搭建

电微13828808271

五面阿里拿下飞猪事业部offer,2021新鲜出炉阿里巴巴面试真题

热爱java的分享家

Java 面试 程序人生 编程语言 经验分享

大专毕业的我狂刷29天“阿里内部面试笔记”最终直接斩获十七个Offer

热爱java的分享家

Java 面试 程序人生 编程语言 经验分享

掌握这些核心算法,拿不到10个offer你来找我,我锤你个不争气的

热爱java的分享家

Java 架构 程序人生 编程语言 经验分享

数据网格简史

俞凡

架构 数据

5年crud经验,三个月啃透888页Java王者级核心宝典,竟翻身阿里p6

热爱java的分享家

Java 架构 程序人生 编程语言 经验分享

比较 Flutter 日期选择器库【Flutter专题6】

坚果

flutter 签约计划第二季

Vue前端开发规范

CRMEB

技术解析+代码实战,带你入门华为云政务区块链平台

华为云开发者联盟

区块链 华为云 政务 Baas 异构链

DDD与CQRS的关系

Bruce Talk

领域驱动设计 DDD

Alibaba5轮视频面:同事+组长+主管+项目+HR,收割Java岗offer

热爱java的分享家

Java 面试 程序人生 编程语言 经验分享

写代码的思路

king

Flutter 中的一切都是一个小部件【Flutter专题5】

坚果

flutter 签约计划第二季

书评:实现模式_Java_Amr Elssamadisy_InfoQ精选文章