Skip to content

Aplicação de exemplo de arquitetura em AngularJS para o artigo da revista Front-end Magazine

License

Notifications You must be signed in to change notification settings

panga/arquitetura-angularjs

Repository files navigation

Aplicação de Exemplo

Esta aplicação de exemplo utiliza o framework AngularJS e já contém toda a estrutura necessária para o desenvolvimento e a distribuição da aplicação, utilizando um conjunto de boas práticas e design patterns que aumentarão a produtividade do desenvolvimento e reduzirão o código boilerplate.

Entre os recursos utilizados posso citar o LESS, mecanismo de log, mock da API back-end, controle de rotas, camada de modelo, animações, loading, testes unitários e testes end-to-end.

Para que a aplicação funcione corretamente é necessário que as dependências do NodeJS sejam instaladas, para isto, abra um terminal, navegue até o diretório raiz da aplicação e execute o comando npm install.

Demonstração

Estrutura de diretórios e arquivos

Árvore

/
    /app
        /assets
            /fonts
            /images
        /components
        /libs
        /mocks
        /scripts
            /config
                config.js
                local.js
                routes.js
            /models
            /services
            app.js
        /states
        /styles
            main.less
        index.html
    /test
        /e2e
            /states
        /unit
            /components
            /mocks
            /scripts
            /states
    /dist
    .bowerrc
    .editorconfig
    .jshintrc
    bower.json
    Gruntfile.js
    karma.conf.js
    package.json
    protractor.conf.js
    resources.json

Descrição

/app -> Código-fonte da aplicação
/app/assets -> Armazena recursos utilizados pela aplicação (imagens, fontes, json, etc.)
/app/assets/fonts -> Específico para armazenar fontes
/app/assets/images -> Específico para armazenar imagens
/app/components -> Armazena os componentes criados para a aplicação (widgets ou directives), podem conter HTML, JS e LESS
/app/libs -> Armazena as bibliotecas utilizadas pela aplicação e que são gerenciadas pelo Bower, podem ser bibliotecas de terceiros ou próprias
/app/mocks -> Armazena os mocks utilizados durante o desenvolvimento da aplicação
/app/scripts -> Armazena os arquivos de scripts da aplicação, pode conter apenas arquivos JS
/app/scripts/config -> Scripts de configuração de aplicação como por exemplo API e rotas
/app/scripts/config/config.js -> Configuração da API e dos providers
/app/scripts/config/local.js -> Configuração local da API utilizada apenas para desenvolvimento
/app/scripts/config/routes.js -> Configuração global das rotas
/app/scripts/models -> Armazena a camada de modelo da aplicação utilizando o pattern Active Record
/app/scripts/services -> Armazena os serviços da aplicação (factories, providers, etc.)
/app/scripts/app.js -> Módulo principal da aplicação AngularJS
/app/states -> Armazena os estados da aplicação (views, controllers e estilos), pode conter apenas arquivos HTML, JS e LESS
/app/styles -> Armazena os estilos da aplicação, pode conter apenas arquivos LESS
/app/styles/main.less -> Centraliza todos os estilos utilizados na aplicação que posteriormente serão compilados no arquivo main.css
index.html -> Página principal da aplicação que utiliza o modelo SPA e inclui todos os recursos de scripts e estilos.
/test -> Armazena os testes da aplicação, utilizando o framework Jasmine
/test/e2e -> Específico para os testes end-to-end da aplicação
/test/e2e/states -> Específico para os estados
/test/unit -> Armazena os testes unitários da aplicação
/test/unit/components -> Específico para os componentes
/test/unit/mocks -> Armazena os mocks utilizados nos testes unitários
/test/unit/scripts -> Específico para os scripts
/test/unit/states -> Específico para os estados
/dist -> Diretório da aplicação gerada para distribuição
.bowerrc -> Configurações do Bower e da estrutura de diretórios da aplicação
.editorconfig -> Configurações de editor do projeto utilizado pelas IDE que o suportam (SublimeText)
.jshintrc -> Configurações de qualidade do código utilizado pelo JSHint
bower.json -> Dependências de bibliotecas da aplicação, deve ser gerenciado pelo Bower
Gruntfile.js -> Configurações de build da aplicação com 20+ plugins configurados e utilizados pelo Grunt
karma.conf.js -> Configurações de testes unitários da aplicação, utilizado pelo Karma
package.json -> Dependências do NodeJS utilizadas no ambiente de desenvolvimento
protractor.conf.js -> Configurações do testes end-to-end da aplicação, utilizado pelo Protractor
resources.json -> Configuração dos recursos utilizados pela aplicação que serão inseridos automaticamente no index.html

