写点什么

书评:实现模式

  • 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:382628
用户头像

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

关注

评论

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

给网站加个速,原来很简单!

sofiya

leetcode 637. Average of Levels in Binary Tree 二叉树的层平均值(简单)

okokabcd

LeetCode 数据结构与算法

和我一起入JavaScript

楠羽

JavaScript 笔记 知识 9月月更

给网站加个速,原来很简单

科技怪咖

降本增效两不误——云原生赋能航空业数字化转型

York

容器 云原生 数字化转型 开发运维 智慧航空

经验分享|企业搭建帮助中心步骤

Baklib

资深专家亮相华为云快成长直播间CDN专场,助力企业体验升级!

神奇视野

【云原生 | 从零开始学Docker】四、Docker镜像深度解析

泡泡

Docker 云计算 容器 云原生 9月月更

【云原生 | 从零开始学Docker】五、容器数据卷实战

泡泡

Docker 云计算 容器 云原生 9月月更

SaaS 产品该如何定价?

产品海豚湾

产品经理 SaaS 产品规划 9月月更 商业产品

元宇宙与泛娱乐的邂逅:次世代第一CP养成记

脑极体

《数字经济全景白皮书》新市民金融创新篇 重磅发布!

易观分析

金融 新市民服务

数字孪生智慧校园三维可视化管理系统解决方案

数据可视化平台

智慧校园 智慧学校 智慧校园解决方案 智慧校园管理系统 校园三维可视化

BNBChain NFTScan 与 SpaceID 达成合作,在浏览器内支持 .bnb 域名搜索!

NFT Research

区块链 域名 bnb

专家亮相华为云快成长直播间云安全专场,“未雨绸缪”化解数据风险

创意时空

跟着卷卷龙一起学Camera--Binder

卷卷龙

ISP 9月月更

C++学习---STL中nullptr_t的实现原理

桑榆

c++ 源码阅读 9月月更

谁来说说数据质量评估的标准是什么?

雨果

数据质量

企业在SaaS时代如何玩转帮助中心?

Baklib

企业做好知识管理的方法:文档管理

Baklib

MySQL 中的锁机制

月明风清

什么是访问控制列表ACL?

wljslmz

acl 访问控制列表 9月月更

易观分析:制造行业数字孪生AMC分析 ——数字孪生智能制造步入市场启动期,闭环验证能力待优化

易观分析

数字孪生 市场分析

数据仓库分层架构

阿泽🧸

数据仓库 9月月更

2022-09-15:Range模块是跟踪数字范围的模块。 设计一个数据结构来跟踪表示为 半开区间 的范围并查询它们。 半开区间 [left, right) 表示所有 left <= x < righ

福大大架构师每日一题

算法 rust 福大大

谁能说清楚数据资产管理与数据治理是什么关系?

雨果

数据治理

select多路选择

飞翔

Go

一文读懂,硬核 Apache DolphinScheduler3.0 源码解析

白鲸开源

源码阅读 Apache DolphinScheduler 工作流编排 大数据 开源 大数据调度

精讲数据归档分析 |Data Infra 研究社第四期

Databend

大数据 开源 活动预告 #开源 数据归档

【spring-kafka】@KafkaListener详解与使用

石臻臻的杂货铺

kafka 9月月更

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