Arquitetura de Software, Arquitetura Monolítica, Engenharia de Software, Microservices, Padrões de Projeto

Micros-serviços: características, benefícios e desvantagens em relação à arquitetura monolítica que impactam na decisão do uso desta arquitetura.

A busca por melhores formas de se construir sistemas
computacionais tem sido intensa e contínua. Nesta era de alta
disponibilidade de Internet, propagação dos dispositivos
móveis, juntamente com o advento da internet das coisas (IOT
– Internet of Things) e a computação nas nuvens, desenvolver
sistemas que utilizem destes recursos e que ainda possam
suportar a alta demanda de usuários e suas requisições, bem
como a diversidade de tipos de clientes existentes neste
cenário, pode ser um grande desafio.
De acordo com [1] no ano de 2016 estima-se que haverá 6,4
bilhões de “coisas” conectadas à rede mundial de
computadores, partindo de um aumento de 30% em 2015 e
chegando a 20,8 bilhões até 2020, sendo que em 2016 a
previsão é de 5,5 milhões de novas “coisas” que se conectarão
à rede todos os dias.
Diante deste cenário fatores como escalabilidade,
desempenho, disponibilidade e produtividade surgem como
pontos importantes a serem considerados no momento de se
construir uma aplicação. E para alcançar estes itens, muitos
conceitos têm sido discutidos e novas formas de se organizar e
construir sistemas computacionais vêm sendo colocadas em
prática, deixando de lado formas tradicionais de se
desenvolver uma aplicação, como é o caso das aplicações
monolíticas, cujo o perfil, nem sempre se encaixa nesta atual
perspectiva.
A arquitetura baseada em micros-serviços surge neste
panorama como uma alternativa ao tradicional padrão
arquitetural monolítico. Muito tem se falado deste estilo
arquitetural, colocando-a no topo das expectativas exageradas
de diversas pesquisas de 2015 do Gartner Hype Cycle,
explicado em [23], como por exemplo sobre serviços em [22],
desenvolvimento em [20] e arquitetura de aplicações em [21].
Este artigo tem como objetivo apresentar esta arquitetura
comparando suas características, vantagens e desvantagens em
relação ao estilo arquitetural monolítico, bem como, apresentar
os cenários onde a escolha deste estilo se torna conveniente.
Passando também pelos desafios de se construir um sistema
desde o início utilizando esta arquitetura e o de decompor um
sistema monolítico já existente, contribuindo na decisão de
quando e como utilizar ou não o padrão de arquitetura em
micros-serviços. Também é abordada a relação entre este
padrão arquitetural e Service Oriented Architecture – SOA,
comentando rapidamente também sobre o padrão de
linguagem existente para a construção de sistemas baseados
em micros-serviços.

Clique no link para fazer download do Artigo Completo Sobre Microservices.

 

Engenharia de Software, Java, Spring

SAS – Sistema de Avaliações e Simulados

No final do ano passado apresentei o meu TCC – Trabalho de Conclusão de Curso, que consistiu em um projeto chamado SAS – Sistema de Avaliações e Simulados.

Este trabalho tem como objetivo apresentar uma proposta de software para auxiliar nos processos avaliativos. A ferramenta desenvolvida possibilita ao professor a geração de avaliações e simulados, correção e análise de desempenho dos mesmos. Os testes poderão ser realizados online ou poderão ser impressos. Alunos também poderão acessar relatórios de desempenho. A modelagem do sistema foi feita utilizando a metodologia de desenvolvimento ICONIX que é apresentada no decorrer do trabalho. O sistema foi desenvolvido utilizando a linguagem Java, e alguns frameworks como Spring e EclipseLink. Além das tecnologias, são abordados conceitos relacionados à avaliação, ao ENADE e à avaliação institucional.

O trabalho e a apresentação em Power Point pode ser baixada nos links abaixo:

TCC – SAS Sistema de Avaliações e Simulados em PDF

TCC – Apresentação SAS Sistema de Avaliações e Simulados em PDF

Padrões de Projeto

Prototype

Prototype também é um padrão de projeto (design pattern) criacional, seu objetivo é a criação de objetos a partir de um modelo, um protótipo já estabelecido, ele é usado em casos em que se é necessário a criação de vários objetos de uma classe cujo tais objetos sejam semelhante.

Para isso deve-se criar um objeto modelo (protótipo) clonável e fazer as atribuições que são comuns a todos os objetos ou os valores default. A classe deve implementar a interface Clonable.


public class Aluno implements Cloneable {
private String nome;
private String cidade;
private String cep;
private String universidade;
private Boolean possuiDependencia;
private ArrayList<Float> notas = new ArrayList<Float>();

 // GETTERS AND SETTERS
...
}

No metodo clone poderá ser feito a clonagem do protótipo, no caso da array, terá que ser feito um for, clonando a array manualmente, pois senão ele apenas criará uma referência para o mesmo objeto e então se um elemento for alterado em uma lista será alterado nas outras também.


protected Object clone() throws CloneNotSupportedException {

   Aluno novoAluno = (Aluno) super.clone();
   if(this.notas != null){
     novoAluno.notas = new ArrayList<Float>();
     for(Float f : this.notas){
        novoAluno.notas.add(f);
     }
   }
 return novoAluno;
 }

Usando:


public static void main(String[] args) throws CloneNotSupportedException {

Aluno alunoPrototipo = new Aluno();
alunoPrototipo.setCidade("Cidade Default");
alunoPrototipo.setCep("Cep Default");
alunoPrototipo.setUniversidade("Universidade Defaut");
alunoPrototipo.setDependencias(false);

Aluno a1 = (Aluno) alunoPrototipo.clone();
a1.setNome("José");
System.out.println(a1);

Em UML:

Clonable

Referência: Aula de Engenharia de Software – Profº Marcio – Univás.

Padrões de Projeto

Singleton

Singleton é um padrão de projeto (desingn patterns) criacional cuja a função é garantir a criação de uma única instância de determinada classe para toda a aplicação, ou seja, o objeto desta classe será criada apenas uma vez e sempre que necessário usa-lo, será sempre o mesmo objeto que será utilizado.

Para isso é necessário que a classe tenha um construtor privado, tenha um atributo estático e privado da classe para que nele seja armazenado a instância única da classe e um método público e estático para retornar a instância única do objeto e cria-la quando for utilizada da primeira vez.


public class SingletonClass {

	private static SingletonClass instance;

	private SingletonClass() {
	}

	public static SingletonClass getInstance(){
		if(instance == null){
			instance = new SingletonClass();
		}
		return instance;
	}
}

Este código acima pode ser melhorado ainda para que tenha maior garantia tornado o atributo da classe também uma constante.


public class SingletonClass {

	private static final SingletonClass INSTANCE = new SingletonClass();

	private SingletonClass() {
	}

	public static SingletonClass getInstance(){
		return INSTANCE;
	}
}

Em UML:

Class Diagram0

Referência: Aula de Engenharia de Software – Profº Marcio – Univás.