.jpg)
使用单实例类来处理对象元信息
假设你有大量由API提供的对象 —— 我们称之为一个对象图。现在你希望处理这些对象 —— 需要一些中间数据,例如:处理过程产生了一些需要被存储在对象中的元数据。问题是:在哪里存储元数据?我们将介绍如何使用Ruby单实例类来处理这个问题。
.jpg)
假设你有大量由API提供的对象 —— 我们称之为一个对象图。现在你希望处理这些对象 —— 需要一些中间数据,例如:处理过程产生了一些需要被存储在对象中的元数据。问题是:在哪里存储元数据?我们将介绍如何使用Ruby单实例类来处理这个问题。

本文选自Amazon网站销量最好的三本Ruby书之一《The Ruby Way》(Ruby之道)的中文版第11章,介绍了一些不常见或较高级的OOP技术以及一些常见的用法。介绍了一些设计模式的实现(以及一些不需要实现的模式),还讨论Ruby的反射API、Ruby的动态性导致的一些有趣的结果以及使用动态语言能够实现的各种技巧。
Kasper Sørensen在eobjects.dk上创建了一个叫做MetaModel的新的开源项目。该项目是一个通用的领域模型、查询引擎以及对不同类型数据存储的优化器,如关系数据库和一般文件。MetaModel是一个Java库,提供了一个流动的、面向对象的接口以进行SQL兼容的查询。
当博客作者Gustavo Duarte 宣称“学习新语言通常都是在浪费时间”时,他的观点受到了很大的争议。他说,“事实上,学习一种新的语言是桩得不偿失的买卖,把大量的精力花费在低价值的任务上,这种时间投资只能获得很少的回报。”但是,并非所有人都同意这种观点。
在最近的博文中,Michael Feathers评论说面向对象编程语言提供了一些内嵌的特性可以将测试简单化,和函数式编程相比较,它显得更有利于恢复。然而,函数性编程语言的拥护者却非常不同意他的看法。博客社区因此引发了一场异常激烈的论战。
12月5日,领先的开源面向对象数据库提供厂商db4objects宣布db4o已可以顺利运行于Android平台。这个新版本的db4o补全了Android平台开发API中唯一不符合面向对象的模块,即SQLite对应的关系型数据库,对于开放手机联盟来说这意味着更多的开源厂商开始向开放平台靠拢。
Jay Bazuzi曾任C#编辑器的开发主管,现正离开微软。他在离开之前令人惊讶地给旧日伙伴留下了一些尖锐的临别赠言:“OO不是一时三刻的流行”,“用用别人写的代码也不要紧”。
按照Pragmatic Programmers的说法在OOP中最好避免围绕返回值来设计。Michael Feathers认为最好同时也使用异步消息模型,这样有助于提高适应性和健壮性。这样的做法与Erlang的模型相吻合,虽然违背了一些纯函数式编程的原则。
Ted Neward在最近写的一篇介绍db4o中数据库重构的文章中,强调了在开发过程,特别是以测试驱动为主的过程中,使用像db4o这样的对象型数据库要比使用关系型数据库节省很多力气。