2

Rails アプリで STI を使用する適切な時期はいつですか? 多くの読書 (この優れた Railscastを含む) の後、私は自分のニーズに最適なアプローチが何であるかまだわかりません。

この (不自然な) 例は、私のジレンマを示しています。

User クラスが、医師や患者を含むいくつかのサブクラスに分類できるとしましょう。これらは単純な役割ではなく、重要なデータとロジックの違いがあります。

Doctor には、特定のデータベース フィールド (例: 資格、専門分野)、特定のビュー ロジック (例:if User.doctor? then患者のリストの表示)、および特定のロジックと役割 (例: 患者の記録を管理できる) があります。

患者には、さまざまなデータベース フィールド (血液型など)、ビュー ロジック (if User.patient? then治療リストの表示など)、およびロジック (予約を編集できるなど) があります。

医師と患者の両方:username, :email, :passwordに共通のフィールドがあり、アプリの残りの部分全体でかなりの量のロジックがあります (例: User has_many :comments, :messages, etc)。

私の読書から、患者と医師が異なる論理要件を持っているという事実は、STI が適切である可能性があることを示唆しています。ただし、データベース フィールドが異なる場合は、ポリモーフィックの方が優れたアプローチになる場合があります。

しかし....

ユーザーは、同時に医師と患者の両方になることができます。

この問題に対する「最善のアプローチ」はありますか?

4

1 に答える 1

1

STI は、単一の列を使用してオブジェクトのタイプを判別します。

一見したところ、これは User、Doctor、Patient、DoctorPatient クラスが必要であることを示していますが、これは私には少しばかげているように思えます。他のタイプが追加された場合、さらにループする可能性があります。

Doctor、Patient などの機能を別のクラス (およびテーブル) に移動することは、それ以上何も知らなくても理にかなっているように思えますが、他の人々はより有用な情報を持っている可能性があります。

于 2013-03-27T23:19:06.617 に答える