Skip to content

Treinamento com duração de 68 horas envolvendo Github, Kotlin, Spring e diversos módulos deste.

Notifications You must be signed in to change notification settings

GabesSeven/Bootcamp-DIO-Code-Update-TQI-Backend-com-Kotlin-e-Java

Repository files navigation

Bootcamp DIO: Code Update TQI Backend com Kotlin e Java



Treinamento com duração de 68 horas proporcionado pela Digital Innovation One (DIO) e pelo Banco Santander. O objetivo é aprender mais sobre desenvolvimento backend voltado a Kotlin e Java, Spring Framework, além de diversas outras tecnologias e arquiteturas.




Projeto Prático de Application Programming Interface (API) com Spring Boot, Gradle, Kotlin e Banco de Dados H2 💻



Github do projeto "Credit Application System", Application Programming Interface (API) Full Representational State Transfer (RESTful) utilizando Spring Boot e Kotlin que simula um sistema de análise e solicitação de crédito. O objetivo é a empresa fornecer gerenciamento simples de Crédito (Credit) para seus Clientes (Customers).




Conteúdo Lecionado 🎯



Módulo 1: Princípios de Desenvolvimento Ágil e Colaborativo

  • Conceitos de metodogias ágeis e tradicionais;
  • Versionamento e diversos recursos do Git e Github via linha de comando;
  • Contrução de arquivos markdown (.md);
  • Contribuindo para um projeto open source através do Fork e Pull Request.

Módulo 2: Desmitificando Kotlin para Programadores Java

  • Estrutura de controle de fluxo e coleções;
  • Orientação a objetos e tipos de classes;
  • Funções;
  • Tratamento de exceções.

Módulo 3: Explorando padrões de Projetos na Prática com Kotlin

  • Singleton;
  • Builder;
  • Adapter;
  • Extension function;
  • Processamento paralelo / assíncrono.

Módulo 4: Trabalhando com Banco de Dados SQL e NoSQL

  • Banco de dados relacionais;
  • Banco de dados não relacionais.

Módulo 5: Ganhando Produtividade com Java e Spring Boot

  • Gerenciamento de dependências e build em Java com Apache Maven;
  • Imersão no Spring Framework com Spring Boot;
  • Criando uma API REST documentada com Spring Web e Swagger;
  • Adicionando segurança a uma API REST com Spring Security;
  • Arquitetura orientada a eventos com Java, Spring Boot e Kafka;
  • Explorando padrões de projetos na prática.

Módulo 6: Modernizando seu Backend com Kotlin e Spring Boot

  • Contextualizando o desenvolvimento web com Spring Boot 3;
  • Documentando e testando sua API REST com Kotlin.




Tecnologias Utilizadas 👩🏻‍💻



GIT  

GITHUB  

KOTLIN  

JAVA  

APACHE MAVEN  

APACHE KAFKA  

GRADLE  

SPRING  

SPRING BOOT  

SPRING SECURITY  

SWAGGER  

H2 DATABASE  

MONGODB  

MYSQL  

HIBERNATE  

FLYWAY  




Visão Geral sobre Conteúdo Absorvido 📜



Spring Framework é um ecossistema de desenvolvimento para facilitar a criação de aplicações Java e Kotlin utilizando diversos módulos independentes. Como consequência, me aprofundei em estruturas internas do Java como:

  • Java Persistence Application Programming Interface (JPA);
  • Object-Relational Mapping
  • (ORM);
  • Java Enterprise Edition Database Connectivity
  • (JDBC);
  • Java Enterprise Edition (Java EE).



No entanto este Bootcamp focou nas tecnologias:

  • Apache Kafka;
  • Apache Maven;
  • Gradle;
  • Spring Boot;
  • Spring Security;
  • Spring Data JPA;
  • Hibernate;
  • Flyway;
  • Swagger;
  • Git / Github.



Ademais, na construção da API, implementamos a Arquitetura em Três Camadas do Spring (camadas Controller, Service, Persistence / Repository) e estruturas como:

  • Data Access Object (DAO);
  • Data Transfer Object (DTO).

Contextualizando, de forma breve, todas tecnologias descritas nos parágrafos anteriores



Spring Framework



Uma das principais características do Spring Framework é a Inversion of Control (IoC) que permite que o Spring Container gerencie a criação e injeção de dependências entre os componentes, reduz o acoplamento entre classes e torna o código flexível e fácil de manter. O Spring “inverte o controle” das instâncias das mãos do programador através da palavra “new” para o agente externo a sua classe.

Dependency Injection (DI), uma forma de IoC, onde as dependências de um componente são fornecidas externamente, tornando o código modular e facilitando testes.

A Interface ApplicationContext é responsável por gerenciar objetos Bean, isto é, uma classe que determina como Spring Container gerenciará o ciclo de vida de suas instâncias, não necessitando realizá-las via código. Beans podem ser implantados de maneira personalizada ou em seis escopos: singleton, prototype, request, session, application, websocket.



Apache, Gradle



Apache Maven é uma ferramenta de automação e gerenciamento de projetos Java. Gradle realiza operação semelhante, porém bastante utilizado com a linguagem Kotlin.

Apache Kafka é uma plataforma para coletar, processar e armazenar dados de streaming permitindo trabalhar com conceitos de tópicos e filas fornecendo sincronização e desacoplamento de dados em microsserviços.



