浅谈一下,为什么选择学习ruby on rails,首先任何一门汇编语言的学习都有一定坡度,需要花费一定时间,很多时候更像风投,如果不能看清发展趋势,很容易被时代淘汰。所以当我决定学习ruby,学习ruby on rails框架时,我是经过考量的,理由其一是ruby on rails 是全栈的高效的,对高速发展是现今而言,动态语言ruby使人可以更高效的开发;其二是学习ruby on rails 开发语言的哲学,rails是日本人开发的一款框架,一方面我对日式哲学有一定趣味,另一方面补全我对框架认识;其三是高效快速开发,初入社会才知道“天下武功为快不攻”是硬道理。
Ruby on Rails简介
“Life’s too short to build something nobody wants” - Ash Maurya, Running Lean
什么是网站开发框架(Web framework)
近年来随着Web 2.0和云端风潮带来越来越多的Web应用程式开发需求,网站软件的规模开始增加,需要加入更多的商业逻辑和功能,这样的开发方式,导致了整个专案的结构变得十分混杂,不利于团队合作开发。要接手维护这样的网站,常常会不知道如何阅读及修改起,因为所有的商务逻辑与HTML混杂在一起,不同人开发就有不同的程式架构,缺乏程式文件是常有的事情,也不容易进行测试。
于是我们有了Web开发框架的需求,引入完整的物件导向观念和技术。而所谓的框架就是制定好了一套规范和惯例,让开发者在该架构下来进行开发。
维基百科是这样定义的:「软件框架(Software framework)」是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。框架的功能类似于基础设施,与具体的软件应用无关,但是提供并实现最为基础的软件架构和体系。软件开发者通常依据特定的框架实现更为复杂的商业运用和业务逻辑。这样的软件应用可以在支持同一种框架的软件系统中运行。
MVC的软件架构设计模式
- Model物件包装了资料与商业逻辑,例如操作数据库
- View表示使用者接口,显示及编辑表单,可内嵌Ruby程式的HTML
- Controller负责将资料送进送出Model,处理从外界(也就是浏览器)来的HTTP Request请求,与Model互动后输出View(也就是HTML)

Web框架通常包括以下功能
ORM
ORM(Object-relational mapping)可以用物件导向语法来操作关联式数据库,容易使用、撰码十分有效率,不需要撰写繁琐的SQL语法,也增加了程式码维护性。例如:
|
|
|
|
URL路由
不同于PHP直接使用档案目录结构来对应网址,例如网址是/foo/bar,就得有个档案在/foo/bar.php下。这种一对一的方式虽然直觉,但是却大大限制了程式架构和开发,网址也常常不漂亮,不利于SEO(Search engine optimization)。
使用Web框架则没有这种问题,你拥有最大的弹性,您可以指定任意URL对应到任一个Controller的动作,跟档案位置是无关的。
Rails的哲学包括以下指导原则:
- 不要重复自己(DRY: Don’t Repeat Yourself) – 撰写出重复的程式码是件坏事
- 惯例胜于设定(Convention Over Configuration) – Rails会默认各种好的设定跟惯例,而不是要求你设定每一个细节到设定档中。
- REST是网站应用程式的最佳模式 – 使用Resources和标准的HTTP verbs(动词)来组织你的应用程式是最快的方式(我们会在路径一章详细介绍这个强大的设计)
Rails 不是什么
如上所述,Rails是一个打造网站应用程式的开发框架,如果你只需要静态的HTML,那是绝不需要用到Rails的。
Rails不是CMS(Content Management System)内容管理系统。CMS是一套写好的架站系统,可以让你不需要写程式就可以架站。市面上流行成熟的CMS系统多为PHP写成,例如Drupal、WordPress等。当然也有用Ruby写的,例如Radiant。如果这些架站系统刚好符合你的需求,那就不一定需要Rails。
Rails是一套网站开发框架帮助你建立网站应用程式,它不是程式语言。
什么是Ruby?
Ruby是一套开放原码、物件导向的动态直译式(interpreted)程式语言,它有着简单哲学、高生产力、精巧、自然的语法。他的创造者是来自日本的松本行弘(又名Matz),设计的灵感来自于Lisp、Perl和Smalltalk,设计的目的是要让程式设计师能够快乐地写程式。
|
|
动态分型(typing),不需要宣告型态
每样东西都是物件,包括数字
使用Code Block形式的匿名函式(anonymous function)随处可见
动态语言的好处
静态语言和动态语言的差别在于,前者的变量型别需要事前宣告,后者则是执行期才动态决定。实务上,就看程式需不需要事前编译这个动作了。
使用更高阶的动态脚本语言可以帮助我们:
1 用更少程式码做更多事情,大大增加生产力
2 更快因应客户开发需求,敏捷开发
不过,动态语言也不是没有缺点:
1 执行效能是绝对比不上静态语言的
2 没有编译期可以检查型别错误
没有编译期可以检查型别错误的问题,也随着单元测试和TDD(Test-driven development)测试驱动开发等敏捷最佳实务而逐渐降低重要性。而大部分的Bug会出自于商业逻辑错误,而不是型别错误上。
但是我们知道现在的电脑越来越快、越来越便宜、上网越来越容易、内存越来越多、硬盘越来越大。另外,行动装置也越来越多,需要搭配的网络服务需求也增加了。这些趋势告诉我们有更多的软件的需求,另一方面由于硬件效能的增强,人力开发成本比起软件的执行期的效能,也越来越重要。同样一个程式,用动态语言执行的效能已经可以达到实用(例如每秒可以处理50~500个的HTTP请求,也可以透过增加服务器来扩展架构),也许用静态语言后的执行速度可以再快一倍,但是却需要十倍以上的时间来开发,这件事情是不是值得呢?
备注
物件导向是台湾方面用语,而在大陆意为面向对象
URL(Uniform Resoure Locator:统一资源定位器)是WWW页的地址,它从左到右由下述部分组成:
Internet资源类型(scheme):指出WWW客户程序用来操作的工具。如“http://”表示WWW服务器,“ftp://”表示FTP服务器,“gopher://”表示Gopher服务器,而“new:”表示Newgroup新闻组。
服务器地址(host):指出WWW页所在的服务器域名。
端口(port):有时(并非总是这样),对某些资源的访问来说,需给出相应的服务器提供端口号。
路径(path):指明服务器上某资源的位置(其格式与DOS系统中的格式一样,通常有目录/子目录/文件名这样结构组成)。与端口一样,路径并非总是需要的。
URL地址格式排列为:scheme://host:port/path,例如http://www.sohu.com/domain/HXWZ就是一个典型的URL地址。