美文网首页
Rails 学习感想

Rails 学习感想

作者: 王谙然 | 来源:发表于2016-07-30 22:21 被阅读104次

后端(应用层)不同于前端,最重要的概念是 middleware/pipeline.

Rails能较为深入的理解一定要建立在对后端整体架构理解架构的基础上,不然就会进入开始很爽越来越晕的尴尬节奏。

大致分为两大部分:Server/App,一个负责接收分发 request,一个负责业务逻辑,他们之间的数据对接靠 Rack 规范。Server 具体可参考这篇文章。而 App 部分就是 Rails。

Rails干的活一句话就是一个按照 Rack 标准数据格式化的 Request 进来,分析url,分配给它一个 Handler 方法处理:

  1. 解析 url 参数,HTTP header/body
  2. 身份验证,权限验证
  3. Database操作
  4. 渲染需要返回的数据(html/json)

当然为了控制 App 的逻辑复杂度,Rails 采用 MVC 架构,遵循 convention over configuration,don't repeat yourself 理念,尽量将 Server API 设计的 restful.

Rails 重要的组件都是根据 Handler 来,ActionController,ActiveRecord(ORM),ActiveView(view).

然后对一个项目还有:配置,第三方库管理(bundler),测试(RSpec/factory_girl)

这里要提一下Rspec,对于魔法语言 Ruby 来说,只有相对完善的测试(最好TDD)心里才踏实,推荐一本书《Everyday Rails Testing With RSpec》。

有时有些 Request 是好是操作,我们需要后台任务,需要了解 sidekiq.
对于 HTML 有时可能需要 Cache,这时简单粗暴的内存KV数据库 memcached。

有哪些地方容易写出坑:

  1. 低效 SQL,所以对 SQL 也要有一定了解,知道一个链式 ActiveRecord 操作背后执行的哪条 SQL,而且对所用数据库(MySQL/Postgresql/MongoDB)有一定了解。
  2. 尽可能不要在 View 中写业务逻辑。
  3. Controller 中有过多逻辑。
  4. 当我们把逻辑从 Controller 迁入 Model,Model 会迅速臃肿起来。

对 Ruby 的理解需要达到什么程度?看懂《Ruby元编程》。

拓展阅读:

再谈 API 的撰写 - 架构-程序人生

相关文章

  • Rails 学习感想

    后端(应用层)不同于前端,最重要的概念是 middleware/pipeline. Rails能较为深入的理解一定...

  • model真的是越肥越好?

    用rails框架近一年了,虽然在这个领域还没什么造诣,但作为一个使用rails的'用户',还是有点感想想要分享的,...

  • rails基础汇总

    一:ruby on rails, Router路由 前言:ruby学习掌握20%就可以开始rails的学习了,知道...

  • ROR高级开发工程(蛋人网)

    01 Ruby on Rails介绍02 Ruby on Rails快速上手03 Model基础学习04 Mode...

  • rails 学习

    试一下,先拷贝一段 Rails的全名是Ruby on Rails,也会简称ROR。 Rails是用ruby语言编写...

  • rails学习

    #一个# 如何学习rails 如何可以完成一个rails的项目,这是个很考验人的问题。

  • rails学习

    使用 $gem install rails 安装rails (具体前置配置看ruby配置环境) rails安装...

  • Rails Dependencies

    现在我们已经学习了 Rails 的基础知识,但 Rails 还蕴含着许多未知。Rails 集成的众多组件也是使其更...

  • Ruby on Rails 学习(二)——Rails的目录结构

    在学习rails时,我们有必要了解rails程序中的目录结构。rails对于不同的文件,不同的代码存放在什么样的文...

  • rails项目学习

    Rails路由学习 <%= link_to 'hello', {:controller => 'welcome',...

网友评论

      本文标题:Rails 学习感想

      本文链接:https://www.haomeiwen.com/subject/kqutsttx.html