Bibliotecas

Os módulos do AngularJS e bibliotecas já incluídas na aplicação são:

Mocks -> Cria mocks para testes unitários e mock da API.

Messages -> Gerencia as mensagens de validação dos formulários.

Animate -> Adiciona animações via CSS para as ações do Angular.

Cookies -> Gerencia os cookies da aplicação.

Sanitize -> Formata e escapa o HTML que será demonstrado na página.

Locale -> Adiciona suporte para localização (pt_BR) nos filtros de data, moeda e pluralização.

UI-Router -> Gerencia as rotas da aplicação, sem utilizar o provedor padrão do Angular.

UI-Bootstrap -> Biblioteca para utilizar os componentes do Bootstrap.

Busy -> Adiciona o controle de carregamento de partes da página utilizando promises.

Loading Bar -> Cria uma barra de progresso global para as requisições HTTP.

Local Storage -> Gerencia o localStorage, novo recurso do HTML5, com fallback para cookies.

Rails Resource -> Camada de modelo da aplicação utilizando o pattern Active Record para se comunicar com a API.

UUID -> Fábrica de identificações no formato UUID.

JQuery -> Biblioteca JavaScript para manipulação de DOM utilizada pelo AngularJS.

Log -> Biblioteca de Logging.

Lodash -> Biblioteca para manipulações de coleções em JavaScript.

Jasmine -> Biblioteca para escrever testes.

Tarefas

As tarefas são gerenciadas pelo GRUNT, que é um build system baseado na execução de tarefas. Uma tarefa pode ser composta de uma ou mais tarefas e geralmente essas tarefas são plugins instalados pelo gerenciador de pacotes da plataforma.

Além disso, elas podem ser executadas de forma paralela, podem possuir classificações específicas (targets) e também executarem indefinitivamente até que sejam interrompidas pelo usuário.

Para executar as tarefas, abra um terminal, navegue até o diretório raiz da aplicação e execute o seguinte comando grunt <tarefa>.
As tarefas pré-definidas são:

build -> Prepara a aplicação para distribuição, executando as tarefas de testes unitários, concatenação, minificação e revisão, disponibilizando a aplicação no diretório dist.

build:dev -> Prepara a aplicação para distribuição, porém não executa as tarefas para tratamento dos arquivos, apenas testa e disponibiliza a aplicação na versão development no diretório dist.

test -> Executa os testes unitários da aplicação que estão no diretório test/unit, existe a opção de autowatch para que os testes fiquem executando e sempre que houver alterações em arquivos os testes são executados automaticamente.

test-e2e -> Executa os testes end-to-end da aplicação que estão no diretório test/e2e, para esta tarefa funcionar é necessário que o selenium webdriver server esteja iniciado, conforme documentação do Protractor, e que possua os navegadores Chrome e Firefox instalados.

server -> Executa um servidor HTTP na porta 9000 e abre o navegador padrão, utilizando os arquivos de desenvolvimento que estão no diretório app e fica escutando por alterações que ocorram nos arquivos, carregando-as automaticamente no navegador que foi aberto, este recurso é conhecido como livereload. Esta opção utiliza os mocks da API que estão mo diretório app/mocks.

server:dist -> Realiza o build da aplicação e executa um servidor HTTP na porta 9000, utilizando os arquivos da versão de distribuição que estão no diretório dist.

Obs.: Algumas tarefas podem gerar o diretório .tmp no diretório raiz da aplicação, este diretório é necessário enquanto as tarefas estiverem sendo executadas, depois disso podem ser apagados e não devem ser versionados.

About

Aplicação de exemplo de arquitetura em AngularJS para o artigo da revista Front-end Magazine

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages