AngularJS: Контроллеры / Сервисы должны быть в Pascal Case? (используя Йо в Йомене)

Я начал использовать Yo (yeoman) для создания своих контроллеров, сервисов и т. Д. Для angularjs.

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

  yo angular:service passwordService

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

passwordService

скорее, чем

PasswordService

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

Спасибо

2 ответа

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

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

В AngularJS ваш $resource сервисы в конечном итоге станут вашими классами в ОО 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();
};

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

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

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

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

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

Для заводов, поставщиков и т. Д. Вы должны использовать camelCase условность.

Обновить

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

Другие вопросы по тегам