6 de dezembro de 2017

Conceitos básicos Angular

O Framework Angular possui alguns conceitos básicos que orientam o desenvolvimento de aplicações a partir dele.
Esses conceitos são utilizados desde a primeira versão, porém, com o avanço do desenvolvimento, eles precisaram ser melhorados.
O primeiro a ser falado é o propósito do Framework: Single Page Applications, ou aplicações de páginas simples, o melhor traduzido, únicas. Esse modelo, desenrola toda a interação da aplicação a partir de uma página central que funciona como um “hub”, provendo acesso via links e fluxos naturais das ações, a todos os outros pedaços da aplicação. Isso é muito importante, porque tudo vem para atender a esse propósito, E se você não está interessado em fazer aplicações SPA, talvez não seja tão interessante trabalhar com o Angular.
Esse objetivo era muito claro na primeira versão, pois, o código tinha uma tendência de evidenciar essas características. Na segunda versão em diante Angular ganhou uma base tecnológica de suporte muito ampla. Temos npm, node.js, typescript, isso deu uma dimensão muito maior ao potencial do framework, que agora está muito mais robusto e cheio de ferramental do que antes.
Vamos começar a falar de alguns dos conceitos mais importantes do Angular. Para fins de listagem, os conceitos que iremos falar aqui são: módulo, componente, serviço e rotas.

Módulos



Começando pelos módulos que sempre existiram desde a primeira versão do Angular. Eles representam as peças modulares de uma aplicação web. Por peças modulares devemos entender blocos inteiros de funcionalidades que estão conectadas por um contexto semântico. Imagine uma aplicação que vai fazer a gestão da folha de pagamento: uma grande parte dessa aplicação será a gestão dos seus usuários, que para ser realizada vai precisar de diversos elementos do Angular construídos para resolver esse problema, o que caracteriza um módulo de uma aplicação Angular. Por outro lado, no mesmo código faz sentido termos um conjunto fechado de funcionalidades que serão responsáveis pelos cálculos de tributação, e isso ficará separado em um módulo para ser reutilizado sempre que for preciso, nesta ou em outra aplicação.
Módulos vão ajudar a separar os grupos de funcionalidades comuns, e favorecer o reuso. É importante que se diga que o design do Angular é projetado para favorecer reuso em diversos aspectos.
Por conta dessa característica forte de reuso, os módulos serão os grandes containers de outros elementos do framework, Tais quais componentes, diretivas, serviços, pipes, rotas, e também podem utilizar para suas funções, referências a elementos de outros módulos.
Toda aplicação feita dessa maneira precisa ter um único módulo raiz. outras funcionalidades e bibliotecas importadas para funcionar em conjunto com essa arquitetura terão de ser módulos importados e configurados normalmente no módulo raiz que representa a aplicação inteira como um todo.
Como informação final, não deve ser confundido com os módulos de JavaScript que tem uma intenção completamente diferente. estes são para separar os blocos reusáveis de código puro JavaScript, e como iremos ver nos próximos elementos, módulo angular tem bem mais do que código JavaScript/TypeScript

Componentes

Quando no Angular 1, havia o conceito de controller. Lá, um objeto JavaScript realiza a lógica da interface, e a comunicação com um backend via serviços REST. Isso já mostrava um conceito inovador pro momento, tornando o código frontend JavaScript como o controller da tua aplicação (Controller no conceito de MVC clássico, como foi cunhado na época do Smalltalk, quando ele responsabiliza-se por verificar o que vem do Model para a View e transmitir corretamente as mensagens da View para o Model).


Esse modelo trouxe um cenário de escalabilidade fora do comum para o cenário da época, pois o frontend se responsabiliza por toda o processamento de telas, deixando o backend livre para procurar resolver os problemas de negócios, concentrando nele somente a camada Model do MVC.


Por si só, isso já é bem interessante, mas a Web evoluiu, e surgiram os Web Components, que são um aglomerado de HTML CSS e JS que tem uma função específica na tela da aplicação. Quando da evolução da versão, o framework agregou a idéia de componentes aos controllers do Angular1 e agora temos os Components, que são objetos TypeScript que concentram as duas funções explicadas: criar um componente de tela que concentra sua lógica de apresentação e comunicação com o backend, atuando como o C do MVC.

