最近几天来一直都在思考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所需要的。
分享到:
相关推荐
RoR是一个流行的开源Web开发框架,而Ruby语言本身支持与Microsoft Excel文件交互,这在数据导入导出、报表生成等场景中非常有用。 描述虽然简洁,但我们可以推断出它可能是指如何在Ruby中利用库来读取、写入或操作...
Ruby on Rails,简称RoR,是由David Heinemeier Hansson基于Ruby语言开发的一款开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在提高开发效率和可读性,使得开发者能够更快速地构建功能丰富的web...
在Web服务器选择上,Lighttpd被推荐为RoR应用的理想选择,因为它与应用服务器的通信进行了优化。Lighttpd在完全接收POST数据后才一次性转发,同时在接收应用服务器响应时也不限制Buffer大小,从而减少了应用服务器的...
ROR环境 Ruby version 1.9.3 (java) RubyGems version 1.8.24 Rack version 1.4 Rails version 3.2.12 JavaScript Runtime therubyrhino (Rhino) Active Record version 3.2.12 Action Pack version 3.2.12 ...
2. **ActiveRecord**:RoR的数据访问层,它将数据库操作与对象模型绑定,提供了ORM(Object-Relational Mapping)功能。 3. **路由**:Rails的路由系统将HTTP请求映射到特定的Controller和Action,定义了应用的URL...
Ruby on Rails(简称ROR)是一个基于Ruby编程语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在促进开发过程的简洁性和效率。Ruby on Rails的核心理念是“Don't Repeat Yourself”(DRY,...
您可能要讲的内容: Ruby版本系统依赖配置数据库创建数据库初始化如何运行测试套件服务(作业队列,缓存服务器,搜索引擎等) 部署说明...Ruby on Rails教程样本应用程序参考实施这是(第6版)中的示例应用程序的...
同时,熟悉数据库设计和管理也是必不可少的,因为RoR的ActiveRecord与数据库紧密关联。 总结,FreeMIS是一个运用了Ruby on Rails强大特性的管理信息系统实例,它体现了敏捷开发的理念,为开发者提供了快速构建企业...
项目收益率在此存储库中,您可以找到基于RoR的项目。 作者的GitHub 推特领英玛丽亚·费尔南达·克雷斯波 执照Ruby on Rails是开源的,因此可以在未经许可的情况下免费下载和使用。2021.哥伦比亚卡利
6. **Oracle数据库**: 配置RoR应用连接Oracle数据库需要安装`ruby-oci8` gem,它提供了Ruby与Oracle数据库的接口。由于Oracle驱动可能不包含在默认的`gem`源中,可能需要添加Oracle的gem源或者手动编译安装。 7. **...
在Ruby on Rails(ROR)开发环境中,安装和配置正确的依赖包是至关重要的。这个压缩包包含了一系列用于ROR框架的基础组件,但不包括Ruby本身。让我们深入了解一下这些包的作用和重要性。 首先,`actionpack`是Rails...
这几天一直在学习使用RoR(Ruby on Rails),想建立一个功能全面一点的LBS(Location Based Service)网站。但是对于我这个RoR的初学者(仅有几天时间)来说,毕竟太复杂了。因此本文试图简化原来的设计思路,抛弃一切...
【Java与Ruby在Web开发上的效率对比】 Java和Ruby都是流行的Web开发语言,它们各自有其独特的优点和适用场景。本文主要探讨了Java相对于Ruby在Web开发中的效率和生产力。 首先,Ruby on Rails(RoR)以其简洁、...
Ruby on Rails(RoR)是一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在简化Web开发过程。在这个选题方向中,我们主要探讨的是与RoR相关的源代码分析和学习。源代码是...
Ruby on Rails(简称RoR或Rails)是一种基于Ruby语言的开源Web应用框架,它遵循Model-View-Controller(MVC)架构模式,旨在提高开发效率并提供简洁、优雅的代码结构。"ror实例"可能指的是在学习或实践中,通过创建...
自述文件 该自述文件通常会记录启动和运行应用程序所需的所有步骤。... Ruby版本 系统依赖 配置 数据库创建 数据库初始化 如何运行测试套件 服务(作业队列,缓存服务器,搜索引擎等) 部署说明 ...
在Ruby on Rails(简称ROR)框架下,处理文件的上传与下载是一项常见的需求,尤其是在构建包含媒体内容的应用程序时。本文将基于给定的文件信息,详细阐述如何在Rails应用中实现文件的上传与下载功能,包括数据库...
Ruby on Rails(简称RoR)是一个基于Ruby编程语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,旨在提高开发效率和代码的可读性。RoR以其“约定优于配置”(Convention over Configuration)的...
Ruby Ruby 语言技术参考,基于约翰沃洛斯基 (johnvoloski) 准备的材料。 介绍: 约翰·沃洛斯基: @约翰沃洛斯基 ... RoR 巴西- Ruby on Rails 巴西 RoR - Ruby on Rails RubyGems - 可用于 Ruby
《Ruby on Rails 101》是一本介绍Ruby on Rails(简称RoR或ROR)的基础书籍,旨在为初学者提供一个全面而深入的学习框架。本书由Peter Marklund编写,包含了五天课程的演示文稿和相关资料,覆盖了从安装到实际应用...