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.

AngularJS - Conhecendo o Framework

Olá pessoal, hoje iremos começar uma série de tutoriais falando sobre o AngularJS, que é um framework JavaScript que veem se tornando muito popular entre os frameworks de front-end.

O  Framework AngularJS

O AngularJS é um framework JavaScript mantido pelo Google para o desenvolvimento de aplicações ricas para Web, sua principal característica é a forma de trabalho, onde suas diretivas estendem os componentes do HTML utilizando marcações. 

Para detalhes sobre o AngularJS podemos visitar o site oficial, onde também encontramos exemplos, links para downloads, cursos, etc.

Site oficial: https://angularjs.org/
Site com tutoriais e exemplos: http://www.w3schools.com/angular/

Começando com AngularJS

Como qualquer outro framework JavaScript, tudo começa com uma importação do arquivo principal do framework:


<!DOCTYPE html>
<html>
  <head>
    <title>Exemplo AngularJS</title>
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js"></script>
  </head>
  <body>
  
  </body>
</html>


Conhecendo as Diretivas

As diretivas do AngularJS, são extensões dos atributos das tags HTML, as diretivas possuem as seguintes caraterísticas:
  • Começam com o prefixo ng-(nome da diretiva);
  • São tags que o AngularJS usa para manipular seus eventos e ações;
  • São colocadas diretamente na tag HTML, por isso que o framework tem o comportamento de extensão do HTML.

Seguindo a normalização do HTML 5, ao invés de usar o prefixo ng-(nome da diretiva) é recomendado usar data-ng-(nome da diretiva).

Vamos agora analisar 3 principais diretivas do AngularJS:
  • data-ng-app: Responsável por inicializar uma aplicação feita com AngularJS, geralmente é adicionada a um elemento pai ma hierarquia de tags do HTML;
  • data-ng-model: Responsável por marcar um ponto de entrada de dados, geralmente aplicada em tags de formulários;
  • data-ng-bind: Utilizada para exibição de dados processados pelo AngularJS.

Exemplo Básico com AngularJS

Agora para mostrar o funcionamento do framework e suas diretivas, vamos montar um exemplo onde entraremos com um dado, e iremos exibi-lo automaticamente na tela:


<!DOCTYPE html>
<html data-ng-app="">
  <head>
    <title>Exemplo AngularJS</title>
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js"></script>
  </head>
  <body>
    <div>
      <p>Digite seu Nome: <input type="text" data-ng-model="nome" /></p>
      <p>Seu nome é: <span data-ng-bind="nome"></span></p>
    </div>
  </body>
</html>

Nos próximos tutorias iremos evoluir os exemplos, utilizando outros comportamentos e diretivas do framework AngularJS.

Download dos exemplos: Conhecendo AngularJS

Até a próxima.