写点什么

书评:实现模式

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

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

关注

评论

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

凡人歌:平凡公司的技术面试

iofomo

生活 职业成长 #面试

Java音视频文件解析工具

江南一点雨

如何重置docker中的mariadb的root

百度搜索:蓝易云

IJ中PHP环境的搭建和使用教程

百度搜索:蓝易云

从数据仓库到数据中台再到数据飞轮:金融行业的数据技术进化史

桃花键神

金融行业中如何利用数据中台的数据来有效的驱动业务决策呢?

桃花键神

人工智能(大模型)工程师中级课程,正式开始报名!

雅菲奥朗

人工智能 AI AIGC 人工智能工程师 人工智能工程师培训

linux下可用的清理工具BleachBit

百度搜索:蓝易云

Linux中的comm命令及示例

百度搜索:蓝易云

【Paper Reading】结合 NanoFlow 研究,优化大语言模型服务效率的探索

阿里云大数据AI技术

人工智能 大语言模型 NanoFlow

MES系统助力塑料制品行业数字化转型

万界星空科技

制造业 mes 万界星空科技 注塑行业 塑料制品行业

macOS Ventura 13.7 (22H123) 正式版发布,ISO、IPSW、PKG 下载

sysin

macos ventura

C基础-操作符详解

百度搜索:蓝易云

MES系统与其他系统的集成:提升制造业智能化的关键路径

万界星空科技

数字化转型 系统集成 ERP mes 智能制造业

FinOps三人行:共话FinOps云成本管理与AI的未来在线分享(文字+视频)

雅菲奥朗

FinOps AIGC 云成本管理 云财务管理 FinOps认证

ROS 编程入门的介绍

芯动大师

ROS

Docker实战:docker compose搭建Rocketmq

百度搜索:蓝易云

在Docker中运行PostgreSQL数据库

百度搜索:蓝易云

linux下可用的清理工具BleachBit

百度搜索:蓝易云

企业级即时通讯平台有哪些?探究适合企业使用的即时通讯工具

WorkPlus

免备案服务器怎么选

百度搜索:蓝易云

数据中台进化为数据飞轮的必要

桃花键神

即时通讯平台是什么?

WorkPlus

什么是即时通讯平台

WorkPlus

有哪些好用的企业级即时通讯平台推荐

WorkPlus

云开发让 Unity 微信小游戏实时聊起来

蛋先生DX

腾讯云 Unity 云开发 实时聊天 微信小游戏

我一进门就看见 AI 在啪啪啪狂敲代码

江南一点雨

IM即时通讯软件,WorkPlus助力企业高效协作的企业级即时通讯系统

WorkPlus

为什么全球顶尖银行纷纷选择与华为合作?

脑极体

AI

来重庆工作2年,想念广东了

程序员晚枫

程序员

docker和podman的区别

百度搜索:蓝易云

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