Ruby On Rails里面的一些概念现在已经非常流行了。但是当初应该是比较有开创意义的。
Struts1,Struts2,Spring,Seasar,Symfony我都有过使用。我觉得从最初的单一脚本,到追求的快速开发框架。我觉得都有几个共性。
1)基于数据库的网站开发的快速
虽然并不是所有的动态网站都需要数据库。但是一个不容回避的问题是,90%的网站系统,是基于数据库的,而且一大半的开发时间也陷入数据库的各种操作。但是另外一个事实是,数据库操作的代码经常重复,冗长,开关数据库连接的也非常繁琐。一个有基本开发经验的程序员,即使不用框架,都会为此,去抽取一些公函,或用一些脚本实现Bean的自动生成。但是,无论如何是绕不开SQL文与OOP对象的转换。
所以,最自然的想法,是把这些转换的过程也自动化。当然这不是不可能的,Java的Hibernate,PHP的Dotrine,Ruby的ActiveRecord,C#的NHibernate或者是DataTable等等,都是这方面的尝试。这些工具从简入繁。最开始,解决Bean的自动生成和对象直接返回。但是数据的整合性,Sql文的嵌入,关联表的查询还需要外部手工处理。于是很多成熟的OR Mapping工具,都能包含RelationgDB的关联信息,对于数据库的CRUD操作,要么提供直接的方法(如普遍的Find,Order,Limit方法),要么使用内建对象的类SQL语言(如HQL语言,LINQ等)。
当然如果问题就如此简单,那么估计SQL文就从此作古了。要使用好O/R Mapping工具。常常有好多前提,比如DB设计必须非常标准(否则自动生成就不能轻易实现),复杂检索不多(因为复杂检索常常效率很慢,所有工具都提供Native Sql的调用)等等。
另外,如果是一个设计标准,充分使用O/R Mapping工具的系统,常常可以很轻易地自动作出CLRU的各种标准页面。特别是对一些数据管理网站,瞬间制作出大量管理页面,大大节省人力工作。
(待续)
小提示:
使用Rails new XXX,常常在最后的Bundle Install要花上10几分钟。
这是因为rails new时自动会运行bundle install,而bundle install会自动去rubygems.org查找是否有更新。
但需要的gems我早安装好了,且不用更新,所以上面步骤就可省了。强烈建议rails党委取消rails new时自动查找gems更新功能!
解法很简单
rails new my_app --skip-bundle cd my_app bundle install --local
另外,最新版bundler速度提高不少,建议使用,也能提速
gem install bundler --pre