2012-03-28 14 views
7

最近RoR開発者でもある私の友人とのディスカッションがありました。私たちはRailsモデルをどのように管理すべきかについて主張しました。個人的には、ルートモデル(User、Article、Billなど)のみをデフォルトの名前空間に残しておきたいと思います。従属モデルは、ルートの名前を持つモジュール(User :: Profile、User :: Activityなど)に移動します彼らが関連付けられているモデル。Railsアプリケーションの名前空間モデル

一方、私はuser_profile、user_activityなどと呼ばれるデフォルトの名前空間に100個のモデルがある多くのプロジェクトを見てきました。 Java(Spring)の開発で判断すると、Javaコミュニティはクラスをパッケージ化し、それらを論理的にグループ化する傾向があり、非常に魅力的です。

問題は次のとおりです。モジュール内のモデルをグループ化する際に欠点はありますか(関係定義のextra:class_nameは除きます)、人々が通常それをしない理由は何ですか?

答えて

4

名前空間には利点がありますが、モデル全体に​​例外を追加する必要があります。 Foo :: Barはテーブル名をbarsとし、同様にbar_idをアソシエーションに使用しますが、代わりにfoo_barsfoo_bar_idを使用することをお勧めします。

これについて本当に気に入っている場合は、これを修正するアドオンがあるかどうかを確認したり、独自の拡張機能を実装することができます。

私が名前空間を使用した唯一のケースは、ルートレベルのモデル名を迷惑に思うようにしたくない第三者のアプリケーションで使用されるアドオンの場合です。この場合の余計な努力は価値があります。

グループ化せずに100以上のモデルファイルを見ることに悩まされている場合は、グループ化されていない100以上のテーブルを見ると、おそらく同じように悩まされます。

コントローラは非常に自然にグループ化することができますが、少なくともActiveRecordではなく、モデルが容易には対応できません。

+2

データベースエクスプローラを最後に開いたときは思い出せません。ルビーでは、自然にそのようなことを抽象化します。 私が覚えている限り、Foo :: Barは "foo_bar"テーブルを生成します。唯一の欠点は、関連でa:class_name => Foo :: Barを指定する必要があることです。 すべてのモデルを1つのディレクトリに保存することを奨励する場合、レールアプリケーションは複雑なアプリケーションをどのように扱うのだろうと思います。アプリケーションが大きくなりすぎると、必要なリファクタリングの一部を名前空間に入れたり、Javaに切り替えるだけですか? – FreeCandies

+6

私は通常、接頭辞を一種の名前空間として使用するアプローチをとるため、UserProfileやUserActivityのようなものを作成しますプロファイルまたはアクティビティの代わりにこれにより、リスティングには自然な並べ替えが行われます。ネームスペースから大幅に利益を得る500以上のモデルを持つアプリケーションを見ることはまれです。複雑なことは複雑です。アプリケーションをどれだけ複雑にするかは、複雑さを埋めるだけで簡単に見つけようとするよりも正直である方が良い場合もあります。 – tadman

関連する問題