Pular para o conteúdo principal

Versionamento de Sistemas, Artefatos e Componentes

Olá pessoal, hoje iremos abordar um assunto voltado para arquitetura de sistemas, onde vamos analisar como realizar um bom versionamento de artefatos e componentes utilizando o Maven.

Os Artefatos

Quando desenvolvemos um sistema Java, iremos ao final gerar algum tipo de artefato para a implantação, seja ele um JAR, WAR, ou EAR.

Ao utilizar o Maven em nossos projetos, temos o chamado GAV no arquivo pom.xml, que são itens obrigatórios para todo tipo de artefato, o GAV é a abreviação de:
  • G (<groupId>): Grupo de trabalho, aqui é um local onde podemos armazenar um grupo artefatos, que fazem parte de um sistema final, exemplo: br.com.cvinicius.erp;
  • A (<artifactId>): Identificação do artefato gerado, este é o nome que terá o artefato, exemplo: erp-web;
  • V (<version>): Versão do artefato, define a versão do artefato gerado, geralmente representado por casas decimais, exemplo: 1.0.0.

O Que é Versionamento

O versionamento é  uma forma de atrelar um conjunto de requisitos, com um nome ou uma numeração, por exemplo:
  • Versão 1.0.0: Login e Cadastro de Clientes;
  • Versão 1.1.0: 1.0 + Relatório de Clientes.
Para definir como será realizado o versionamento, podemos levar em conta vários fatores, o versionamento devem ajudar a equipe na hora de rastrear um bug, implementar uma nova funcionalidade ou criar um novo release de um sistema ou artefato.

Um exemplo que podemos seguir, é o que geralmente é aplicado nos projetos que são alocados nos repositórios do Maven, onde as versões são baseadas em números, como o abaixo:

Versões de um artefato no repositório local do Maven.
No exemplo, temos a representação de um artefato sendo versionado no repositório local do Maven, aqui temos um versionamento com 3 casas decimais, assim podemos rastrear bugs, melhorias e novos releases.

Atrelando Versões com a Gestão de Requisitos

Agora uma pergunta muito importante, como sabemos o que há em cada versão ?

Essa pergunta é um dos pontos mais importantes para que tenhamos um bom versionamento, pois não adianta termos todos os artefatos versionados, mas sem saber quais tarefas foram realizadas em cada versão.

É comum em equipes de desenvolvimento o uso de ferramentas de gestão de requisitos, bug trackers, controle de atividades, etc, vou listar algumas com quais já tive alguma experiência e que podem ser integradas ao nosso padrão de versionamento:


Em cada uma dessas ferramentas temos a distribuição dos projetos, onde cada projeto tem suas versões, atividades, cronogramas, documentação, etc.

Para entender como funciona claramente a integração entre os requisitos com as versões, vamos analisar o exemplo abaixo:

  • ERP
    • 1.0.0 
      • Descrição
        • Módulo de Clientes;
      • Atividades
        • Issue #1;
        • Issue #2;
        • Issue #3;
    • 1.0.1
      • Descrição
        • Correção no Relatório de Clientes
      • Atividades
        • Issue #4;
        • Issue #5;
    • 1.1.0
      • Descrição
        • Módulo de Faturamento;
      • Atividades
        • Issue #6
        • Issue #7;
        • Issue #8.
No exemplo acima temos uma distribuição de um Projeto, Versões e Atividades, agora conseguimos atrelar um código de versão com um artefato.

Qual a vantagem dessa abordagem ?

As vantagens dessa abordagem são muitas, vamos listar algumas delas:
  • Sabemos o que há em cada versão;
  • Controle das atividades realizadas em cada versão;
  • Desenvolvedor responsável por uma determinada alteração;
  • Facilidade de implantação em ambientes de desenvolvimento, homologação e produção.

Repositórios de Artefatos

Um item importante em um bom versionamento, são os repositórios, esses são os locais onde serão armazenados os artefatos, com Maven podemos trabalhar com 2 tipos de repositórios:
  • Local: Esse tipo de repositório é padrão ao se trabalhar com Maven, sempre será criado com base no usuário local da máquina;
  • Global: É um repositório central dentro de uma empresa ou rede, aqui podemos ter um ponto central de armazenamento dos artefatos, assim facilitando uma busca e implantações futuras.

Gerenciadores de Repositórios

Administrar e gerenciar repositórios de artefatos não é uma tarefa fácil, por isso existem várias ferramentas que ajudam nessa missão, um exemplo delas é o Sonatype Nexus.

