1

たとえば、それぞれ s、 s、およびs によってs、s 、およびその他の sUserに関連付けられている s があるとします。GroupEventUserMembershipRsvpFriendship

オブジェクトのインスタンスを機能名/リレーショナル名 ("member"、"rsvp"、"friend") で参照する場所と、オブジェクトのインスタンスをクラス名 ("users") で参照する場所はどこですか? つまり、いつUser「ユーザー」で、いつUser「メンバー」ですか?

Modelではどれを使用しますか? (この例では 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

私の慣例は、常に関数/関係名を使用することです。クラス名の方が覚えやすく、リファクタリングしやすいと言う理由がわかりません。個人的には、関数/関係名を使用するとすべてが簡単になることがわかりました。明日、グループが他のグループ内にあることを許可することにした場合でも、メンバーにはまだ意味がありますが、ユーザーはそれほど正しくないため、より「柔軟」です...ユーザーまたはクラス名は「現在の」実装/ソリューションです使用しているものの...機能名または関係名は、そのオブジェクトがどのように使用されるかです...それは、「インターフェース」または期待するものにより関連しています...したがって、何に焦点を合わせるべきかATM をどのように行うかではなく、何を解決する必要があるかを示します。

また、コンテキストを調べたり、テストを実行したりすることで、何かのタイプまたは可能なタイプを推測することも一般的に簡単です。そのため、機能的なリレーショナル名は多くの有用な情報を追加し、他の名前は役に立たない情報を追加すると思います。善よりも敵。

于 2012-07-28T06:08:43.223 に答える