Подтвердить что ты не робот

AngularJS: Контроллеры/службы должны быть Pascal Case? (используя Yo in yoman)

Я начал использовать Yo (yoman), чтобы поднять мои контроллеры, сервисы и т.д. для angularjs.

Я обычно делаю

  yo angular:service passwordService

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

passwordService

а не

passwordService

Каковы лучшие практики здесь?

Спасибо

4b9b3361

Ответ 1

Стоит отметить, что в Руководство разработчика во многих местах (включая связанные с "сервисами" раздел), разработчики AngularJS используют camelcase + первый строчный регистр имен служб и других вещей. Так что, может быть, вы считаете, что это лучшая практика для AngularJS.

Тем не менее, я думаю, что с других языков чаще всего называют сервисы и классы с помощью camelcase + first uppercase, и на самом деле, как выясняется в JavaScript, это, как представляется, имеет особое значение. Подумайте, что у вас есть класс с именем user -then, что бы вы назвали переменной, которая содержит экземпляр user? Вы не можете назвать его user без особо неудобного/подверженного ошибкам теневого копирования.

В AngularJS ваши сервисы $resource станут вашими классами в OO JavaScript "старых". Посмотрите:

angular.module('Foo', [], function() {}).factory('User', function() {
  var User = $resource('/api/user');

  User.prototype.getFullName = function() {
    return this.firstName + ' ' + this.lastName;
  };

  return User;
});

Посмотрите, где я собираюсь? Вы в конце концов введете свой новый user $resource и выполните его экземпляр:

function MyController($scope, User) {
  var someNewUser = new User();
};

Или вы захотите выполнить итерацию нескольких пользователей с использованием простого имени var, такого как user для текущего элемента:

angular.forEach(someUsers, function(user) {
  // Good thing you didn't name your $resource "user"!
  // Weird/undesirable shadowing would result here then...
});

Сообщите мне, если вам нужно больше разъяснений относительно того, почему я считаю, что наилучшая практика - это сначала прописная буква для имен классов/сервисов с учетом контекста JavaScript. (Для сравнения, считайте, что в PHP имена переменных имеют префикс $, поэтому тени не могут произойти между именами переменных и именами классов. $User = new User() отлично.)

Конечно, вы можете сделать User = new user() в JS, но это будет примерно соответствовать стандартам существующих языков/руководств стиля.

Ответ 2

Для соглашений Javascript вы должны использовать только PascalCase тогда и только тогда, когда связанная функция является функцией constructor. (т.е. нужно вызвать с помощью new). Это важно, потому что программисты могут знать, что нужно использовать new, иначе свойство this будет испорчено.

Для фабрик и поставщиков и т.д. вы действительно должны использовать соглашение camelCase.

Update

Пока мое первоначальное требование сохраняется в среде JS за пределами Angular, теперь я думаю, что лучше использовать PascalCase для введенных переменных. Это была конвенция в течение долгого времени, и она не стоит сопротивляться. Поскольку введенные переменные почти всегда являются одноточечными и широко применяются в приложениях, они чувствуют себя хорошо, чтобы отличать их от локальных переменных, созданных в области функций.