其实这根本不是面向对象的设计,本身就是函数化的设计。可以参考以下 Danial P. Friedman 的《A Little Java》那本书,里面说了这些 awkward 的 design patterns 是怎么来的。Design patterns 都是很烂的东西。况且 Arel 本身就是参考 Linq 和 HaskellDB 的思想来设计的。看看作者自己的博客就知道了。