最近几天来一直都在思考Ruby的成功,以及其对J2EE的借鉴意义。今天终于想明白一些事情了,所以到这里说两句。首先我看到的现象是RoR和Ruby DSL都利用一切可能手段(method missing,closure……)来提升语法的表达力,让它看起来更像声明性的语句,而不是深入细节的如何去做的具体描述。而且我看到为了达到这个目的,背后的实现是会很复杂的。而且某些技巧是等价于或者就是元编程的。对于元编程,我是一直比较反对的。因为总觉得这样的东西超出了人类大脑的掌控能力,至少超出了我的掌控能力。但是在看过一些RoR的代码之后,我改变了这个想法。复杂的实现带来的简单语法是有价值的。它可以让你更轻松地完成每天的工作,让框架用户的代码变得更干净整洁。这些都非常有价值。而且。。。也是非常经济的。RoR的一个团队,完成了所有的脏活累活,他们为了把一个语法变得很好看,可能要花费比简单实现多上十倍的时间,但是只要节约了每个用户哪怕1%的时间,按照1:100的比例来算,那也是值得的了。RoR用户越多,带来的经济价值就越大。但是。。。这是因为RoR是框架。框架意味着大部分使用者是不用关心其事先的,不用维护其实现的,而且只要按照文档教程上说的那样写,就错不了。因为用户和框架作者是通过“契约”来沟通的。这种契约是API,是“语法”。只要有人来保证这些契约,我作为一个用户来说,压根不用去管背后的琐事。而且有一个社区帮助我来学习这个契约的具体含义,帮助我确认哪些是我用错了,哪些是框架本身的bug,并且有人升级修复框架本身。这样的话,我当然希望这个契约越简单越好,越有表达力越好。我不管你是用OO实现的,还是用代码生成实现的,咋弄都行。
但是要是把RoR的相同做法(各种各样的语言技巧)搬到你的项目中来,那就是另外一回事了。你写的代码不再是在开源的框架代码了。当你不是开源的代码时,你的团队和继任者必须负责在项目整个生命周期中维护它。当你不是框架代码时,你的用户就只是你自己,没有1:100这样的加成经济效益。这个时候,再去用复杂的实现来换取字面上的表达力是否值得就是一个问题了。我认为,大部分情况下是不值得的。原因很简单,不够经济。投入和产出效益不成正比。Ruby DSL如果应用在企业内部项目上,就是这么一个样子。你得在背后把简单的事情做复杂,才能把语法整得很好看。但是最终并没有带来什么价值。你可能会说,做业务的人更好理解代码了。问题是,做业务的会来读代码甚至写代码。当然还有很多其他的论点可以支持有价值的理论。但是,我至少个人对把Ruby在RoR的表达力复制倒企业内部的终端应用程序上来持怀疑态度。但是,对应用RoR,利用RoR的良好表达力是举双手赞成的。
那么关于Ruby这种动态语言来说。我是不是能说它是框架作者的最爱。因为它给了DHH闹腾的余地。不然让DHH到Java中来,只怕不会比Rod Johnson高明多少。但是,在终端应用中使用Ruby,必须制定一些纪律来保证团队成员没有把简单事情搞复杂了。不然必然会导致投入多,产出少,难维护的局面。
结论是,写框架和写应用思路是不同的,对于价值的衡量也不同。框架作者想的是怎么让用户尽可能简单。应用的开发人员想的不仅是怎么让自己的日常工作尽可能的简单,还要考虑项目整个生命周期的维护成本。所以,RoR作为一个框架来说,非常优秀。相同技巧用来开发程序自己使用的DSL来说,未必经济。除非你能证明,复杂性带来的表达力正是你和你的Stake Holder所需要的。
分享到:
相关推荐
在Ruby on Rails框架中,Model层是核心组件之一,它主要负责处理应用程序与数据库之间的交互。在本篇"ror培训第4天 -model1"中,我们聚焦于Model中的Active Record,这是一个强大的对象关系映射(ORM)工具,使得...
此外,还能了解到RoR如何通过DSL(领域特定语言)简化开发,比如在模型中定义属性和关系,在迁移文件中创建数据库表。 总之,这个“RubyOnRails的一个入门小例子”提供了一个很好的起点,帮助初学者理解RoR的原理和...
6. **数据库集成**: 在Ruby on Rails(RoR)项目中,数据存储通常通过ActiveRecord实现,而Sinatra虽然没有内置ORM(对象关系映射),但可以与ActiveRecord或其他如Sequel、DataMapper等ORM库配合使用。本项目可能...
Ruby强调程序员的生产力和幸福感,提供了许多内建的工具和库,比如元编程能力,使得编写自定义 DSL(领域特定语言)成为可能。 **Rails好友列表应用** 在本教程项目“ruby-tutorial-friends”中,你将学习如何使用...
Groovy 与 Ruby on Rails (ROR) 比较 1: Groovy 和 Grails 与 Ruby on Rails 一样,都追求开发效率和简洁性,但它们建立在不同的语言基础之上。Ruby on Rails 是基于 Ruby 语言,而 Grails 则是基于 Groovy。虽然 ...
RoR使用DSL(Domain Specific Language)使得开发者可以以更简洁、自然的方式编写代码。 结合标签“Ruby”,我们可以推断这个项目是用Ruby语言开发的,并且使用了Rails框架。Ruby是一种面向对象的、动态类型的编程...
HighchartsOnRails 在 RoR 中使用高图的性感 DSL安装将此行添加到应用程序的 Gemfile 中: gem 'highcharts_on_rails'将此行添加到您的应用程序 application.js 文件中: //= require highcharts_on_rails/charts...