6d870e8fea3817df2ffb3f3da460dedb

[ Ruby on Rails ] 重構經驗談

重构hellolucky123 • 于发布 • 最后由 gingerhot回复 • 2038次阅读

會寫這篇文章的初衷是因為公司當初聘請我最重要的任務就是把網站從 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/

共收到 20 条回复
Fc2590129d5efa61a05f476c27b71698

非常好的文章,持续关注

121

已关注~

Large f08750e605d58ff54872d955169ce0c3

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

578

持续关注~

304

谢谢分享~

7ca109ffc0c3f0b2d9361d06c7ea32fe

谢谢。

79

赞美 好文章

04440d2b7409cadad9e86b02c3ab4870

Thanks for sharing this!

4189

我觉得可以改进的有

  • 改用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推动和检查,按国人的习惯,一般都是没有,即使有也很难与代码同步,就连老外也是一样,有注释已经是运气不错了。

Ac1132a622b224a045252b215bd3ee31

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

6d870e8fea3817df2ffb3f3da460dedb

@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

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

Ab989bfcd6ed51d34250507f7a248653

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

1031

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

4189

#11楼 @hellolucky123

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

6d870e8fea3817df2ffb3f3da460dedb

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

B3041e5120710b3a5859f5af5c6d9ba2

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

58bf89ba2dfa037971b05d1afb0480a3

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

6d870e8fea3817df2ffb3f3da460dedb

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

A4873095ad38d35d13eaa37c2f6bf4e9

谢谢分享~

需要 登录 后回复方可回复, 如果你还没有账号你可以 注册 一个帐号。