2010-09-05 53 views
2

這與許多可能的答案一個複雜的問題,所以我將我的處境分解成簡單的要點,以幫助縮小解決方案:什麼時候適合在Rails應用程序中使用自定義類?

我的Rails應用程序具有以下「對象」

  1. 作者
  2. 飼料
  3. 更新
  4. FeedTypes

的對象是相關的,像這樣:

  1. 作者可以有1個或多個飼料
  2. Feed可以有一個或多個更新
  3. 的進料具有一個的FeedType

實施例設置:

我的問題,我的問題,內部的微博

我需要解析上面提到的feed並存儲每個twee t在updates表中。爲了解析飼料,我想編寫一個自定義Feed類將被TwitterFeed得到繼承,FacebookFeedTumblrFeed

然而,我不知道這是否是解決這類的「最佳實踐」的問題。

問題:

  1. 什麼時候適合開發自定義的類來執行RoR中的一項行動(而不是通過模型或控制器去)?
  2. 如果這種情況不需要自定義類,我應該使用哪個元素解析邏輯?模型還是控制器?
  3. 如果這是一個自定義類的適當情況,我應該在哪裏存儲它(換句話說,什麼是正確的'約定')?

回答

1

您可能會隨時調用一個後臺任務來檢查所有提要,獲取新更新並將其存儲在數據庫中。這個任務與控制器是完全分開的,應該可以在沒有任何控制器邏輯的情況下調用它。

您的抽象看起來很好。如果幾個Feed共享一個通用的XML結構,那麼您可以進一步使用XmlFeed < Feed之類的東西。

1)控制器應該與數據庫/模型交談並將相關數據傳遞給視圖進行渲染。其他一切應該在模型,幫手或圖書館。

2)你問的解析邏輯屬於哪裏?在MVC中,我認爲這屬於Model和/或helper類,但絕對不是控制器..這不是它的責任。

3)持有數據的類進入應用程序/模型。與保存數據無關的類進入lib目錄。

+0

如何在Feed模型中使用「loadUpdates」或「parse」方法?那是合法的嗎?我問,因爲無論何時加載主頁面,給定提要的所有更新都將被刪除,然後重新插入,無論它們是多麼新。 – 2010-09-06 01:13:50

+0

你真的想讓用戶等待代碼提取feed(可能或不可用),解析它並呈現它嗎?這可能需要幾秒鐘的時間。恕我直言,更好的方法是每5分鐘調用一次任務(或者更常見的是,如果你想保持新鮮的Feed,但會消耗更多的CPU和帶寬)。 'loadUpdates'符合,它可以在'Feed'中,因爲這是所有提要共享的東西。但是,您應該使用lowercased_and_underscored而不是..即。 'load_updates'。這是方法名稱的ruby命名約定。 – randomguy 2010-09-06 10:46:53

+0

如果您仍然喜歡在用戶加載主頁面時更新,那麼只需從主頁面操作中調用'load_updates'即可。因爲你不訪問這些數據,所以你不需要更新表。從'load_updates'返回一組更新。 – randomguy 2010-09-06 10:51:28

1

如果合適,不要回避使用自定義類。如果你需要另一個班級,然後添加一個班級,你使用rails的事實與該決定無關。

相關問題