什么应该在MVC中通过函数/关系(而不是类)引用对象?

时间:2012-07-28 05:35:54

标签: ruby naming-conventions

例如,假设我们有User个,与GroupEvent和其他User相关Membership s ,RsvpFriendship分别为。

我们应该在哪里通过功能/关系名称(“成员”,“rsvp”,“朋友”)来引用对象的实例,我们应该在哪里通过类名(“用户”)引用对象的实例? 即。何时是User“用户”,何时是User“成员”?

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

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

我们在控制器中使用了哪些内容? (本例中为groups_controller.rb)

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

我们在查看中使用了哪些内容? (本例中为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. 将“更容易记住和重构”改为“更容易记住”

1 个答案:

答案 0 :(得分:1)

我的惯例是始终使用函数/关系名称。我不明白为什么你说用类名更容易记住和重构。我个人发现使用函数/关系名称时一切都更容易。它也更“灵活”,因为如果明天你决定允许组在其他组内,那么成员仍然有意义,但用户不是那么正确......用户或类名是“当前”实现/解决方案您使用的是什么...功能或关系名称是该对象的使用方式...它与“界面”或您期望它具有的相关性...所以您关注它应该是什么做什么,它应该解决什么,而不是它如何做到ATM。

通过查看上下文和/或运行测试来推断某些类型或类型的东西通常也很容易,因此我认为函数关系名称会添加许多有用的信息,而另一个会添加无用的信息,这可能比对手更好。