Skip to content

面向对象设计实践指南:Ruby语言描述(Practical Object Oriented Design In Ruby An Agile Primer)

Dinesta Xenophon Fisper edited this page Aug 30, 2015 · 2 revisions

Book Information

9780132930888 s27456784

Review by [DeathKing]

Sandi Metz 也算是 Ruby 社区一位活跃的布道者了,她在 RailsConf 上的发言总能引人入胜,让人直呼过瘾。直到看到 Metz 在 Rails 2015 上的演讲 Nothing is Something 之前,我一直以为我懂 OOP ,而事实上,我的三观又彻底的被摧毁了一次,直到此刻,我才顿悟“消息传递”的真正意义。

实际上,我以前一直对 Design Pattern 没有什么好感而一直不屑于使用它们。在最近研读 Puppet 源码的过程中,我了解到了控制反转(Inversion of Control)、空对象模式(Null Object Pattern)和工厂模式(Factory Pattern)等模式。我发现,恰当地使用这些模式,可以提高程序的灵活性、可重用性等,我又一次被震撼了。

什么样的设计才是好的设计?才是面向对象的设计?面向对象设计的本质是什么?带着这个问题,我把目光投向了 Sandi Metz 的这本著作。

“面向对象的应用程序是由交互产生整体行为的各个零件组成。这些零件就是对象,而交互则体现在它们之间传递的那些消息里。想要获得发给正确目标对象的正确消息,需要这条消息的发送者对接收者有所了解。这一点会在两者之间创建许多依赖关系,并且这些依赖关系还是处在不断变化之中。……面向对象设计与依赖关系管理相关。它是一套对依赖关系进行编排,以便各个对象能够容忍更改的编码技术。”

我太喜欢这个总结了,这个跟我的研读源码得到体会不谋而合!问题的本质是什么?是依赖关系!正是因为依赖关系太强、太复杂,我们的代码才会牵一发而动全身,才会难以重用。面向对象设计就是要去合理地对依赖关系解耦,让我们不但能够完成今天交付的代码,还要能够从容面对未来的变化。“设计的目的就是允许你以后可以进行设计,而设计的首要目标就是降低变化所带来的成本。”

啊,这本书光是第一章就令我受益匪浅,Sandi Metz 那 30 年的从业经验对 OOD 总结得name独到,光是引用第一章的金句就足以支撑整个书评!但正如书名所揭示的那样,这不是一本充满数学公式地计算机理论著作,而是一本“实践”指南。在后面的章节,Metz 结合 Ruby 语言本身的特性,介绍了 SRP (Single Response Principle)、继承、鸭子类型等概念,并用一个精心构造的例子贯穿全书,循序渐进,让读者能够结合实际去思考整个设计过程。无需我在说什么溢美之词,亚马逊上 Ruby 分类 Best Seller #1 ,足矣证明这本书是多么优秀!

薄薄的 200 来页不像大部头书籍那样让人望而生畏,轻松的写作风格更是让人爱不释手。

要是早些时候读到本书,那该多好!

Clone this wiki locally