Componentes podem (devem) ser reutilizados, mas agregam-se a módulos. Todo módulo tem um componente raiz que é o início da renderização dele. Cada componente é composto por um arquivo HTML, outro CSS, outro TS (TypeScript) que serão (quando transpilados) fundidos em prol da renderização e processamento de elementos visíveis na aplicação.

Serviços

Componentes tem muitas responsabilidades, o que faz com que ele tenha a tendência de agregar muito código fonte. Isso não é bom para o reuso, e por isso, uma parte dessas responsabilidades precisa ser modularizada. É nesse contexto em que os serviços entram em cena.
Serviços serão classes TypeScript que possuem algum trabalho específico, e que são carregadas nos componentes via injeção de dependência (by the way, isso dá mais uma conversa bem grande, pra outro post).


Suponha que você tem de desenvolver um componente que lê um arquivo XML, converte-o para JSON e depois monta um objeto em um formato específico para facilitar a sua manipulação. Esse trabalho faz todo o sentido de ser posto em um serviço, tendo no componente somente as chamadas aos métodos desse serviço.
Rotas
Foi falado que o Angular teve em mente a construção de SPA’s. Para atingir esse objetivo, uma página principal é montada, e uma região dela tem seu conteúdo trocado pelo conteúdo de outra página, que está associada a outro Componente (controller, no caso do Angular1). Essa sequência de caminhos para páginas que serão carregadas e seus elementos JavaScript/TypeScript que os gerenciam é a composição básica de uma rota.

7 de outubro de 2015

[Livro] AngularJS - Uma abordagem prática e objetiva

Sou meio chato pra indicar livros, mas alguns ganham bons pontos comigo, ou porque tem um conteúdo mais constante com relação ao tempo, ou porque são muito bons começos. É o caso dessa indicação de livro aqui:


Esse livro da editora Novatec é bastante sucinto na sua introdução ao angular, cuidando de vários aspectos do framework. É um livro que não se prende a uma só aplicação, tendo uma discussão bem genérica das aplicações de cada recurso, o que é bom para não prender seu juízo em uma situação só, mas sim compreender pra que cada elemento do AngularJS foi feito.

A versão abordada é a 1.2.22, o que já está um pouco defasada (isso meio q é esperado dos livros, não é? não dá pra publicar livros na mesma velocidade em que a tecnologia evolui) mas é com toda certeza uma das melhores introduções aos conceitos básicos do Angular.

O Índice do livro segue abaixo. A quem não teve nenhum contato com Angular, recomendo os capítulos 1, 2, 3, 4, 8, 9 e 11 com prioridade. Os outros capítulos a meu ver tratam de aspectos mais detalhados, e que complicam o começo, mas ajudam quem já esta compreendendo a aprofundar.

