Еще один спор с моим другом. Рассмотрим этот код:
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 и т. д. Исходя из моего 4-летнего опыта работы с Rails и общего 20-летнего опыта программирования, мне лучше следовать семантике AR и использовать User # groups.include? (Group) и Group # members << user. Они легко угадываются, и в случае, если мне понадобятся дополнительные функции, я могу использовать обратные вызовы для has_many: members и переопределить User # groups.include? в модуле расширения ассоциации, если это будет необходимо. </p>
Однако мой друг утверждает, что для создания «точек абстракций» лучше использовать ярлыки, и лучше расширять этот код, а не использовать обратные вызовы или перегрузки.
Что вы думаете?
P.S. просто чтобы быть ясно, я ненавижу подход "ЧТО, ЕСЛИ":)