重构 [ Ruby on Rails ] 重構經驗談

hellolucky123 · 2012年10月21日 · 最后由 gingerhot 回复于 2012年10月31日 · 5279 次阅读

會寫這篇文章的初衷是因為公司當初聘請我最重要的任務就是把網站從 Rails 2.3 升級到 Rails 3.2 並且把整個網站重構。公司網站的規模大概落在 40~50 個 controller 和 model 上下,說大不大說小不小。在整理的過程中,看到了各式各樣慘不忍睹甚至令人噁心的程式碼,加上完全沒有 spec 或 document 的狀況下,導致我必須不斷去揣摩、拆解當初原作者這段程式的想法,同時,還必須靠"想像"原本的 Spec 重新寫出好維護的程式碼。回憶起這段不堪回首的往事真的是非常辛苦,但在把後端整理到可以維護的狀況和把前端的工作切割拋出去給 F2E 以後,回頭想想收穫也不少。所以想藉由這次的經驗做點記錄與分享。

因為有不少範例,不想花時間重新格式化,所以有興趣的朋友請直接點連結閱讀:

http://blog.hellolucky.info/articles/ruby-on-rails-refactoring-experience-talk/

非常好的文章,持续关注

谢谢分享,期待你得“重構經驗談 (二)”

持续关注~

谢谢分享~

赞美 好文章

Thanks for sharing this!

我觉得可以改进的有

  • 改用 haml,少写许多代码
  • 改用 coffee script,因为 coffee script 是 precompile 的,自然避免 mixed ruby code inside
  • 关于 js 切块和 sass 切块,我自己的心得 http://scriptogr.am/mafai/post/coffeescript http://scriptogr.am/mafai/post/sass-structure-research
  • 我也喜欢用 compass,很好的封装
  • 关于 template,我喜欢 underscore.js 的 template,但感觉还是不够简洁,linkedin 推荐 用 dust.js,你说的我还没试过,好像不是同一样东西,晚点再试再来回贴交流。
  • 其它的还有,尽早写 cucumber 和 rspec,引入 continously integration testing

如果有 40~50 个 controller,我觉得是无比巨大了,可以考虑用 rails engine 切分,或 sub domain / sub web project 切分。 F2E是啥意思?

文档就算了,没有 Project Leader 推动和检查,按国人的习惯,一般都是没有,即使有也很难与代码同步,就连老外也是一样,有注释已经是运气不错了。

No Best Practice, Just Better. 繁体字看的我头晕目旋

@MaFai

其實前兩點我一直猶豫要不要擺上去,但其實我是持反向意見!

減少代碼是好事,但卻增加了維護的困擾,怎麼說呢?HAML 和 CoffeeScript 跟 SCSS 相比,學習門檻較高,沒有辦法無痛上手,加上 F2E 或設計師有很高的機率不會寫 HAML 和 CoffeeScript,有可能因此造成溝通上的困難。除非公司所有 Team member 都會寫且可以確保新進員工有足夠時間可以學習,那我覺得選擇 HAML 和 CoffeeScript 就是件好事。

( F2E = Front End Engineer )

會選擇 handlebars + handlebars_assets 的主要原因:

  1. handlebars 近似純 html
  2. handlebars + handlebars_assets 可以把 template 切割成檔案做整理
  3. handlebars + handlebars_assets 可以預先 precompile 成 Javascript,不需要從後端吐 template

這算是我研究非常多款 template 唯一符合要求的。不過當然還是有些缺點:

  1. Javascript file 的 size 會因此增加
  2. if 只能判斷 true 或 false,有點無用

JS 和 SASS 文章的部份容許我腦袋清醒一點的時候在閱讀 XD

以上是我一點想法,希望可以激發更多討論 :)

好文章! 繁体还好啦,有个朋友用谷歌翻译上俄文网站,无压力。

打不开,赞美我们伟大的 DANG, 早死早超生吧~

#11 楼 @hellolucky123

我们也是从 0 开始的,HAML 和 SASS 都是强硬推下去,效果好。因为上手后大家都喜欢这玩意。至于上不上,这依据团队的情况和项目的需要吧,没有绝对的。

@MaFai 的確!依照需求選擇最適合的模式才是所謂的 Best Practice :)

#16 楼 @hellolucky123 无意冒犯但是能不能换个 WP 的主题(或者换个图),好歹咱也是玩 rails 的,看着能舒服点

@hellolucky123 货不少,一一记录下。谢谢楼主。

@Yujing_Z 哈 我了解!一直很想找時間自己寫一個套 bootstrap,不過手邊比這件事重要的事情太多了,暫時將就一下吧~

谢谢分享~

需要 登录 后方可回复, 如果你还没有账号请 注册新账号