瞎扯淡 分享一点自己的 Rails 学习开发经历经验

fidel · 2019年11月18日 · 最后由 adamshen 回复于 2019年12月02日 · 5709 次阅读

接触 rails 有两年了,有大项目的开发经验,也有自己负责小项目前端 + 后端 + 服务器部署的经验。

用的框架是 RoR, React.js(比较推荐), Stimulus.js(特别安利), Foundation, Bootstrap。

看过的 ruby 方面的书有:Ruby on Rails 教程面向对象设计实践指南 :Ruby 语言描述Ruby 元编程

最开始是看官方文档 + Ruby on Rails 教程( https://ruby-china.org/topics/39192 ),几天后开始在公司内部项目做一些小改动,一个月后开始半学半做的接手一个新项目。两年的外包工作下来,感觉 rails 蛮多是一个熟练的过程,上手还是比较快的。多做项目,做真正的项目能极快的上手 RoR。

想分享给大家的是上手到现在这 2 年过程中的一些个人经验和个人看法。

Controller

Controller 想分享的一个是避免 N+1,另一个是把复杂逻辑集成到 service 中。

N+1,我看到过在一些比较大的项目,一个 API 调用或者一次页面刷新,数据库的访问几十几百次,ActiveRecord 的 load 时间需要几百 ms,如果解决了 N+1 的 wen ti,这个时间至少能缩短 1/10。我一般是在 controller 中使用 rails 的 incluces 方法 preload 所需要的 associations 来避免 N+1。这里推荐一个 gem bullet( https://github.com/flyerhzm/bullet ),可以在 console,浏览器 console 等各种地方给出提示警告和解决方案,特别好用。

把复杂逻辑集成到 service 中,对以后代码维护修改都特别好,代码可读性高,写单元测试也比较好写。一个 controller 的 method 只做一件事情(视具体情况),尽量遵循单一功能原则。我看有蛮多人写的 controller 的 method 根据传的参数不同,会有不同的功能表现;有的还把 update 和 create 的功能混在一个 method 里面。还有就是尽量把 model 的处理放到对应的 controller,不要把一个 model 的一些 CRUD 放到别的 model 对应的 controller 中进行处理。我看到过有的人把 model 的 CURD 方法放到了这个 model 的 associations 的 model 的 controller 中。对代码的阅读,功能扩展修改都造成了很大的困扰。

Test

测试方面的话我用的是 Rspec,然后用 simpleCov 来看测试覆盖率(一般尽量达到 controller, model, service, concern, helper 的 100% 覆盖,高测试覆盖率是你以后功能扩展修改的强力后盾),之后我可能会再写一个帖子来谈谈编写自动化测试的经验和分享一些想法。

Gem

推荐一些我觉得好用的 gem:

  • gem 'bullet', 避免 N+1 用的
  • gem 'pry', 很好用的一个开发以及测试工具,在代码中一句binding.pry就可以在 console 中进行调试
  • gem 'factory_bot_rails',用来自动化创建测试所需数据
  • gem 'faker',用来构造数据的
  • gem 'rspec-rails', rails 的测试框架
  • gem 'rails-controller-testing',让你可以在 controller 测试中使用assigns
  • gem 'simplecov', 用来检查测试覆盖率的
  • gem 'database_cleaner',配置好之后,可以在测试中使用 before(:all) 来缩短创建 activerecord 所需时间,缩短测试所需时间
  • gem 'whenever', 用来管理 conjob 的
  • gem 'exception_notification',用来发送报错邮件的
  • gem 'parallel_tests',并行测试用的

都是一些很粗浅的见解,希望对想要接触或者刚接触 rails 的人能有点帮助,也欢迎大佬们指正。

基本没人接触了吧

感谢分享,有一些包没用过

跟我差不多。 最近很烦的是 rails 的版本问题。 simple_form 的安全漏洞强迫升级到 rails5

等自动化测试经验分享

mengmeng 回复

过于真实,感觉论坛这两年都没有新鲜血液。

fidel 分享下澳洲跳槽的经验 提及了此话题。 06月29日 20:59
需要 登录 后方可回复, 如果你还没有账号请 注册新账号