写点什么

书评:实现模式

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

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

关注

评论

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

Java面试----2020年MyBatis常见实用面试题整理,字节跳动算法工程师面试

Java 程序员 后端

Java面试-final的内存语义,我就不信你还吃不透Java的泛型

Java 程序员 后端

JDK新特性——Stream代码简洁之道,spring视频教程在线观看

Java 程序员 后端

Java集合类中绝对占有一席之地的List,终于彻底把握了,零基础java入门教程

Java 程序员 后端

Java集合类之Collection接口,集合的“爸爸(1),算法竞赛入门经典java版

Java 程序员 后端

Java面试八股文中,常问的那些spring高频题目解析,网易架构师深入讲解Java开发

Java 程序员 后端

Jib使用小结(Maven插件版),Java程序员面试必备的知识点

Java 程序员 后端

JAVA设计模式类第一博主,用这份文档覆盖GOF研磨这23种设计模式

Java 程序员 后端

JNI开发之方法签名与Java通信(二),mongodb入门篇

Java 程序员 后端

Java面试题整理《基础篇》,java面试宝典pdf百度云

Java 程序员 后端

Java虚拟机学习集锦是我攒来的,但为你能过面试的心是真的!

Java 程序员 后端

Java虚拟机:Java内存区域及对象,java反射面试

Java 程序员 后端

java锁:第四章:读写锁,java框架ssh和ssm百度

Java 程序员 后端

Java面试很难?靠这份文档学习2个晚上拿到阿里,网易等大厂offer

Java 程序员 后端

Java面试通关要点汇总集,开发者必备的顶级Java开发工具

Java 程序员 后端

Jenkins用户权限管理-Role-based Authorization Strategy插件

Java 程序员 后端

Java虚拟机 —— 类的加载机制,linux操作系统实用教程第二版课后答案

Java 程序员 后端

Java进阶之深入理解Java的接口和抽象类,2021最新Java面试题目

Java 程序员 后端

JAVA面试——请记住这些,mybatis动态代理原理

Java 程序员 后端

Java面试知识点解析——JVM篇,分布式中间件技术实战

Java 程序员 后端

Java进阶之梯,成长路线与学习资料,助力突破中间件领域

Java 程序员 后端

Jenkins集群下的pipeline实战,kalilinux使用教程pdf

Java 程序员 后端

JMX客户端及对commons-pool的监控,java工程师面试视频

Java 程序员 后端

Java面试题原理和底层,java面试突击第二季

Java 程序员 后端

Java高级特性——注解,kafka消息队列的实现原理

Java 程序员 后端

JDK的前世今生:细数 Java5 - 15 的那些经典特性,java高级程序员的要求

Java 程序员 后端

java进阶篇02、注解、反射与动态代理,java教程视频免费

Java 程序员 后端

Java集合 —— Map集合,Java视频教程

Java 程序员 后端

Java集合类之Collection接口,集合的“爸爸,21条MySQL性能调优经验

Java 程序员 后端

Java面试题总结(乱序版,2020-08-20,面试总结+详细解答

Java 程序员 后端

java虚拟机,狂神mybatis笔记

Java 程序员 后端

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