2012-03-28 68 views
7

我最近與我的一位同時也是RoR開發人員的朋友進行了討論。我們討論瞭如何管理Rails模型。就我個人而言,我喜歡僅在默認名稱空間中保留根模型(例如User,Article,Bill等),並且依賴模型會以root的名稱進入一個模塊(例如User :: Profile,User :: Activity)他們與之相關的模型。Rails應用程序中的命名空間模型

另一方面,我見過很多像默認命名空間中有100個模型的項目,比如user_profile,user_activity等等。從Java(Spring)開發的角度來看,java社區傾向於將包裝類組織起來,並將它們按邏輯分組,這讓我覺得非常有吸引力。

所以問題是:模塊中的模型分組是否存在任何缺點(關係定義中的extra:class_name除外),以及人們通常不這樣做的具體原因是什麼?

回答

4

儘管命名空間有其優點,但它確實需要在整個模型中添加例外。 Foo :: Bar假設表格名稱爲bars,同樣bar_id用於關聯,而您可能更願意使用foo_barsfoo_bar_id

如果你確實對此感到強烈,你可能想看看是否有一個附件爲你解決這個問題,或者實現你自己的擴展。

當我使用名稱空間時,唯一的情況是用於第三方應用程序的附加組件,因爲我不想聲明根級模型名稱,因爲這會導致惱人的問題。在這種情況下額外的努力是值得的。

如果您對沒有任何分組的100多個模型文件感到困擾,您可能會同樣看到100多個沒有分組的表格,這通常是您無法修復的問題。

控制器可以很自然地進行分組,但模型不容易適應,至少不需要股票ActiveRecord。

+2

我不記得上次打開數據庫瀏覽器。隨着紅寶石自然而然地抽象這樣的事情。 據我記得,Foo :: Bar會生成一個「foo_bar」表。唯一的缺點是你必須在關聯中指定一個:class_name => Foo :: Bar。 我想知道如果rails應用程序鼓勵將所有模型保存在一個目錄中,它應該如何處理複雜的應用程序。我的意思是,如果應用程序增長過多,命名空間是需要重構的一部分還是隻能切換到Java?) – FreeCandies 2012-03-28 20:03:44

+6

我通常採用使用前綴作爲一種命名空間的方法,因此您可以創建諸如UserProfile和UserActivity而不是簡介或活動。這導致了列表中的自然分組。很難看到具有500多個模型的應用程序會從命名空間中顯着受益。複雜是複雜的。有時候最好誠實地說一下你的應用程序的複雜程度,而不是試圖通過掩蓋複雜性並使其更難以找到事情來假裝它很簡單。 – tadman 2012-03-28 20:10:31

相關問題