·         Capítulo 1 ■ Introdução ao AngularJS
o   Visão geral
o   Por que outro framework?
o   Conceitos importantes
§  Model-View-Whatever (MVW)
§  Model View Controller – client side
§  SPA – Single Page Application
o   Resumo
·         Capítulo 2 ■ Instalação do AngularJS
o   Preparação do ambiente de desenvolvimento
§  Editores e IDEs mais utilizados no mercado
§  Instalação do Sublime Text
o   Instalação do AngularJS
o   Resumo
·         Capítulo 3 ■ Principais conceitos do AngularJS
o   Configuração da single-page
§  Componentes de aplicação single-page AngularJS
o   Model (Scope)
o   Controllers
o   Controllers aninhados
§  Boas práticas
o   Módulos
§  Módulo principal por meio da diretiva ng-app
§  Componentes de um módulo
§  Sintaxe de injeção de dependências utilizada nos módulos
o   Injeção de dependências (DI
§  Problemas gerados pela injeção baseada no nome da dependência
§  Solucionando o problema de injeção pelo nome da dependência
o   View
o   Serviços
§  Value
§  Constant
§  Factory
§  Service
§  Provider
§  Diretivas
o   A diretiva ng-model e o conceito revolucionário Two-Way Data Binding
o   Como criar uma diretiva customizada?
o   Resumo
·         Capítulo 4 ■ Formulários e CSS
o   View com formulário
§  Diretiva ng-click
§  Enviando dados do formulário para o servidor
§  Classes CSS para o estado do formulário
§  Atributos automáticos para campos do formulário
§  Diretiva ng-show e ng-hide
§  Observando alterações no $scope utilizando $watch
o   Aplicando classes CSS (estilos) aos elementos
§  Utilizando uma função por meio da diretiva ng-class
§  Utilizando expressões para acessar atributos do escopo
§  Utilizando um objeto por meio da diretiva ng-class
o   Resumo
·         Capítulo 5 ■ Filtros
o   Overview
o   Criando filtros customizados
o   Criando filtros que permitem passagem de parâmetros
o   Resumo
·         Capítulo 6 ■ Diretivas – Uma abordagem detalhada
o   Ciclo de vida de uma diretiva
§  Fase Compiling
§  Fase Linking
o   Definição de uma diretiva por meio do objeto de configuração
o   restrict
o   priority
o   terminal
o   template
o   templateUrl
o   replace
o   scope
§  scope com valor false
§  scope com valor true
§  scope com valor object
§  Isolated Scope Bindings
§  Text Binding – Prefixo@
§  One-Way Binding – Prefixo &
§  Two-Way Binding – Prefixo =
o   transclude
o   controller e require
§  Modificadores para o atributo require
§  Injeção de vários controllers por meio do atributo require
§  Utilizando um controller externo por meio do atributo controller
o   compile e link
§  pre e post link
o   Diretivas AngularJS mais utilizadas
§  ng-app
§  ng-model
§  ng-controller
§  ng-bind
§  ng-class
§  ng-show e ng-hide
§  ng-{evento}
§  ng-src e ng-href
§  ng-repeat
o   Resumo
·         Capítulo 7 ■ Ciclo de vida
o   Introdução
o   Ciclo de vida de inicialização
§  Fase Compiling
§  Fase Linking
o   Ciclo de vida em tempo de execução (runtime)
§  Loop $digest
o   Resumo
·         Capítulo 8 ■ Eventos
o   Abordagem sobre eventos
o   Ouvindo eventos
o   Emitindo eventos
§  Qual a diferença entre $emit e $broadcast ?
o   Passando argumentos no evento
o   Resumo
·         Capítulo 9 ■ Mecanismo de rotas
o   Route Engine
o   Instalação
o   Entendendo o conceito de rotas
§  when(path, route)
§  otherwise(params)
§  Diretiva ng-view
o   Modo Hashbang versus HTML 5
§  Modo hashbang
§  Modo HTML5
o   Resumo
·         Capítulo 10 ■ Internacionalização e localização
o   Conceito de internacionalização – i18n
§  Por que a sigla i18n?
§  Locale ID
§  Como aplicar i18n com AngularJS?
o   Conceito de localização – l10n
§  Por que a sigla l10n?
§  Aplicando localização com Angular Translate
o   Resumo
·         Capítulo 11 ■ Comunicação com um servidor
o   Serviço $http
§  method
§  url
§  params
§  data
§  headers
§  transformRequest
§  transformResponse
§  cache
§  timeout
§  withCredentials
§  Métodos convenientes existentes no serviço $http
§  Interceptadores de requisição
o   Serviço $resource
§  Como o serviço $resource funciona
§  Funções JavaScript
§  Funções customizadas no $resource
§  $resource como um serviço AngularJS
o   Resumo
·         Capítulo 12 ■ Outros conceitos AngularJS
o   Promises
§  Como criar uma promise
§  Como consumir uma promise
§  Promises e o loop $digest
§  Promises e o callback de notificação
§  Encadeamento de promises
o   Cache
§  Atributo capacity do cache
§  O cache-padrão HTTP
§  Capacidade do cache $http
o   Cookies
o   Outros serviços AngularJS
§  $window
§  $document
§  $templateCache
§  $parse
§  $location
§  $exceptionHandler
§  $filter
§  $compile
§  $timeout
§  $interval
o   Objeto window.angular
§  angular.bootstrap
§  angular.toJson
§  angular.fromJson
§  angular.module
§  angular.lowercase
§  angular.uppercase
§  angular.isUndefined
§  angular.isString
§  angular.isObject
§  angular.isNumber
§  angular.isFunction
§  angular.isElement
§  angular.isDate
§  angular.isArray
§  angular.forEach
§  angular.element
§  angular.copy
o   Testes
§  Node.js
§  Karma
§  Jasmine
§  Testando a aplicação AngularJS
§  Debugando a aplicação
o   Resumo
·         Capítulo 13 ■ RequireJS e AngularJS
o   Introdução
o   AMD e RequireJS
o   Ordem de carregamento dos arquivos
o   Integração RequireJS e AngularJS
o   Como o AngularJS foi carregado?

o   Resumo