Naming
ou Nomenclatura
Diretrizes de Nomenclatura
Use nomes consistentes para todos os componentes seguindo um padrão que descreva a funcionalidade do componente e (opcionalmente) seu tipo. Meu padrão recomendado é
característica.tipo.js
. Existem dois nomes para a maioria dos componentes:- o nome do arquivo (
avengers.controllers.js
) - o nome de componente registrado pelo Angular (
AvengersController
)
Por que? As convenções de nomenclatura ajudam a fornecer uma maneira consistente de encontrar algo à primeira vista. Consistência dentro do projeto é vital. Consistência dentro de um time é importante. Consistência em toda a empresa proporciona uma enorme eficiência.
Por que? As convenções de nomenclatura deveriam simplesmente te ajudar a encontrar trechos do seu código mais rápido e torná-lo mais fácil de se entender.
- o nome do arquivo (
Feature File Names
ou Nome para funcionalidades
Use nomes consistentes para todos os componentes seguindo um padrão que descreve a funcionalidade do componente e, em seguida, (opcionalmente) o seu tipo. Meu padrão recomendado é
feature.type.js
.Por que? Fornece uma maneira consistente para identificar componentes mais rapidamente.
Por que? Fornece um padrão apropriado pra qualquer tarefa automatizada.
/** * opções comuns */ // Controllers avengers.js avengers.controller.js avengersController.js // Services/Factories logger.js logger.service.js loggerService.js
/** * recomendado */ // controllers avengers.controller.js avengers.controller.spec.js // services/factories logger.service.js logger.service.spec.js // constants constants.js // module definition avengers.module.js // routes avengers.routes.js avengers.routes.spec.js // configuration avengers.config.js // directives avenger-profile.directive.js avenger-profile.directive.spec.js
Nota: Outra convenção comum é nomear arquivos dos controllers sem a palavra
controller
no nome do arquivo comoavengers.js
em vez deavengers.controller.js
. Todas as outras convenções ainda mantêm o uso de um sufixo do tipo. Controllers são o tipo mais comum de componente, portanto isso só economiza digitação e ainda é facilmente identificável. Eu recomendo que você escolha uma convenção que seja mais coerente para sua equipe./** * recomendado */ // Controllers avengers.js avengers.spec.js
Test File Names
ou Nome para aquivos de testes
Nomeie as especificações de testes de forma similar aos componentes que elas testam, com o sufixo
spec
.Por que? Fornece um modo consistente para identificar rapidamente os componentes.
Por que? Fornece padrões de correspondência para o karma ou outros test runners.
/** * recomendado */ avengers.controller.spec.js logger.service.spec.js avengers.routes.spec.js avenger-profile.directive.spec.js
Controller Names
ou Nomes para controller
Use nomes consistentes para todos os controllers nomeados após as sua funcionalidade. Use UpperCamelCase para os controllers, assim como para seus construtores.
Por que? Fornece um modo consistente para identificar e referenciar os controllers.
Por que? O UpperCamelCase é o modo mais comum para identificar objetos que serão instanciados através de construtores.
/** * recomendado */ // avengers.controller.js angular .module .controller('HeroAvengers', HeroAvengers); function HeroAvengers(){ }
Controller Name Suffix
ou sufixo "Controllers"
Complemente o nome do controller com ou sem o sufixo
Controller
. Escolha uma opção, não ambas.Por que? O sufixo
Controller
é mais usado e mais descritivo./** * recomendado: Opção 1 */ // avengers.controller.js angular .module .controller('Avengers', Avengers); function Avengers(){ }
/** * recomendado: Opção 2 */ // avengers.controller.js angular .module .controller('AvengersController', AvengersController); function AvengersController(){ }
Factory Names
ou Nomes para factory
Use nomes consistentes para todas as factories nomeadas após sua funcionalidade. Use a conveção camelCase para services e factories. Evite prefixos com
$
.Por que? Fornece um modo consistente de identificar e referenciar rapidamente as factories.
Por que? Evite colisão de nomes com factories e services pré-programados que usam o prefixo
$
./** * recomendado */ // logger.service.js angular .module .factory('logger', logger); function logger(){ }
Directive Component Names
ou Nomes para directive
Use nomes consistentes para todas as directives usando a convenção camelCase. Use um prefixo curto para descrever a área a qual a directive pertence (como prefixo da compania ou do projeto).
Por que? Fornece um modo consistente de identificar e referenciar rapidamente os componentes.
/** * recomendado */ // avenger.profile.directive.js angular .module .directive('xxAvengerProfile', xxAvengerProfile); // usage is <xx-avenger-profile> </xx-avenger-profile> function xxAvengerProfile(){ }
Modules
ou Módulos
Quando há vários módulos, o arquivo principal deste módulo é nomeado
app.module.js
, enquanto os módulos dependentes são nomeados de acordo com o que eles representam. Por exemplo, um módulo admin é nomeadoadmin.module.js
. Os nomes dos respectivos módulos registrados seriamapp
eadmin
.Por que? Fornece consistência para múltiplos módulos, e para expansão para grandes aplicações.
Por que? Fornece um modo fácil para automação de tarefas, a fim de carregar todos as definições dos módulos em primeiro lugar, então os demais arquivos (empacotamento).
Configuration
ou Configuração
Separe a configuração do módulo em seu próprio arquivo, nomeado após o módulo. Um arquivo de configuração para o módulo principal
app
é nomeadoapp.config.js
(ou simplesmenteconfig.js
). Uma configuração para o móduloadmin.module.js
é nomeadaadmin.config.js
.Por que? Separa a configuração do módulo da definição, dos componentes e do código ativo.
Por que? Fornece um local identificável para definir as configurações de um módulo.
Routes
ou Rotas
- Separe as configurações das rotas em seus próprios arquivos. Os exemplos podem ser
app.route.js
para o módulo princial, eadmin.route.js
para o móduloadmin
. Mesmo nas menores aplicações, prefiro esta separação das demais configurações. Uma alternativa é um nome mais longo, comoadmin.config.route.js
.