O Nexus é um gerenciador de artefatos que os centraliza para facilitar a manipulação, gerenciamento, download e reuso dos artefatos, também é importante para armazenar os artefatos das APIs e Frameworks auxiliares que são utilizados nos projetos da empresa, como exemplo: Hibernate e Spring.

Interface principal do Nexus.

Principais funcionalidades do Nexus
  • Centralizar os artefatos fazendo um cache, para servir aos desenvolvedores nas solicitações;
  • Reuso de artefatos, evitando downloads desnecessários e problemas de compatibilidade;
  • Catalogar os componentes e artefatos da empresa.

Ao trabalhar com Gestão de Requisitos + Maven + Versionamento + Repositório Global, temos um melhor gerenciamento do ciclo de vida dos sistemas e componentes da empresa, esse gerenciamento é o ponto de partida para evoluir o ambiente até chegar em recursos mais avançados de Integração e Entrega Contínua.

Até a próxima.

Comentários

Postagens mais visitadas deste blog

Utilizando LocalDate, LocalDateTime e LocalTime na Prática

Tudo bem pessoal, hoje iremos avaliar e analisar operações de manipulação de Datas envolvendo a JavaTime API introduzida no Java 8.

Exemplos da java.time API
Já se passaram alguns anos desde o lançamento do Java 8 e mesmo após este período, há empresas que desconhecem o poder da java.time API, esta foi uma nova API de datas introduzida no Java 8 visando resolver problemas que tínhamos com as velhas classes Date e Calendar.

Vamos mostrar vários exemplos práticos do uso da API:
Criação de objetos No exemplo abaixo, estamos criando os objetos para manipulação de datas, perceba que temos 3 tipos, sendo LocalDate para manipular datas, LocalDateTime para manipular data/hora e LocalTime para horas:
LocalDate localDate = LocalDate.now(); LocalDateTime localDateTime = LocalDateTime.now(); LocalTime localTime = LocalTime.now();
Utilizando formatação Aqui realizamos a operação de formatação, perceba que não foi necessário utilizar a classe SimpleDateFormat, que usaríamos em conjunto com D…

Lendo e Manipulando arquivos CSV com Java

Olá hoje veremos como realizar a leitura e manipulação de arquivos CSV com Java, mostrando que as novas versões da plataforma Java deixaram algumas tarefas simples de serem realizadas.

Exemplo de Arquivo Hoje em dia é comum ao realizar integrações ou carga de dados o uso de arquivos CSV, isto porque, este arquivo possui uma estrutura de fácil entendimento e simples de manipular na maioria das plataformas de desenvolvimento.

Para realizar a leitura dos dados vamos manipular um arquivo com as seguintes colunas: namecpfagephone address:

name;cpf;age;phone;address caio;123456789;20;1145223643;AvenidaPaulista vinicius;147852369;18;1125253625;AvenidaManoel sandra;963258741;30;1174587858;RuaTeixeira regina;125478522;40;1145254536;RuaFernando fernando;785245563;42;1145253669;RuaPereira augusto;456123014;50;1125363633;AvenidaPaulinia maria;456123789;10;1125455525;AvenidaNossaSenhora
Para representar os dados em objetos Java iremos utilizar a seguinte classe:

importlombok.AllArgsConstruc…

Versionamento de Banco Dados com Flyway

Olá pessoal, hoje iremos analisar e aprender como realizar o versionamento e gerenciamento das bases de dados relacionais utilizando o framework Flyway.

Versionamento de Banco Dados Ao trabalhar com desenvolvimento de sistemas é comum realizarmos o versionamento, isso porque uma aplicação pode necessitar de correções, novas funcionalidades e evoluções, onde para garantir a compatibilidade e cuidar do seu ciclo de vida, geramos versões onde é especificado quais itens estão presentes em cada release.
Vamos imaginar seguinte cenário: Sistema ERP1.0.0: Entrega dos módulos Financeiro e RH;1.1.0: Entrega do módulo Contas a Receber. Perceba que a ideia é controlar o que cada versão possui de diferente, e para controlar essas mudanças no lado da aplicação existem várias técnicas e ferramentas, mas e para controlar as mudanças no lado do Banco de dados ? 
Para isso podemos utilizar ferramentas de versionamento que ajudam a realizar este controle, a ferramenta que iremos utilizar é o Flyway.
Con…