2009-11-02 31 views
7

我正在發一個短信發送模塊。它會處理來自請求的排隊消息,以供後臺工作人員發送電子郵件/短信(或適當地登錄以進行測試)。Rails:當模型?當一個lib?

問題:這是模型(在/ app/models下)還是lib(在/ lib下)。

我想在這個宗教。

理論:(我目前的理論),除非你繼承的ActionMailer :: Base或ActiveRecord的::基地等,你的代碼應該進入庫。理論B :(理論我傾向於)應用特定的東西應該在模型中。任何可能普遍使用的東西都應該在lib中。

理論C:只有「數據模型」應該在'模型'中。儘管如此,ActionMailer子類破壞了這個規則。

據我所知,無論哪種方式,它會正常工作,但我正在尋找一個與其他任何細微的功能或哲學原因。

想法?

+0

我同意你的看法:如果它不是從ActiveRecord和co。繼承的,它不應該是一個模型。我沒有足夠的權利說出將這個觀點轉化爲一個完整的答案思考^^ – marcgg 2009-11-02 00:28:42

回答

5

是否將郵件從ActiveRecord的或繼承的ActionMailer,你可能想爲您的視圖和控制器與交互的任何對象的模型。在你的情況下,他們將處理Message類的實例 - 你需要一個模型。

對於消息發送模塊 - 提取出庫是偉大的,如果你打算在其他地方重用代碼,在那裏你可以包括任何一類的模塊。

由於這只是一個「小」的消息發送模塊,您可能需要在模型開始,最終提取出一個單獨的模塊,它是否可以在其他地方有用或模型過於雜亂。

+0

您是否認爲上面的理論B的這張地圖? – 2009-11-02 20:36:24

+0

是的,你的理論B是正確的。但是,在大多數情況下,您仍然需要一個模型來解決某些可能不適用於特定應用的問題以一個消息類爲例。是的,您可以用同樣的方式與幾個不同應用程序中的消息進行交互,但幾乎總是會出現需要根據每個應用程序重寫或自定義消息行爲的情況。因此,在所有應用程序中創建模型,並使其包含lib(s)。 – bensie 2009-11-03 20:55:41

2

您應該在這裏考慮更多的底層業務。正如其名字所暗示的,模型在這裏代表(模型化)一些現實世界的系統或過程。所以,拇指的規則應該是這樣的:這個實體在我試圖在我的應用程序中表達的系統中扮演什麼角色?如果答案是肯定的,那麼該實體是成爲模特的好候選人。但是,在某個單獨的庫中實現消息傳遞模塊的核心功能以便以後重用並將其包含在模型中將是完全可以的。

+0

你認爲這張地圖上面的理論B? – 2009-11-02 21:20:20

1

我喜歡的「數據模型」理論,我要儘量堅持下去時,我可以,但我認爲Bensie和米蘭有正確的想法。如果您有與之關聯的視圖和控制器,則應該使用模型。如果您僅從另一個類中引用該功能,請將其放入lib中。