站在更高的角度看可以发现元编程对实现DRY(Don’t Repeat Yourself)原则很有帮助,该原则也被称作“一次且仅仅一次(Once and Only Once)”,DRY原则主张在系统中要表达的一则特定信息只需要出现一次就足够了。重复往往是没必要的,特别是诸如Ruby这样的动态语言。就像函数化抽象可以使我们得以避免重复编写相同或者相似的代码一样,元编程使得我们可以避免重复那些在整个应用中多次出现的概念。
元编程主要是为了简单化。体验元编程技术最简单的方法之一就是寻找出重复的代码并将其提取出来。多次重复的代码可被抽取为函数;多次重复的函数或模式通常可以通过使用元编程将其提取出来。
在这里所说的设计模式是几个领域的交集;模式的设计是为了将解决同一问题时需要重复的次数降低到最小。在Ruby社区中,设计模式没有获得很好的评价。对于一些开发人员来说,模式仅仅是一个很普通的词汇,它用于描述应用中重复出现的问题的解决方案。对于另外的一些开发人员来说,它们则太过工程化了。
固然,模式可能被过度的使用,但是明智的使用则另当别论。设计模式到目前为止只是在减少认知复杂性方面非常有用。在Ruby中,一些细粒度的模式因为其透明性非常高,已不适于称其“模式”了;它们事实上已经成为一种习惯用法,大多数 “以Ruby方式思考(think in Ruby)” 的程序员都会不加思索的使用它们。模式应该被当作描述架构的一个词汇,而不是实现了某种解决方案的一个预先打包好的库文件。从这个角度想,好的Ruby设计模式与好的C++设计模式相比有非常大的差别。
元编程通常不应该被简单的用来减少代码重复。你应该经常评估是否有另外的技术选择能更好的解决问题,例如函数化抽象。但是,在少数情况下通过使用元编程来减少重复代码是最佳的解决方式。例如,当几个非常相似的函数必须得定义在相同的一个对象上时,就像ActiveRecord helper方法,元编程就可以发挥其作用了。


















发表留言