webapp - AngularJS: ¿Controladores/servicios deben ser Pascal Case?(Usando Yo en yeoman)
yeoman project generator (2)
Comencé a usar Yo (yeoman) para andamiar mis controladores, servicios, etc. para angularjs.
Normalmente hago un
yo angular:service passwordService
Estoy usando Camel Case ya que este es el nombre del archivo que crea pero noté que también usa el mismo nombre para el nombre del servicio, así que
passwordService
más bien que
PasswordService
¿Cuáles son las mejores prácticas aquí?
Gracias
Para las convenciones de Javascript, solo debe usar PascalCase
si y solo si la función relacionada es una función constructor
. (Es decir, debe ser llamado con new
) . Es importante porque le permite a los programadores saber que uno tiene que usar uno new
, de lo contrario, this
propiedad se desordenará.
Para fábricas y proveedores, etc., debería utilizar la convención camelCase
.
Actualizar
Si bien mi reclamación inicial se mantiene en un entorno JS fuera de Angular, ahora creo que es mejor usar PascalCase
para las variables inyectadas. Esta ha sido la convención durante mucho tiempo y no vale la pena defenderse. Dado que las variables inyectadas son casi siempre singletes y abarcan toda la aplicación, es correcto diferenciarlas de las variables locales creadas en el alcance de la función.
Vale la pena señalar que en la Guía del desarrollador en muchos lugares (incluida la sección de "servicios" vinculados a), los desarrolladores de AngularJS usan camelcase + primero en minúsculas para los nombres de los servicios y otras cosas. Así que tal vez consideraría que es una buena práctica para AngularJS.
Dicho esto, creo que desde otros idiomas es más común nombrar los servicios y las clases con camelcase + first mayúsculas y, en realidad, resulta que esto tiene una importancia especial. Considere que tiene una clase llamada user
¿cómo llamaría a una variable que contiene una instancia de user
? No podría llamarlo user
sin sombrear extremadamente torpe / propenso a errores.
En AngularJS, sus $resource
servicios terminarán convirtiéndose en sus clases en OO JavaScript "de antaño". Mira:
angular.module(''Foo'', [], function() {}).factory(''User'', function() {
var User = $resource(''/api/user'');
User.prototype.getFullName = function() {
return this.firstName + '' '' + this.lastName;
};
return User;
});
¿Ves a dónde voy con esto? Eventualmente, inyectará su nuevo $resource
User
y lo instanciará:
function MyController($scope, User) {
var someNewUser = new User();
};
O querrá iterar sobre varios usuarios usando un nombre var simple como user
para el elemento actual:
angular.forEach(someUsers, function(user) {
// Good thing you didn''t name your $resource "user"!
// Weird/undesirable shadowing would result here then...
});
Déjeme saber si necesita más aclaraciones sobre por qué creo que la mejor práctica es primero en mayúsculas para los nombres de clase / servicio dado el contexto de JavaScript. (Para el contraste, tenga en cuenta que en PHP los nombres de las variables tienen el prefijo $
, por lo tanto, la sombra no puede ocurrir entre los nombres var y los nombres de las clases. $ User = new User () está perfectamente bien).
Por supuesto, usted podría hacer User = new user()
en JS, pero eso sería todo lo contrario a los estándares de idiomas / guías de estilo existentes.