2011-05-07 36 views
1

我有一個Rails 2.X模型,包含421行代碼/註釋,它們在後端執行大量工作(打開HTTP Get請求,解析RSS,解析HTML等)。與此同時,我正在轉向Resque,以便更快地完成這個後端代碼。我想知道重構這個最好的方法是什麼。我應該將這個後端代碼移動到我包含在模型中的庫中嗎?一個模塊?寶石?如何重構包含大量後端代碼的Rails模型?

您的想法將不勝感激。

我基本上有一個單獨的核心任務,我正在處理每個數據項。即解析RSS提要,解析HTTP URL,在該html正文上運行正則表達式,以及一些其他任務,現在我在模型中有500或代碼行;儘管大部分的東西的模型並通過由cron運行後端腳本調用

所以,使其更易於使用的,並使其更易於移動到resque;我想這樣做分班授課,每個resque隊列,並使用靜態方法有

然後,我可以通過後端的「控制器」腳本需要這些類,如果你會...有沒有這種做法合理嗎?

回答

1

從測試性和思考過程的角度來看,最好的辦法是將這些不同的問題分解到他們自己的(非ARec)模型中。根據您的第一段,您可能會有RssParser,HtmlParser,ServiceRequest等。

不同的地方這些東西被使用(多個項目?),它可能是有意義,使自己的寶石和版本吧。

我以前寫的大,小resque類,如果你讓resque類儘可能的薄,就能爲您節省了不少的苦。

0

根據我的經驗,如果這個代碼將被用於多個應用程序,也許一個寶石值得考慮。否則,通過將代碼移動到寶石來添加間接層似乎不會產生太大的好處。事實上,它可能會放慢發展,具體取決於您的部署情況。

至於如何重新因子模型,期待通過模型的所有代碼,併爲自己的問題「什麼是這個模型做什麼?」。如果最後有很多'和'或'或',那麼你應該努力使每個項目由'和'或'或'分類(見http://en.wikipedia.org/wiki/Single_responsibility_principle)。以這種方式分解責任使得個人的關注更易於編寫測試。特別是在進行外部HTTP api調用時等。

1

有問題的模型正在做很多事情。

在一個結構良好的應用程序中,每個班級都會做一件事,做得很好。結構良好的應用程序的這一特性是高度可測試性的一部分。

你應該掰開很多事情的一個模式確實爲多個自包含的類,保持它們之間的依賴很小。然後,您將可以輕鬆測試每個新類,並且您將有許多新的存根點來測試整個模型。