文章: 与 Jolt 大奖提名图书《Release It!》的作者精彩对话

  • Ryan Slobojan

2008 年 2 月 4 日

话题:Java敏捷.NETRuby架构DevOps语言 & 开发文化 & 方法

《Release It!: Design and Deploy Production-Ready Software》一书的作者是 Michael Nygard,该书已获得 2008 年度 Jolt 大奖的提名。此书主要围绕怎样开发产品级软件(production-ready software)以及此类软件与功能完备软件(feature-complete software)之间的差别两个话题展开讨论。在 Nygard 个人的网站上,他是这样描述写这本书的源动力的:

这本书凝聚了我多年来与生产系统打交道的经验。我经常因为某些本该 24x7 运作的系统宕机,而在半夜三点受到惊扰。

关于系统设计和架构的书籍往往只告诉你怎样满足功能需求,的确这类书籍对你在 QA 面前过关会有很大帮助。然而这本书中的重点将放在怎样才能使一款软件成为真正的产品这个话题上。如果你不想整日被电子紧箍所束缚,这本书应该正是你所想要的东西。

详细请阅读: 与 Jolt 大奖提名图书《Release It!》的作者精彩对话

在这篇文章中,作者写道:

InfoQ: 开发产品级软件中倡导的预先工作的原则似乎与敏捷思想中的需要的时候再动手和必要时再重构的原则有些冲突,你是怎么看这个问题的?

Michael Nygard:作为一个敏捷开发人员,我也时常会面对这个矛盾。对此问题,目前还没有好的解决方法,但是要看到,这两个原则的目的是一致的,那就是设计出好的面向对象的产品。

当完成一段逻辑代码及其单元测试代码后——不管你先写的是哪个——为了改善质量,重构是免不了的。嗯,“改善”,你能告诉我“改善”的具体涵义吗?这是否意味着,对面向对象的设计你心中必须有一个好坏的标准?是的,而这个标准就是 Martin Fowler《重构》一书中所说的“变味代码”。“变味代码”只是一个定性的衡量。这里硬要塞进一个严格的定量衡量标准是没有必要的。

我认为对于架构同样如此。对我来说,一个没有时间限制的远程调用,一个未加限制地取回客户所有订单的 SOAP 调用或者 REST 调用,都可以认为是“变味架构”。

因此,虽然不赞成预先做大的设计,或者说“大范围的预先架构”,但我认为在系统内部定义合理的边界,设计合理的异常处理机制并且排除“变味架构”是非常有必要的。

Java敏捷.NETRuby架构DevOps语言 & 开发文化 & 方法