InfoQ

文章

书评:实现模式

作者 Amr Elssamadisy译者 郑柯 发布于 2007年11月8日 上午6时38分

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

编程的理论

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

相关厂商内容

书评:敏捷模式──指向成功的路标

IBM 敏捷开发 Rational 工具篇

SOY Framework:Java富客户端快速开发框架

IDC:《软件商成长路线图》白皮书免费下载

免费迷你书下载:硝烟中的Scrum和XP

相关赞助商

InfoQ中文站敏捷社区,关注敏捷软件开发和项目管理,通过新闻、深度文章、视频访谈和演讲以及迷你书等为中国技术社区提供一流资讯。
价值观是编程过程的统一支配性主题。当我工作状态尚佳的时候,我珍视与其他人沟通的重要性,去除我的代码中多余的复杂性,并保持开放的心态。这些价值观——沟通、简单和灵活——让我在编程时所做的每个决策都充满了丰富的色彩。

 此处描述的原则不像上面的价值观那样普及和意义深远,不过每一项原则都被许多模式所表达。价值观,一般都是通用性非常强的,难以直接应用;模式虽可以直接 应用,却是针对特定情景的;原则在价值观和模式之间搭建了桥梁……在面对不确定性的时候,对原则的理解让我可以“做出一些补偿”来与我其他的实践保持一 致,而且结果也很不错。

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

11 条回复

回复

好书 发表人 shxiao ma 发表于 2007年11月8日 下午8时45分
Re: 好书 发表人 凉粉 小刀 发表于 2007年11月8日 下午8时47分
Re: 好书 发表人 霍 泰稳 发表于 2007年11月8日 下午8时57分
这本书人民邮电出版社已经引进了 发表人 图灵 刘江 发表于 2007年11月8日 下午9时13分
Re: 这本书人民邮电出版社已经引进了 发表人 Necromancer B 发表于 2007年11月8日 下午9时46分
Re: 这本书人民邮电出版社已经引进了 发表人 凉粉 小刀 发表于 2007年11月9日 上午12时45分
Re: 这本书人民邮电出版社已经引进了 发表人 avatar blogbin 发表于 2007年11月11日 上午7时14分
Re: 这本书人民邮电出版社已经引进了 发表人 Lorin huang 发表于 2007年11月12日 上午7时48分
Re: 这本书人民邮电出版社已经引进了 发表人 shxiao ma 发表于 2007年11月11日 下午7时42分
关于POSA 4和5 发表人 图灵 刘江 发表于 2007年11月21日 上午2时46分
希望引进原版 发表人 Hantsy Bai 发表于 2007年11月13日 下午7时11分
  1. 返回顶部

    好书

    2007年11月8日 下午8时45分 发表人 shxiao ma

    国内不知道要到什么时候才能出版呀!

  2. 返回顶部

    Re: 好书

    2007年11月8日 下午8时47分 发表人 凉粉 小刀

    这个确实是个好问题……

  3. 返回顶部

    Re: 好书

    2007年11月8日 下午8时57分 发表人 霍 泰稳

    确实是本好书,马上给相关的出版社推荐,看有没有愿意引进的。

  4. 返回顶部

    这本书人民邮电出版社已经引进了

    2007年11月8日 下午9时13分 发表人 图灵 刘江

    预计会先出版影印版。中文版随后跟进。

  5. 返回顶部

    Re: 这本书人民邮电出版社已经引进了

    2007年11月8日 下午9时46分 发表人 Necromancer B

    动作真快

  6. 返回顶部

    Re: 这本书人民邮电出版社已经引进了

    2007年11月9日 上午12时45分 发表人 凉粉 小刀

    引进的时间是一回事,出版的时间是另外一回事

  7. 返回顶部

    Re: 这本书人民邮电出版社已经引进了

    2007年11月11日 上午7时14分 发表人 avatar blogbin

    code complete?

  8. 返回顶部

    Re: 这本书人民邮电出版社已经引进了

    2007年11月11日 下午7时42分 发表人 shxiao ma

    想问一下,人邮有没有引进POSA4,5影印版,非常期待。

  9. 返回顶部

    Re: 这本书人民邮电出版社已经引进了

    2007年11月12日 上午7时48分 发表人 Lorin huang

    谁有个准信吗?

  10. 返回顶部

    希望引进原版

    2007年11月13日 下午7时11分 发表人 Hantsy Bai

    希望引进原版

  11. 返回顶部

    关于POSA 4和5

    2007年11月21日 上午2时46分 发表人 图灵 刘江

    我们引进了翻译版。影印版权Wiley不卖,没办法。

独家内容

OpenSocial规范、实现现状与展望

OpenSocial为构建跨多个网站的社交应用程序提供了一组通用 API。开发人员可以使用标准 JavaScript 和 HTML 创建应用程序,用以访问社交网络里的朋友并更新对应的Feeds。本文是对本次QClub活动内容的一个简短总结,希望对没有到现场参会的读者了解OpenSocial有所帮助,也希望能引起大家更多的讨论。

运用Ruby纤程进行异步I/O:NeverBlock和Revactor

Ruby 1.9的纤程(Fibers)和非阻塞I/O越来越收到关注了。我们对来自NeverBlock项目的Mohammad A. Ali和来自Revactor项目的Tone Arcieri进行了访谈。

与杨巍一起探讨OpenSocial

InfoQ中文站有幸与Google中国的产品经理杨巍先生在一起探讨了OpenSocial的相关话题,包括OpenSocial的初衷、构成要素、实现方式、以及要实现它的技术储备等等。

书评:敏捷模式──指向成功的路标

Ryan Cooper对Amr Elssamadisy的新书发表了评价,并认为书中提供了一种为实施敏捷量身定做的框架。本书并没有给出一种人人可用的敏捷方法,而是为读者提供一些模式和工具,用以找出哪些敏捷实践可以最有效地达到该组织机构的特定目标。

构建的可伸缩性和达到的性能:一个虚拟座谈会

这个由业界主要专家们参加的座谈会探究了在使应用程序具备尽可能好的伸缩性及性能的过程中所面临的挑战和思考过程。

OpenSocial的分析与实现

本视频主要对OpenSocial进行了分析,并对实现的方式进行了介绍。其中包括:OpenSocial的开发经验、Container Provider的技术准备、平台的构成要素、具体的规范、以及对未来的展望。

缓存系统MemCached的Java客户端优化历程

Memcached在大型网站被应用得越来越广泛,但是Java客户端并不多,本文作者基于现有的开源客户端进行了封装优化,并翔实记录了这一过程。

超越SOA:动态业务应用的新企业应用框架(2)

在他们文章的第二部分,作者探讨了动态业务应用的架构并介绍了资源容器的概念。他们示范了如何在JEE之上构建这个架构,以及它如何影响实现生产力。