1

例如,假设我们有Users,它们分别通过s、s 和s 与Groups、Events 和其他s 相关。UserMembershipRsvpFriendship

我们应该在哪里通过函数/关系名称(“member”、“rsvp”、“friend”)引用对象实例,在哪里应该通过类名(“users”)引用对象实例?什么时候是User“用户”,什么时候是User“会员”?

我们在模型中使用哪个?(此示例为 group.rb)

has_many :members, through: :memberships, source: :user
# vs.
has_many :users, through: :memberships

我们在Controller中使用哪个?(本例中为groups_controller.rb)

@members = @group.members                    # or @group.users, depending on the model
# vs.
@users = @group.users

我们在View中使用哪个?(本例中为groups/show.html.haml)

- @members.each do |member|                  # or @users.each, depending on the controller
  = "This is a member named #{member.name}"
-# vs.
- @users.each do |user|
  = "This is a member named #{user.name}"

使用函数/关系名称似乎更易读,但使用类名更容易记住。有没有人发现(或发明!)这类事情的彻底和合乎逻辑的约定?

编辑:

  1. 将“更容易记住和重构”更改为“更容易记住”
4

1 回答 1

1

我的约定是始终使用函数/关系名称。我不明白你为什么说用类名更容易记住和重构。我个人发现,当您使用函数/关系名称时,一切都会变得更容易。它也更“灵活”,因为如果明天您决定允许组进入其他组,那么成员仍然有意义,但用户并不完全正确......用户或类名是“当前”实现/解决方案你正在使用什么......功能或关系名称是该对象的使用方式......它与“接口”或您期望它具有的更相关......所以你专注于它应该做什么做什么,它应该解决什么,而不是它如何自动取款机。

通过查看上下文和//运行测试通常也很容易推断出某物的类型或可能的类型,所以我认为函数关系名称添加了很多有用的信息,而另一个添加了无用的信息,这可能是弊大于利。

于 2012-07-28T06:08:43.223 回答