Когда мы должны рассмотреть возможность использования частного или защищенного? - PullRequest
10 голосов
/ 04 января 2012

Просто интересно, когда на самом деле мы должны использовать private или protected для некоторых методов в модели?

Иногда я не могу не потрудиться сгруппировать свои методы в private или protected.Я просто оставляю все как есть.Но я знаю, что это плохая практика, иначе эти 2 группировки не будут созданы в программировании.

Спасибо.

Ответы [ 3 ]

15 голосов
/ 04 января 2012
  • Если вы планируете вызывать метод извне, record.method(), тогда "public"
  • Если он будет использоваться только для внутреннего использования, self.method(), тогда «private»
  • Если вы планируете использовать его внутренне, но также и в потомках, self.method() # in subclass, тогда «защищено»
2 голосов
/ 04 января 2012

Я выскажу свое мнение , и, возможно, я получу за это удар, но я не беспокоюсь о защищенных или приватных в Ruby. Реальность такова, что Ruby относится к вам, как к взрослому, если вы хотите запустить закрытый метод вне класса, вы можете (там - это путей ). Вы можете запускать защищенные методы вне класса. Вы даже можете переназначить константы ... вы можете делать все, что захотите, в основном.

И вот почему мне это нравится, это ваша ответственность. Мне кажется, что для того, чтобы пометить что-то как защищенное или личное, вы делаете две вещи:

  1. Указывает , что вы не думаете, потребителю это понадобится.
  2. Второй угадать, что кому-то еще нужно.

и, кроме того, вы затрудняете его тестирование, поскольку это может быть серьезной проверкой частных методов (см. Каков наилучший способ модульного тестирования защищенных и закрытых методов в Ruby? для способов вокруг него)

По этим двум последним причинам я не беспокоюсь о них. Если вы действительно хотели какой-то барьер между вашими классами / методами и потребителями (будь то код или разработчики), то есть другие, более эффективные способы (прокси, обфускация, шифрование, методы, защищенные паролем и т. Д.). В противном случае, почему бы не дать им доступ к тем же инструментам, которые вы использовали?

0 голосов
/ 04 января 2012

Я не знаю Ruby как особый случай, но я предполагаю, что ответ будет таким же, как и для других языков, поэтому вот оно:

Закрытый метод может быть доступен только членам того же класса, тогда как защищенный также доступен для членов классов, расширяющих базовый класс, в котором объявлен метод.

...