1

私は2つのクラスを持っていClass AますClass B.

私は最近、それらが多くの同じコードを共有していることに気付きました。例えば:

def viewable_by?(user)
  super || clinic.has_staff_member?(user) || user.system_admin? || self.person == user.person
end

クラス間で重複するコードを最小限に抑えたい。しかし、リファクタリングを行っていると、その多くが、単一責任の原則に完全に収まる 1 つのクラスにうまく収まらないことがわかりました。すべてを 1 つのモジュールに入れたいのですが、メソッドは時間の書式設定、表示権限、およびその他のいくつかのことを行う必要があります。

私が見る限り、私にはいくつかの選択肢があります。オブジェクト指向の観点からは、どのアプローチを使用する必要がありますか? また、その理由は何ですか?

  1. 両方のクラスで共有される 1 つのモジュールを使用します。特定の単一の責任を負わない場合がありますが、コードを大幅にクリーンアップし、すべてを 1 か所に保持します。
  2. 小さなクラスを作成し、両方のクラスをモジュールとして混在させます。それらはすべて単一の責任を負いますが、それらの多くが存在し、そのうちのいくつかは 1 つのメソッドしか持たない場合があります。無駄のようです。
  3. おそらく、時刻の書式設定などにはプレゼンターを使用し、両方のクラスで共有される権限モジュールを使用します。おそらく「よりクリーン」ですが、メソッドはどこにでもあります。
  4. 私がまだ考慮していない別の可能性はありますか?

編集

この質問は、A と B ではなくクラスについて言及Clinic::Appointmentしていました。Clinic::Visit

4

2 に答える 2

0

責任を移せば、デザインはより明確になりますか? 例: user.can_view?(リソース)

于 2013-05-09T21:02:08.143 に答える