Rails框架纵览:
学习Rails框架也好几个月了,不过这段时间忙着考研复试,忘了不少了,总结一下,找回点感觉,好做毕业设计。
Ruby on Rails的两大箴言:约定优于配置(Convetion over configuration)和DRY(Don’t
repeated yourself)造就了Rails 的极高的开发效率,使Rails框架迅速风靡世界,现在可以说是红的发紫。
Ruby on Rails框架,是一个使web应用的开发、部署和维护变得更容易的框架,Rails框架非常适合进行敏捷开发和基于测试驱动开发,因为整个框架的设计,就将测试放在了很高的位置,你每生成一个Mode , Contorller他都会自动在test文件夹下生成对应的测试类,并且Rails提供了一整套类似于JUnit的单元测试工具,同时提供了对web测试的功能(甚至可以深入到Html的标签进行测试),它提供的测试设施非常全面和易用,它可以让对数据库操作部分的各个测试用例彼此隔离,提供Mock对象(request , response),使得web程序测试就象普通程序测试一样简单。
Rails的ORM做的相当的好用,虽然比hiberate的功能要弱一些,但使用Ruby语言的动态性动态的生成查询函数的功能用起来比起Hibernate爽多了,让你真正的脱离了对sql的低级操作(hibernate引入HQL,宣称具有面向对象的查询语句,感觉有自欺欺人的感觉,我感觉存在的理由只是作为一个中介,方便根据不同的sql方言生成sql而已),而同时你也拥有直接操作sql的强大功能来实用复杂的场合,例如多表连接,只查询部分字段等。它让Mode继承Active::Record ,使得的领域模型是胀血型的,更加面向对象,适合领域驱动的设计方法建模(使用Hibernate的 j2ee,一般是贫血型的,只有属性,没有行为,有违面向对象的理念。实现充血型的模型相当困难,例如使用AOP什么的)。Rails只需要使用has_many,
belong_to,has_one,has_and_belongs_to_many类似声明的方法,就可以轻松指定表间关联。同时提供了Acts As List ,Acts As Tree, 以及单表继承等高级功能。值得一提的是Rails的属性是虚的,它直接绑定于表中的属性,这样当你修改数据库设计(如增加字段),同时会反映到Mode中。ActiveRecord的功能不止于此,其提供的效验(validation)功能相当强大,你可以重载ActiveRecord的validate方法,也可以使用效验的辅助方法(validates_format_of,validate_uniqueness_of,validate_acceptance_of, validates_length_of等),使用起来非常方便。同时ActiveRecord还提供了回调方法(before_destory,before_save,after_destory,after_save等)和Observer,不需要java使用Filter和AOP的复杂配置,便可以获得其强大的功能。
ActionController作为控制器,其功能就是根据请求调用Action,在Action中执行业务方法,并转向适当的视图。ActionController提供了一种称为请求路由(Routing Requests)的方法来匹配URL请求,从而找到正确的Controller和action,类似j2ee使用xml配置,但请求路由它只需要提供一套(或自己定制)路由匹配策略就可以处理所有的请求,比j2ee针对每一个Action请求需要一个mapping简洁的多,同时也不失其强大的功能。ActionController也有类似于jsp的render(类似jsp 的forward)和redirect_to(类似于jsp的redirect),同时提供了Coookie和Session,其使用非常方便。并且使用了flash方便的在一个或多个请求中传递信息。ActionController提供了过滤器(Filters)和效验(verification)。Filter提供了类似Spring框架AOP同样强大的功能(前置/后置/环绕过滤器),你可以动态的增强一个方法,使用Filter我们可以轻松实现身份认证,日志等具有一个横切面性质的业务功能。Rails提供了页面缓存,action缓存,片段缓存,大大减少了重复操作导致的服务器资源和时间的耗费,
提高了性能。同时提供了缓存实效策略和清扫器以及基于时间的缓存实效策略,避免了手工管理缓存的困难。同时Rails还不甘ActionController现有的功能和机制,在Rails1.2提供了REST(Representions State Tranfer), REST技术,使得只需要指名控制器和相应的资源,而不需要指名Action就可以进行相应的操作。REST是基于htpp协议的一些动词GET,POST,DELETE,PUT来执行相应的操作的,它使得URLs简洁清晰,可以根据不同的请求给予不同的响应(响应可以是.html,.xml,.js等),代码相对更少,使用一个面向CRUD的控制器以及清晰的应用设计。他在controller中使用response_to, 连接和表单使用新的help method以及在routes.rb里生成新的路由等新的特色。
ActiveView提供了两种模板rxml和rhtml模版,由于ruby语言的动态性,使得ruby语言嵌入rhtml中来控制页面逻辑以及输出具有原生的优势,不用像jsp需要提供表达式语言(EL)。使用Helper方法可以避免在模版视图中嵌入大量的代码(特别是业务代码),从而实现代码和表现的分离。ActiveView提供了大量的辅助方法来提供连接,生成表单,同时提供了分页的功能。ActiveView使用布局模版、局部页面模版,以及组件,使得大量的页面和局部页面可以被共享和重用,其J2EE框架至今还尚未有以实现易于重用模版的和先进的理念(特别是渲染技术,Structs的Title ,JSF的渲染还不错,但与之相比还相差甚远),局部模版技术与rails实现的Ajax技术搭配起来可以实现很酷的页面动态效果,同时对局部模版可以进行缓存来改善web性能。模版可以方面的访问Controller的实例变量和类变量,以及辅助方法,这一切都是Controller与页面模版之间的交互非常容易,同时页面之间可以传递参数也大大地增加页面之间的交互性。
同时Rails提供的对Ajax完好的集成,rails对ajax的封装使你只需要使用ruby代码就可以产生web2.0的很酷的效果,避免使用javascript这个难以调试的东东,同时也避免了不少低级的操作,rails在背后替你做了一切。
最后值得一提的是rails1.2提供的Migration,对控制软件版本,敏捷开发,数据库模型的演变等提供了非常方便的支持。(本人乃rails新手,如有不当之处在所难免)
分享到:
相关推荐
Rails::API 是 Rails 的精简版本,针对不需要使用完整 Rails 功能的开发者。 Rails::API 移除了 ActionView 和其他一些渲染功能,不关心Web前端的开发者可更容易、快速地开发应用程序,因此运行速度比正常的 Rails ...
gem "mongoid_rails_migrations" 如何使用 创建迁移 $ rails generate mongoid:migration 运行迁移: $ rails db:migrate $ rails db:migrate:down VERSION= $ rails db:migrate:up VERSION= $ rails db:rollback...
介绍rails框架,版本是rails2点几的,不过思路差不多,具体区别可以去看官网
Beginning Google Maps Applications with Rails and Ajax: From Novice to Professional
Beginning Google Maps Applications with Rails and Ajax: From Novice to Professional
学习Ruby on Rails 4.0的逐步指南。 它包括针对Ruby 2.0.0的基本教程,是为至少了解另一种编程语言并熟悉HTML的程序员编写的。
本书教您如何使用Ruby on Rails开发和部署真正的,具有工业实力的Web应用程序,Ruby on Rails是为诸如Twitter,Hulu,GitHub和Yellow Pages等顶级网站提供支持的开源Web框架。
Rails多站点这个gem为Rails应用程序提供了多数据库支持。 使用其中间件,您可以对应用程序进行分区,以便每个主机名都有自己的数据库。 它提供了一系列用于处理多个数据库的帮助程序,以及一些用于处理这些数据库的...
Python开发Rails框架——Django框架介绍.pdf Python开发Rails框架——Django框架介绍.pdf Python开发Rails框架——Django框架介绍.pdfPython开发Rails框架——Django框架介绍.pdf
Component-Based Rails Applications: Large Domains Under Control (Addison-Wesley Professional Ruby Series) By 作者: Stephan Hagemann ISBN-10 书号: 0134774582 ISBN-13 书号: 9780134774589 Edition 版本: ...
Rails 版本这个 gem 与一起使用来跟踪你所有的 Rails 应用程序和它们正在运行的版本。 这为您提供了一个查看所有 Rails 应用程序版本的地方。安装像往常一样,将此行添加到您的应用程序的 Gemfile 并在之后打包: ...
创建一个名为 blog 的新 Rails 应用程序。 rails new blog 编辑您的 Gemfile 并添加 gem 'rails-backbone' 安装 gem 并生成脚手架。 bundle install rails g backbone:install rails g scaffold Post title:...
Rails的设置 Ruby gem通过将ActiveRecord实例的设置作为序列化的Hash存储在单独的数据库表中来处理ActiveRecord实例的设置。 包括命名空间和默认值。 要求 Ruby 2.4或更高版本 Rails 4.2或更高版本(包括Rails 6) ...
rails-docker:Docker Rails环境
graphql-rails-api是一个gem,它提供了生成器,可以以域驱动的设计方式轻松地描述您的graphql API。 需要任何帮助或想要在不和谐中与我交谈:Poilon#5412 安装 通过创建Rails应用 rails new project-name --api ...
提供用于Rails 4.x(及更高版本)资产管道的Sprockets实现。 安装 gem 'sprockets-rails' , :require => 'sprockets/railtie' 或者,如果禁用了Bundler自动请求功能,则在config/application.rb require 'sprockets...
Rails :: Auth Rails / Rack的基于资源的模块化身份验证和授权,旨在支持身份验证和。 描述 Rails :: Auth是一个灵活的库,旨在使用Rack Middleware进行身份验证(AuthN)和授权(AuthZ)。 它将,使用AuthN中间件...
安装在Gemfile中: gem 'rails-uploader'在航线上: mount Uploader :: Engine => '/uploader' 迁移ActiveRecord: $ bundle exec rails g uploader:install用法存储上传文件的架构(cancan集成): class Asset <...
Rails(ActiveModel :: Model)中已经包含了一个不错的框架,该框架可用于创建虚拟类,其中包含您已经从Rails知道并喜欢的所有验证。 记住要始终尝试遵守“瘦控制器”规则。 请参见页面看到关于如何建立加载...
rails_new 经过精心设计的模板,用于构建现代Rails应用 :fire: 在数分钟而不是数小时内开始使用新应用 :automobile: :dashing_away:入门要克隆该存储库并执行以下步骤: 运行rails credentials:edit config/master....