Jump to content

luiz.melo

Pessoal da TecnoSpeed
  • Contagem de Conteúdo

    8
  • Ingressou

  • Última visita

  • Dias Ganhos

    3

Tudo que foi postado por luiz.melo

  1. Sabemos que bases de dados são componentes essências para muitas aplicações de software, incluindo as arquiteturas baseadas em microserviços. Quando se trata de escolher entre uma base de dados distribuída ou centralizada, há vantagens e desvantagens para ambas as abordagens. Uma base de dados centralizada ou compartilhada é uma base de dados que é armazenada em um único local físico ou servidor. Os microserviços acessam a base de dados através de uma API ou de uma camada de acesso aos dados. Uma vantagem desse modelo é a simplicidade da arquitetura, que permite que os desenvolvedores gerenciem a base de dados com mais facilidade. Além disso, a base de dados centralizada é mais fácil de proteger e manter em comparação com uma base de dados distribuída. Vantagens: - Garante forte consistência - Forte acoplamento, sem isolamento da modelagem de dados - Acessível e fácil de gerenciar - Redundância mínima de dados Desvantagens: - Tráfego de dados mais alto - Se houver uma falha no sistema, os usuários não terão acesso ao banco de dados Uma base de dados distribuída é uma base de dados que é espalhada por vários servidores em um sistema. Cada servidor é responsável por armazenar uma parte dos dados e os microserviços se comunicam com a sua propria base de dados. Uma vantagem dessa abordagem é a escalabilidade, pois é possível adicionar mais servidores para armazenar mais dados ou aumentar a capacidade de leitura e gravação da base de dados. Além disso, a redundância dos dados em vários servidores aumenta a tolerância a falhas, tornando o sistema mais resiliente. Vantagens: - Baixo custo de comunicação - Menor acoplamento - Maior isolamento da modelagem de dados - Possibilidade de utilizar tecnologias de acordo com as necessidades Desvantagens: - Integridade dos dados é mais complexa Em resumo, a escolha entre uma base de dados distribuída e uma centralizada para microsserviços depende das necessidades específicas do sistema. Ambas têm vantagens e desvantagens únicas e devem ser cuidadosamente avaliadas antes de serem implementadas.
  2. Olá, Luiz! Obrigado pelo comentário, irei colocar mais exemplos nos próximos posts sobre Java. Deixarei um curso gratuito, bem interessante e didático caso tenha interesse em aprender mais sobre a linguagem: https://www.cursoemvideo.com/curso/java-poo/
  3. Olá, Darcio! Você pode tentar baixar uma IDEA (IntelliJ, NetBeans, Eclipse, etc..) para importar esse projeto. Com a IDEA baixada e o projeto devidamente importado, você já conseguirá compilar e rodar a aplicação.
  4. Nesse post, vamos entender qual o nível de maturidade necessária para fazer com que sua API seja considerada RESTful. De uma forma bem resumida, REST é um conjunto de restrições de arquitetura, que podem ser implementadas de diferentes maneiras. De acordo com Leonard Richardson, existem alguns pontos para que uma API REST seja realmente considerada RESTful, podendo inclusive alcançar o nível de “glória” da sua API. Vamos então entender um pouco mais sobre o modelo de maturidade de Richardson. Nível 0: POX Nesse nível não é utilizado nenhum padrão para nada, apenas um verbo é utilizado nas operações, por exemplo o POST, e existe apenas uma URL (rota) para processar todas as requisições. A falta de clareza desses recursos e a falta de escalabilidade podem tornar o processo totalmente inviável. http://localhost:8080/users/action=list http://localhost:8080/users/action=add http://localhost:8080/users/action=update Nível 1: RECURSOS (RESOURCES) Nesse nível começamos a organizar nossa API e separar as responsabilidades dos nossos recursos. Uma rota é criada para que cada recurso seja consumido e assim vamos modelando nossa API. Agora, conseguimos trabalhar com os dados de uma maneira mais específica e otimizada. http://localhost:8080/users http://localhost:8080/users/1 http://localhost:8080/users/1/payment Nível 2: VERBOS HTTP (HTTP VERBS) Aqui os verbos HTTP passam a ser utilizados de acordo com o seu propósito, e também surge a preocupação de utilizar os status corretos para as requisições. POST /users { name: "LUIZ" } HTTP/1.1 201 Created Location: /users/1 Nível 3: HATEOAS O nível 3 é atingido quando aplicamos o conceito de HATEOAS (Hypermedia Controls), onde o elemento principal é a representação de “links” que permitem que a própria resposta (response) descreva seu estado atual, e seu relacionamento com outros elementos ou futuros estados. GET /users/1 { "name": "LUIZ", "links": [ { "rel": "self", "href": "http://localhost:8080/users/1" }, { "rel" : "delete", "href": "http://localhost:8080/users/1" ] } Links Uteis: https://mundoapi.com.br/destaques/alcancando-a-excelencia-do-rest-com-um-modelo-de-maturidade-eficiente/ https://www.totvs.com/blog/developers/rest/ https://httpstatusdogs.com/ https://developer.mozilla.org/pt-BR/docs/Web/HTTP/Status
  5. Antes de iniciarmos, precisamos entender que o Docker Hub é um serviço para hospedar as imagens dos nossos containers e compartilhar com nossa equipe. Pense nele como um repositório do Github, mas, ao invés dos repositórios armazenarem o código fonte da aplicação, são hospedados as imagens. Ps: Nos exemplos, lembre-se de alterar os dados para as suas informações. O que vamos precisar: Editor de texto ou IDE favorito. Apache Maven. Tutorial para baixar e configurar. Aplicação Spring Boot. Você pode usar este projeto de exemplo. Conhecimento básico de Docker. Ter uma conta no Docker Hub. Com tudo devidamente configurado, mão na massa! 1°) Vamos criar um arquivo com o nome Dockerfile no nosso projeto, e configurar da seguinte maneira: FROM openjdk:11 COPY target/meu-app-1.0.jar /app/meu-app.jar WORKDIR /app ENTRYPOINT ["java", "-jar", "meu-app.jar"] Comandos: - FROM é uma instrução obrigatória que indica qual imagem vai ser utilizada como ponto de partida. - COPY para copiar arquivos e pastas de um lugar específico na máquina local para uma pasta no container. - WORKDIR define uma pasta dentro do container onde os comandos serão executados. - ENTRYPOINT usado para definir executáveis que sempre serão executados quando o contêiner for iniciado. 2°) Utilizando o Maven de uma maneira simples, vamos buildar uma imagem do nosso projeto: Abra o terminal e entre no diretório do seu projeto, digite o seguinte comando: mvn spring-boot:build-image Esse comando levará um tempo quando for executado a primeira vez, mas nas próximas vezes será mais rápido. No final do processo, nossa aplicação foi compilada, empacotada e convertida em uma imagem do Docker. Para testar, podemos utilizar o seguinte comando docker run --name meu-app -p 8080:8080 meu-jardim:1.0 Podemos testar nossa aplicação acessando: http://localhost:8080/plantas 3°) Agora, vamos configurar nossas credenciais para publicar a imagem no Docker Hub, no terminal, digite o comando: docker login –username=seu-usuario –password=sua-senha 4°) No site do Docker Hub, crie um repositório para hospedarmos a imagem do nosso projeto. Na aba Repositories, você pode criar um novo repository clicando no botão Create Repository 5°) Vamos criar uma TAG para a imagem do nosso projeto, fazemos isso para marcar a imagem local com um id ou um nome: docker tag meu-jardim:1.0 lfmelo/meu-app:1.0 6°) Para finalizar, vamos fazer o PUSH da nossa imagem para nosso repositório. Com isso, estamos compartilhando nossa imagem no registry do Docker Hub. docker push lfmelo/meu-app:1.0 Ao final do processo, podemos conferir em nosso repositório a primeira versão da nossa imagem. Referencias: https://spring.io/guides/gs/spring-boot-docker/ https://hub.docker.com/_/openjdk https://blog.rocketseat.com.br/dockerfile-principais-comandos-para-criar-a-receita-da-imagem/ https://docs.docker.com/engine/reference/builder/
  6. Sabemos que, no mundo da programação, a teoria e a prática são coisas bem diferentes. Para entendermos um pouco mais sobre a parte teórica dos pilares da orientação a objetos (OO), vamos falar sobre os 4 principais conceitos desse paradigma de programação. Abstração (Exemplo: Cachorro) De uma maneira bem resumida, a abstração é uma representação de um objeto do mundo real. Por exemplo, um cachorro. Pense em um cachorro, e como podemos abstraí-lo em uma classe do nosso sistema. São três pontos que devem ser levados em consideração: Identidade - Devemos ter em mente qual objeto do mundo real vamos abstrair e mapear dentro do nosso sistema. Propriedades - Quais são as propriedades, as características desse objeto, por exemplo no caso da classe Cachorro, onde temos “Nome”, “Raça”, “Tamanho”, “Pelagem” e outros atributos. Métodos - O que a classe Cachorro deve saber fazer, por exemplo, “Latir()”, “Comer()”, “PedirCarinho()”, “TomarAgua()”. Com esse pilar, uma classe deve expor para outras classes apenas a ideia geral de uma propriedade ou funcionalidade, sem entrar nos detalhes, e isso pode ser alcançado com o uso de interfaces. Encapsulamento (Exemplo: Televisão) O encapsulamento se trata de um dos elementos que adicionam segurança à aplicação pelo fato de esconder as propriedades, criando uma espécie de caixa preta. Essa atitude evita o acesso direto à propriedade da classe, adicionando uma outra camada de segurança à aplicação. Como exemplo ao mundo real, quando clicamos no botão ligar da televisão, não precisamos saber o que está acontecendo internamente, a televisão apenas liga. Podemos então dizer que os métodos que ligam a televisão por "trás dos panos" estão encapsulados. Herança (Exemplo: Família) Nesse pilar, podemos imaginar um cenário onde, em uma família, os pais tenham os olhos azuis (propriedade da cor do olho) e seu filho, por sequência, herdou as características dos pais e nasceu também com os olhos azuis. A herança é um recurso muito importante para o reuso de código. Chamamos as classes que transferem comportamentos e atributos de super classes, e chamamos as classes que herdam esses comportamentos e atributos de sub classes. Por isso, super classes normalmente são definições mais genéricas de uma entidade, enquanto que as sub classes são definições mais específicas. Polimorfismo (Exemplo: Mamíferos) O polimorfismo é a “habilidade” de propriedades de classes derivadas de uma mesma super classe, responderem ao mesmo método, de formas diferentes. Para uma abstração ao mundo real, podemos pensar no exemplo dos mamíferos, o macaco, a baleia e o homem, ambos são da mesma super classe “Mamíferos”, e ambos possuem um método "Locomover()", porém, cada um se locomove da sua forma, pulando nos galhos, andando e nadando. Podemos entender que ambos se locomovem, mas de maneiras diferentes, cada um com sua peculiaridade. Referências: https://www.devmedia.com.br/os-4-pilares-da-programacao-orientada-a-objetos/9264 https://blog.cod3r.com.br/pilares-de-orientacao-a-objetos/#:~:text=O paradigma orientado a objetos,%2C polimorfismo%2C encapsulamento e abstração
×
×
  • Create New...