我有两个班,Class A
和Class B
。
我最近注意到他们共享很多相同的代码。例如:
def viewable_by?(user)
super || clinic.has_staff_member?(user) || user.system_admin? || self.person == user.person
end
我想最小化类之间重复的代码。但是在重构中,我发现其中的大部分内容并不能完全符合单一职责原则的一类。我想将它们全部放在一个模块中,但这些方法将与时间格式、查看权限和其他一些事情有关。
在我看来,我有几个选择。(我敢打赌,你可以推荐其他人。)从面向对象的角度来看,我应该采用哪种方法,为什么?
- 使用两个类之间共享的一个模块。它可能没有特定的单一职责,但它确实显着地清理了代码,并将其全部保存在一个地方。
- 制作小类并作为模块混合到两个类中。他们都将有一个单一的职责,但会有很多,其中一些可能只有一种方法。好像很浪费。
- 也许使用演示者来进行时间格式化,以及两个类之间共享的权限模块。也许“更清洁”,但方法将无处不在。
- 我还没有考虑过的另一种可能性?
编辑
这个问题之前提到过Clinic::Appointment
和Clinic::Visit
班,而不是A和B。答案可能是指约会和访问。