22

データベース コンポーネントではないモデルを持つアプリを構築しています。Rails コミュニティでこの問題に取り組むために他の人が何をしているか知りたいです。

それらをどこに置くか、私たちは苦労しています。

私たちは持っているべきです:

app/models/domain

また

app/domain/models

多分

app/models   # Business Models
app/models/ar # Active Record Models

多分

app/models/domain/   # Business Models
app/models/domain/ar # Active Record Models

これの一部は、Rails の標準にどれだけ近づけるか、必要なものに適した構造をどれだけ作成するかに苦労していることです。

オブジェクトをサービス オブジェクトと考えると、

app/models/service-object

app/models/ # For plain active record

ダウンする別のルートは、アプリ内に物がありません。

/service_objects

それ以外の

/app/models/service_objects

おそらく、Rails アプリ経由でアクセスしたい場合は、構成よりも規則を利用するために app/ を使用する方が適切です。

4

4 に答える 4

18

私の経験では、これらのモデルを配置する場所の分割は、アプリケーションの特定のコンテキストでそれらが機能的に表すものに帰着します。

私は通常app/models、リソース ベースのモデルを予約します。そのモデルが、アプリケーションによってインスタンス化および操作されるリソースを表す場合は、ここに移動します。AR や db に裏打ちされている必要はありません。

モデルが一貫した機能を提供するが、パラメーターが異なる場合は、アプリで最上位のディレクトリを指定します。などapp/mailers app/observers。ただし、オブザーバーを必要とするリソースが 1 つある場合、app/observersディレクトリにファイルが 1 つしかないのは意味がないかもしれません。

他のすべてが入りlibます。これが好ましい理由はいくつかあります。

  1. でファイルをいつ要求するかを選択できますlib。アプリの起動時にどのファイルを読み込むかについて、より細かく選択できます。すべてを入れるとapp/models、何がロードされるかについての粒度がなくなります。

  2. lib では、アプリの成長に合わせてモデルの名前空間を設定する方が簡単です。確かに名前空間を使用できますがapp/models、ネストのいくつかのレイヤーはapp/models常に厄介になります。名前空間を に保つのが最善libです。

  3. 物事を機能的に正しい場所に置くと、ハウスキーピングがはるかに簡単になります。資源じゃない?オブザーバーじゃないの?にある必要がありlibます。これを事前に検討している理由は、開発者が後で見つけやすくなるようにするためです。

于 2013-05-16T23:44:55.617 に答える
14

サービス オブジェクトの場合、通常は app ディレクトリの直下に配置しますapp/services/。ワーカーとシリアライザーもこのパターンに従いますapp/workers/ app/serializers/。AR ではないモデルについては、models ディレクトリに貼り付けることができます。それは私の見解です。

于 2013-05-09T16:03:22.603 に答える
10

それらがモデルの場合app/models、このディレクトリは ActiveRecord サブクラスだけでなくモデル用であるため、それらを配置する必要があります。

于 2013-05-16T14:41:20.650 に答える
2

モデルではないクラスがある場合、たとえばフォームを表している可能性がある場合は、先に進んでlib.

それらがアプリケーションと直交している場合、つまり、別のアプリケーションを呼び出すために使用されるインターフェイスである場合、コミュニティの残りの部分への適用性に応じて、プライベートまたはパブリック gem としてラップすることができます。

結局、それは本当に問題ではありません。1 つ選んで、チームの他のメンバーと同意します。アプリケーションのロード パス ( ) に使用することに決めたものを追加する場合は特に、物事を移動するのは非常に簡単です$LOAD_PATH += '...'

于 2013-05-15T22:44:34.997 に答える