Spring Boot, Spring Security, Swagger



Spring Boot reduz a necessidade de configurações iniciais e possibilita a construção de aplicações funcionais de maneira rápida e robusta, o boilerplate das configurações (seções de código que devem ser incluídas em muitos lugares) se localizam nos Starters que são dependências que adicionamos aos projetos.

De maneira quase análoga, o Spring Security fornece
autenticação, autorização e outros recursos de segurança para aplicativos.

Swagger é para muitos o “queridinho” substituindo o Postman. Além de gerar requisições, também gera documentação dos endpoints.



Arquitetura de Três Camadas



Arquitetura de Três Camadas do Spring é segmentado entre as camadas: Controller (Controle), Service (Serviço), Persistence / Repository (Persistência / Repositório). Esta arquitetura promove modularização, melhor manutenção e escalabilidade. As boas práticas recomendam que a camada de Controle não deve conhecer particularidades de acesso a dados, responsabilidade delegada a outra camada separada e independente. Os softwares executados em camadas distintas são substituídos, atualizados e corrigidos sem prejuízo para o sistema como todo. As camadas podem ser desenvolvidas em paralelo.



Camada de Controle



A camada de Controle recebe e devolve as solicitações Hypertext Transfer Protocol (HTTP) do cliente, deve ser extremamente leve e somente delegar serviços (entrada e saída). Conforme apropriado, a Controle é responsável pela visualização, pelo transporte e pelos protocolos. Isso pode ou não incluir o mapeamento de Business Logic em JavaScript Object Notation (JSON), Extensible Markup Language (XML), HyperText Markup Language (HTML), entre outros. Mas a principal camada responsável pelo mesmo é a Service. Intermediando a Controle e o cliente está o DTO.

DTO é um padrão de arquitetura de objetos que agrega e encapsula dados para transferência. Não possui qualquer tipo de comportamento, sua função é obter e armazenar dados. DTO filtra quais dados serão transmitidos reduzindo a latência, também auxilia na não exposição de todos os dados presentes na Persistência.



Camada de Serviço



A camada de Serviço realiza operações e se necessário requisita a camada de Persistência e retorna o resultado à Controle. Na Serviço estão presentes as Business Logic, ou seja, objetos que fazem o trabalho que o aplicativo precisa para o domínio o qual está associado. Envolve cálculos baseados em insumos e dados armazenados, validação de quaisquer dados provenientes da Controle e exatidão em quais dados da lógica de origem serão despachados.

Serviços são implementados através de Beans (@Service ou @Component, exemplos de anotações) que são gerenciados pelo Spring através de anotações, sendo necessário injetar todas as dependências de serviços para o trabalhopesado”. Os objetos em Service podem ter o objeto DAO como dependência, tudo é objeto em Java, referenciando-se em C++, a linguagem Java implementou a Programação Orientada a Objetos (POO).



Camada de Persistência



A camada de Persistência, de Repositório ou de Posições, formada pela estrutura DAO, fornece uma camada dupla de segurança a acesso a dados, independente do protocolo utilizado. Em outras palavras, design que cria uma camada separada e encapsula a lógica relacionada ao banco de dados, por exemplo, Create, Read, Update, Delete (CRUD) ou mecanismo de armazenamento subjacente. Auxilia a não relacionar classes do aplicativo do lado do Cliente com possíveis mecanismos de persistência (acesso a banco de dados que resulta na “quebra” da tríade da Segurança da Informação - Confiabilidade, Integridade e Disponibilidade). Também abstrai a implementação de acesso a dados subjacente para objetos Services e permite o acesso transparente à fonte de dados.

DAO encapsula e gerencia a lógica para recuperar, salvar, atualizar e deletar dados em seu armazenamento persistente (DAO encapsula e gerencia Relational Database Management System (RDBMS), NoSQL, sistema de arquivos) ou serviço comercial acessado via Representational State Transfer (REST) / Full Representational State Transfer
(RESTful) ou Simple Object Access Protocol (SOAP).

Em uma pasta separada denominada “entity”, constrói-se as tabelas utilizando anotação @Entity. Normalmente na Persistência, usa-se a interface JPA Repository que trabalha com JPA ou outra Framework ORM. Essas tecnologias possuem padrões que permitem criar as classes de dados independentemente da fonte de dados: Banco de Dados Relacional, arquivo texto ou XML. Além de encapsular osmecanismos de acesso a dados, criando uma interface de cliente genérica e permitindo independência no software.



Spring Data JPA, Hibernate, Flyway



Spring Data JPA é uma framework relacionada ao projeto Spring Data e possui como finalidade tornar a integração de aplicações Spring com a JPA cujo escopo envolve gerenciar a implementação do ORM, ou seja, camada intermediária ao JDBC, parte do contêiner Java EE que gerencia as conexões com o banco de dados. ORM, técnica para aproximar o paradigma de POO ao paradigma do RDBMS.

Hibernate implementa a especificação JPA e Flyway é uma ferramenta responsável por versionar a base de dados. Permite sincronizar o banco de dados com a versão da aplicação, analisar registros de logs (scripts Structured Query Language - SQL) executados ou não, automatização com scripts, criar novo banco de dados, executar rollback de mudanças no banco de dados.




Developer 🧑‍💻




Gabriel Ferreira

About

Treinamento com duração de 68 horas envolvendo Github, Kotlin, Spring e diversos módulos deste.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published