- AngularJS é um framework totalmente separado do Angular 8, 9...
- Interface visual, arquitetura de informações, a navegação, a usabilidade: ESTÁTICO.
- Funcionalidade, lógica, implementação da interface e design, interação: DINÂMICO.
- Como o usuário interage com o produto; e
- PARTE FÍSICA.
- Qual é o sentimento que o usuário leva dessa interação; e
- PARTE EMOCIONAL.
- São sistemas projetados para utilização através de um navegador, através da internet ou aplicativos desenvolvidos utilizando tecnologias web.
- Pode ser executado a partir de um servidor, localmente e/ou no dispositivo do usuário.
- Bootstrap, NodeJS, Angular, Ionic, AngularJS, CSS, HTML, JS, Jquery, Express, Restify, ReactJS e Flutter.
-
Ideia, fluxo, codificar, testar, refatorar;
-
Importância de saber o “o porquê”;
-
Saber pesquisar pois ninguém sabe tudo (decorar);
-
Melhorar a programar, precisa programar (pratique, desafie-se);
-
Melhor forma de aprender é praticando;
-
Performace;
-
Mimificação código;
-
Fluxo;
-
Testes; e
-
Segurança.
- Não se repita (tradução), criado por Andy Hunt;
- Separação das responsabilidades;
- Cada funcionalidade deve ser representada apenas uma vez;
- Repetição é desperdício;
- Menos é mais e quanto mais simples/enxuto melhor; e
- Bom planejamento e refatoração.
- Na maioria das vezes o cliente não sabe o que QUER, o que PRECISA então…
- Nosso objetivo é solucionar problemas, automatizar processos… Com aplicações web. Então…
- Será que ele precisa disso?
- Framework
- HTML é ótimo para declarar documentos estáticos, mas não atende quando tentamos usá-lo para declarar visualizações dinâmicas em aplicativos da web.
- O AngularJS permite estender o vocabulário HTML para o seu aplicativo. O ambiente resultante é extraodinariamente expressivo, legível e rápido de de desenvolver.
- Diretivas são extensões, que fornecem a possibilidade de modificar o comportamento do HTML.
- Associar eventos à funções JS;
- Manipular o DOM; e
- Controlar eventos de tela e etc…
- A tributo ng-app tem o objetivo que ‘informar’ para a DOM que além de HTML o documento também é um documento AngularJS.
- É uma das principais vantagens do AngularJS, significa ligar automaticamente uma variável do JS (controller) com um elemento do HTML.
- A controller é geralmente um arquivo JS que contém todas as funcionalidades ou funções pertinentes ao HTML que o referencia.
- Estrutura de pastas
- Nomenclatura dos arquivos
- Guia de estilo AngularJS: A proposta de uma guia de estilo é fornecer uma direção na construção de aplicações mostrando convenções, e o mais importante, porque usa-las.
- Biblioteca resolve algo específico.
- Framework é composto por várias bibliotecas.
- Caminha que vai percorrer no Sistema.
- Responsáveis tentaram melhorar a ideia do Angular e mudou tanto que criaram o AngularJS.
- Seu pedaço de código não pode fazer a mesma coisa que outro código.
- Contexto da aplicação é o escopo.
- Sim! É possível.
- Windows: Instalar o Cmder.
- VisualStudio: Extensão – Instalar o Gitlens.
- Git;
- Controller/ControllerAs;
- +Diretivas do AngularJS;
- Definição de Escopos ($rootScope e $scope): Em case prático: Lista de Tarefas App;
- Comand Line Interface (CLI);
- Formulários;
- Filtros;
- NPM / Grunt: Em casa Prático: Login App; e
- $scope e $rootScope: Escopo Global.
-
É um sistema de controle de versão distribuído de código aberto gratuito projetado para lidar com tudo, desde projetos pequenos a muito grandes com velocidade e eficiência.
-
git remote: Lista os endereços remotos para subir o projeto.
-
git status: Lista os documentos que foram alterados.
-
git add: Adicionar um arquivo, pasta ou ambos (“git add -a” ou “git add .”)
-
git restore --staged: Voltar o arquivo para o Working Directory.
-
git commit -m “Descrever o commit”
-
git push: Subindo o histórico para o remoto.
-
git push origin dia-1 (branch)
-
git clone url: Clonar o projeto localmente. (HTTPS) ou via SSH que necessita configuração.
-
.gitignore: Consegue dizer quais os arquivos que o GIT não acompanhe. Só adicionar o nome do arquivo que desejar ignorar dentro do .gitignore.
-
git branch: Lista as branches.
-
git branch dia-2-lista-tarefas: Criou uma nova branch.
-
git checkout nomedabranch: Muda de branch.
-
git push -u origin nomedabranch ou git push --set-upstream origin nomedabranch -> Comando para setar novos pushs. Sendo necessário na próxima vez rodar somente: git push.
- NPM / Grunt;
- Formulários;
- Filtros;
- Modularizar / Organizar Projeto;
- Rotas;
- Services e Factories; e
- Integração com Back-End - Em case Prático: Lista Compras App.
-
É um gerenciador de pacotes para a linguagem de programação JS. npm, Inc. é uma subsidiária do GitHub, uma corporação multinacional americana que fornece hospedagem para desenvolvimento de software e controle de versão com o uso do GIT.
-
npm init -y -> Inicializando o projeto.
-
npm i e npm un -> Instalação e desinstalação.
-
Site: https://www.npmjs.com -> Procurar pacotes.
-
npm i grunt grunt-contrib-clean grunt-contrib-connect grunt-contrib-copy grunt-contrib-cssmin grunt-contrib-uglify grunt-contrib-watch
-
contrib-clean -> Apagar pasta ou arquivos.
-
contrib-connect -> Criar um servidor para rodar nossa aplicação.
-
contrib-copy -> Copiar arquivos.
-
contrib-cssmin -> Minificações de CSS.
-
contrib-uglify -> Minificações de arquivos JS.
-
contrib-watch -> Lendo o código que estamos escrevendo e execuntado tarefas caso tiver mudanças. Atualiza nosso navegador automaticamente.
- dependencies -> Obrigatórios para o projeto funcionar.
- devDependencies -> Só para Desenvolvimento.
- É um executor de tarefas JS, uma ferramenta usada para executar automaticamente tarefas frequentes, como manificação, compilação, teste de unidades e fiapos. Ele usa uma interface de linha de comandos para executar tarefas personalizadas definidas em um arquivo.
- Fonte: https://gruntjs.com/
- Mais simples que o Gulp.
- npm i grunt-cli --global -> Com essa instalação é possível rodar os comandos do Grunt em qualquer lugar da máquina.
- npm i grunt-cli --save-dev -> Dependência de Desenvolvimento.
- npm un grunt-cli -> Desinstalando o grunt-cli.
- copy:dist -> Usa a tarefa dist dentro de copy, não rodando todas as tarefas dentro de copy.
- src: ['/.html'] -> Pega todas as pastas e arquivos html.
- cwd -> Caminho base.
- dest -> Nome da pasta que os arquivos fiquem copiados.
- expand -> Recursividade entre as pastas.
- Modularizar / Organizar Projeto;
- Rotas / Navegação;
- Integração com Back-End (API);
- Diretivas;
- Componentes; e
- Em case prático: Lista Compras App.
- npm i angular-route
- Faz requisições por exemplo de uma API.
- Instalando o Karma CLI no Modo Global: npm i karma-cli -g
- Rodar os testes com o Karma: karma start karma.conf.js
- Código finalizado.
- Orientação a Objeto;
- Introdução ao Java;
- Serviços REST;
- Exceptions; e
- Testes Unitários.
- Paradigma de Orientação a Objetos.
Paradigma é um termo com origem no grego "paradeigma" que significa modelo, padrão. No sentido lato corresponde a algo que vai servir de modelo ou exemplo a ser seguido em determinada situação. São as normas orientadoras de um grupo que estabelecem limites e que determinam como um indivíduo deve agir dentro desses limites.
- Modelo entrada - processamento - saída; e
- Dados separados das funções.
- O Mundo e composto por objetos;
- Objetos combinam dados e funções; e
- Conceitos dos problemas são modelados como objetos que são associados e intaregem entre si.
"Um sistema construído usando um método orientado a objetos é aquele cujos componentes são partes encapsuladas de dados e funções, que podem herdar atributos e comportamentos de outros componentes da mesma natureza, e cujos componentes comunicam-se entre si por meio de mensagens".
Eduard Yourdon
- Consiste de focalizar nos aspectos essenciais inerentes a uma entidade e ignorar propriedades "acidentais".
- "Modelos mentais": visão simplificada do mundoconcebido por cada um em cada contexto.
- Abstrair consiste em ignorar aspectos irrelevantes e concentar nos principais.
- Classe
- Objetos
- Métodos
- Estado (Estrutura): conjunto de suas propriedades e seus valoress correntes.
- Compartamento: conjunto de serviços (operações).
- Que o objeto prôve.
- Identidade: Identificador único que diferencia cada objeto, mesmo que tenha mesmo estado e comportamento.
- Métodos e Funcionalidades
- Atributos e Dados
- Domain Drive Design
- Uma classe descreve um conjunto de objetos com as mesmas propriedades, o mesmo comportamento, os mesmos relacionamentos com outros objetos e a mesma semântica.
- Mecanismo utilizado para troca de mensagens entre objetos ou para realizar uma determinada tarefa relacionada ao objeto.
- Mecanismo utilizado para troca de mensagens entre objetos ou para realizar uma determinada tarefa relacionada ao objeto.
- src -> new package -> name: br.com.maratona.dev
- br.com.maratona.dev -> new class -> name: Pessoa
- CTRL + N -> Atalho para criar uma Classe.
- main CTRL + Space -> Atalho para criar a main.
- main não existe para programar Web.
- sysout + CTRL + Space. -> Atalho para o System.out.print
- Get e Set: Source -> Generate Getters and Setters ou Alt + Shift + S e selecionar a opção.
- Herança - extends acoplamento muito forte. Tudo no pai vai impactar nos filhos.
- Classe abstract não pode receber uma instância.
- Cast - Polimofirsmo - Várias formas - Exemplo listar várias contas
- instanceof verifica a origem.
- Interface - implements cria métodos sem implementação e pode ter parametros.
- Se implementar é obrigado a usar tudo que tem dentro dela é um contrato.
- A classe é pública não é necessário informar porque é o padrão é público.
- 1.5f indicando o valor.
- Baratinha do Eclipse é o Debug. Dois cliques na linha para marcar e rodar o Debug.
- F6 debuga linha a linha. F8 debuga tudo.
- Enum campo que não vai precisar ser acessado para alterações. Exemplo: Status - Ativo e Inativo.
- Collections - ArrayList e List. São listas.
- Ctrl + Shift + O -> Remover imports que não estão sendo utilizados.
- Um mundo complexo porém resumido em duas palavras: Request - Requisição e Response - Resposta.
Client -> HTTP request -> Server Client <- HTTP response <- Server
- Apache Tomcat
O Tomcat é um servidor web Java, mais especificamente, um container de servlets. O Tomcat implementa, dentre outras de menor relevância, as tecnologias Java Servlet e JavaServer Pages. Desenvolvido pela Apache Software Foundation, é distribuído como software livre.
- Instalar o JDK 8.
- Alterar no Eclipse -> Windows -> Preferences -> Installed JREs.
- Window -> ShowView -> Other... Browser
- Acessar: http://localhost:8080/
- new -> Dynamic Web Project.
- Marcar a opção: [x] Generate web.xml deployment descriptor -> alma do projeto.
- Botão direito do mouse no projeto e ir em Build Path.
- Libraries confirmar a versão do JDK.
- Project Facets -> Todas as versões utilzadas no projeto.
- Web Project Settings -> Context root -> Nome da aplicação.
- JavaResources -> New package: br.com.maratona.dev
- Páginas HTML dentro do WebContent
- WebContent -> new: index.html
- Botão do direito do mouse no Tomcat inferior da tela e adicionar o projeto. Depois rodar um Clean.
- http://localhost:8080/maratonaDev/
- br.com.maratona.dev -> new Class: InscricaoMaratonaView
- doGet - Ctrl + Space
- http://localhost:8080/maratonaDev/inscricao -> "Maratona usando servelet"
- JSF carregado no servidor. Angular carregado no browser.
Rest é acrônimo de Representational State Transfer, e tem como objetivo primário a definição de caractrísticas fundamentais para a construção de aplicações Web seguindo boas práticas.
- Mesmo criador dos protócolos HTTP.
- Evoluiu a forma de conectar no HTTP.
Em um projeto nós temos problemas de:
- Gerenciamento de dependência.
- Gerenciamento de projetos.
- Controle de versão.
- Automatizar o processo de build.
Muitos outros problemas que existem que vão desde a fase de construção até o deploy em produção.
Apache Maven, ou Maven, é uma ferramenta poderosa utilizada para gerenciar projetos, permitindo realizar builds, gerenciar dependências e até documentação do projeto. Ela é baseada no POM (project object model).
-
Criando o maven: new -> other -> Maven Project -> [x] Create a simple project (skip archetype selection)
-
Group id: br.com.maratona.dev
-
Artifact id -> nome do projeto: dev
-
Version -> Versões de Teste -> Mudança de versão de forma drastica - ? - bugs
-
Verificar a versão do JRE.
-
maratonaDev -> Botão direito -> Configure -> Convert to Maven Project
-
WAR -> projeto web
-
Pegão varios arquivos e distribuem para o servidor:
-
EAR - Pode incorporar vários WAR ou vários projetos - modules.
-
JAR - Aplicações Desktop
-
WAR - Arquivo de Web
-
Direito -> Run -> Maven Run Build -> Abrirá a tela de comandos.
-
Goals: clean install -> deleta e gera um novo.
-
Update Snapshots -> Obrigando o processo instalar as dependências.
-
Windows -> Preferences -> Workspace -> Other: ISO-8859-1
-
REST devolve os servlets configurados no web.xml
-
Dependências do Jsery: https://mvnrepository.com/
-
genson -> converte o JSON para o Java.
-
Plugin Rested mesma função do Swagger
-
200 OK
-
201 Created
-
ULR != URI
-
POST: Geralmente formulários -> Mandar um recurso novo
-
GET: Qualquer informação da URL
-
PUT: Alterar
-
DELETE: Remover
-
PathParam é um alias - apelido
-
equals comparar valores.
- Lockando os dados
Criar o arquivo context.xml dentro de META-INF -> Pega todas as entidades - classes e passa a gerenciar - guardar para ele. Criar o arquivo beans.xml dentro de WEB-INF
- resources -> arquivos de configuração.
- Teste Unitários
- After, Before e Test.
- Garante mais segurança e proteção.
- Framework de mocks - injections.
- Mock cria um espelho do projeto, vazio.
- Botão direito ou Barra superior -> coverage -> relatório dos testes.
Carregar os erros de execução em try catch. Evitando carregar para o usuário o console.log. Erros que o compilador não pega.
Extensão do browser: RESTED Client Tomcat: http://localhost:8080/maratonaDev/rest/inscricao/find/inscrito/1
GET
Content-Type application/json
200 { "matricula": 1, "nome": "Lucas" }
- Introdução ao Quarkus
- Modelagem
- CRUD
- Docker
- Kubernetes
- Comunicação;
- Colaboração;
- Automação; e
- Monitoração.
Ele diz respeito à adequação de processo de desenvolvimento (Dev) e operação (Ops), com o objetivo de estimular o progresso contínuo no seu negócio na área de T.I. O conceito surgiu no ano de 2008, quando o administrador de sistemas Patrick Debois começou uma discussão sobre a possibilidade de solucionar os conflitos constantes entre as áreas de desenvolvimento e operações de TI.
DevOps é uma estratégia que deve ser aplicada de modo contínuo e funciona da seguinte forma, seguindo essas etapas:
- Plan
- Code
- Build
- Test
- Release
- Deploy
- Operate
- Monitor
Entretanto, por que aplicar o Dev Ops?
- Redução de custos
- Automação
- Cultura de empresa atualizada
- Torna a empresa mais escalonável
- É uma revolução nos modos de exercer funções de TI
-
Imperative -> Inject
-
Reactive -> Channel
-
Red Hat - Principal desenvolvedora
-
Projeto de código aberto.
O que é? O Quarkus é um framework, nativo do Kubernets, adaptado para OpenJDK HotSpot e GraalVM
Microprofile Eclipse:
- Jax-RS
- CDI
- JSON-P
https://start.microprofile.io/
- Máquina Virtual Poligrota
- Oracle é a responsável.
- Pega o código e vira nativo e pode rodar diretamente.
Pense nas extensões como dependências do seu projeto, as extensões configuram, inicializam e integram as estruturas. Eles também fazem todo o trabalho de fornecer as informações corretas para o GraalVM e seu app rode nativamente.
- Testa o fluxo.
- dao - conexão com o banco de dados. insert, delete... acesso aos objetos.
- dto - trafegar os dados, camada back com qualquer outra camada back ou front, objeto de transição.
- model - entidades.
- rest - requisições. pacote com os nossos serviços - endpoints.
- service - validação e regra de negócio. arquivo que vai prover serviços.
https://start.microprofile.io/
- Botão direito do mouse - Import - Existing Maven
- Help -> Eclipse Marketplace -> Quarkus Tool
- ./mvnw quarkus:dev
- http://localhost:8080/
- http://localhost:8080/api/hello
- Projeto real maioria das vezes é utilizado RequestScoped
- @Table
- @Entity
- @ManyToOne
- @Column
https://docs.oracle.com/javaee/7/api/javax/persistence/package-summary.html
- @OneToMany
- @ManyToOne
- @ManyToMany
Exemplo: @OneToMany Book -> Pages
- @ID
- @GeneratedValue -> Estratégia de Incremento.
- @NamedNativeQueries
- @NamedNativeQuery
- Lista pequena
- Não pode sofrer alteração com o passar do tempo
- Geralmente é status
- H2: ./mvnw quarkus:add-extension -Dextensions="io.quarkus:quarkus-jdbc-h2"
- Hibernate ORM: ./mvnw quarkus:add-extension -Dextensions="io.quarkus:quarkus-hibernate-orm"
- http://localhost:8080/api/todo
- Desenvolvimento baseado em open API Especification
- Permite que escreva uma estrutura de API
- Consegue ler uma documentação e gerar uma API
- ./mvnw quarkus:add-extension -Dextensions="io.quarkus:quarkus-smallrye-openapi"
http://localhost:8080/swagger-ui/
- Versionamento de Banco de Dados através de códigos.
./mvnw quarkus:add-extension -Dextensions="smallrye-opentracing" https://hub.docker.com/r/jaegertracing/all-in-one
- Profiles: ./mvnw quarkus:dev -Dquarkus.profile=dev
- Desenvolvido na linguagem GO.
- Alta perfomance
Client: docker build docker pull docker run
DOCKER_HOST Docker daemon Container -> Imagem rodando. Images -> Configurações prontas.
Registry
- Rapidez
- Até 7 vezes mais rápido que a virtualização
- Cada cointainer pode receber uma configuração/versão, evitando conflitos.
- Docker vem com Linux.
- Evita usar regras por exemplo com IF e utiliza somente o atalho do Hibernate.
@NotNull @Size(min = 2, max = 14) @Min(2) @PastOrPresent
docker run -d --name jaeger
-e COLLECTOR_ZIPKIN_HTTP_PORT=9411
-p 5775:5775/udp
-p 6831:6831/udp
-p 6832:6832/udp
-p 5778:5778
-p 16686:16686
-p 14268:14268
-p 14250:14250
-p 9411:9411
jaegertracing/all-in-one:1.20
docker ps -> todos os serviços listados docker images -> imagens localmente docker rm imagem -> remover uma imagem
localhost:16686/
OpenTracing -> Ver por onde a aplicação passou. ./mvnw quarkus:add-extension -Dextensions="smallrye-opentracing"
Parar a aplicação docker ps docker stop nome ou id
Startar docker start nome ou id
Validation with Hibernate Validator ./mvnw quarkus:add-extension -Dextensions="hibernate-validator"
O Panache é responsável por gerenciar toda a transação, desde da abertura, commit e o fechamento da transação. A ideia é facilitar a implementação, melhorando assim a produtividade, já que o código fica bem mais simples, se comparado a forma tradicional.
minikube https://github.com/kubernetes/minikube
- git config --global user.name "Lucas Magalhães"
- git config --global user.email "[email protected]"