重构 [ Ruby on Rails ] 重構經驗談 (二)

hellolucky123 · 2012年10月25日 · 最后由 hellolucky123 回复于 2012年10月28日 · 3128 次阅读

第二篇出來了,因為最近很忙,沒辦法花時間重新排版,所以一樣麻煩大家到我的部落格去閱讀,如果有板友願意幫我格式化貼上非常歡迎 :)

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

谢谢分享~

看完后,我的第一反应是,能否完全重写,如果有现成的需求文档和之前的设计文档。

顺便可以升级一下 Layout,这样 Front end 那块就不用重构了。直接从新开始,可能更快。

Constant 代替 Model 没看懂,能贴些代码上来不? Redirect -> Redirect -> Redirect 我以前接一个 Java 的项目也是,害我将所有 Redirect 画在纸上才明白它在干啥 :-) ,太痛苦了

不过你说的问题,在其它language也是一样,最近接的一个十年历史的C#也是差不多,全部table view + pop up box, inline css + inline js(without framework)。所以我觉得重写更快一些,但也碰到过一些项目,几年下来,上千个 table,没有 comment,没有文档,根本无从入手,还要不是英文的,变量名字都没看懂。

BTW,看旧代码很伤神的,快听听音乐舒服一下。

@MaFai

因為功能持續開發中,加上完全沒有文擋,所以只有重構這個選擇。

Constant 代替 Model 這個部分,因為代碼牽扯到公司機密,所以我隨便舉個不相干的例子供你參考。

假設一個 User 會有一種 Role,每種 Role 會有各自的屬性,且可能被更改。

正常來講我們會開一個 User model 和 一個 Role model 去做一對多的連結,如果要修改 Role 的屬性就從後台修改。

而我指的 Constant 代替 Model 就是指開一個 User model,把所有 Role 寫成 constant 放在 User model 裡面。

ex:

class User < ActiveRecord::Base
  Role = {
    :normal => { :attribute1 => xxx, attribute2 => xxxx },
    :manager => { :attribute1 => xxx, attribute2 => xxxx },
    :admin => { :attribute1 => xxx, attribute2 => xxxx }
  }
end

讓應該用 model 管理的東西跑到代碼裡。

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