私の友人とのさらに別の議論。次のコードを検討してください。
class User < ActiveRecord::Base
has_many :groups
def in_group?(group)
groups.include?(group)
end
end
class Group < ActiveRecord::Base
has_many :members
def add_user(user)
members << user
end
end
私の意見では、これらのメソッドはコードに不必要な複雑さを追加し、ほとんど推測できません。たとえば、なぜ #in_group? #is_a_member_of? ではない、または #add_user でありながら #add_member ではない理由など。Rails での 4 年間の経験と合計 20 年間のプログラミング経験から、AR セマンティクスに従い、User#groups.include?(group) と Group#members << user を使用した方がよいでしょう。それらは簡単に推測でき、追加機能が必要な場合に備えて、has_many :members のコールバックを使用して、User#groups.include? をオーバーライドできます。必要な場合は、関連拡張モジュールで。
ただし、私の友人は、ショートカットを使用して「抽象化のポイント」を作成する方が良いと主張しており、コールバックやオーバーロードを使用するよりもこのコードを拡張する方が良いと主張しています。
どう思いますか?
PS明確にするために、私は「WHAT IF」アプローチが嫌いです:)