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
для введенных переменных. Это было соглашение в течение долгого времени, и не стоит сопротивляться. Поскольку внедренные переменные почти всегда являются синглетонами и имеют широкое применение, вполне логично отличать их от локальных переменных, созданных в области действия функции.