私は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 つのメソッドしか持たない場合があります。無駄のようです。
- おそらく、時刻の書式設定などにはプレゼンターを使用し、両方のクラスで共有される権限モジュールを使用します。おそらく「よりクリーン」ですが、メソッドはどこにでもあります。
- 私がまだ考慮していない別の可能性はありますか?
編集
この質問は、A と B ではなくクラスについて言及Clinic::Appointment
していました。Clinic::Visit