Documento de Arquitetura - Desenho2018-1/pan-pan GitHub Wiki
Autor | Data |
---|---|
Roger Lenke | 28/03 |
Rodrigo Oliveira | 29/03 |
Roger Lenke | 31/03 |
Josué Nascimento | 31/03 |
Josué Nascimento | 04/04 |
Fabíola Fleury | 10/04 |
Roger Lenke | 19/04 |
Pablo Silva | 23/04 |
Pablo Silva | 03/04 |
Pablo Silva | 05/04 |
Este documento provê uma visão geral da arquitetura de software para o sistema Pan-Pan. O Pan-Pan é um projeto que visa permitir e auxiliar o gerenciamento de bandas que não possuem um produtor.
O objetivo deste documento é detalhar as decisões significativas relacionadas a arquitetura e ao desenho na construção do sistema. Sua produção será iterativa, como definido no Processo do Projeto Pan Pan, sendo que cada artefato de arquitetura será incrementado conforme novas funcionalidades forem desenvolvidas e desenhadas.
A arquitetura do projeto Pan-Pan foi pensada e criada com os seguintes objetivos em mente:
- Facilitar a tomada de decisões na hora de realizar a implementação de funcionalidades.
- Facilitar a manutenção do código.
- Permitir que técnicas de programação e padrões de projeto estudados na disciplina de Arquitetura e Desenho de Software fossem aplicados.
- Baixo acoplamento entre serviços
- Alta coesão em cada serviço
As restrições de implementação do sistema são:
- O desenvolvimento Arquitetural do projeto pan-pan, deve ser modularizado, a ponto de permitir que o sistema possa vir ser um framework
Uma lista com todos os requisitos do projeto pode ser encontrada no Documento de Requisitos do Projeto. Os requisitos não funcionas e seu mapeamento para funcionalidades podem ser encontrados no NFR.
As tecnologias a serem utilizadas para o desenvolvimento do Pan-Pan estão descritas abaixo.
- Java : A linguagem Java será a linguagem de programação utilizada utilizada para a produção de uma API REST, que irá ser utilizada pela aplicação numa arquitetura cliente-servidor (a arquitetura completa será explicada mais adiante). A escolha desta linguagem se dá pelo fato de ser moldada no paradigma de Orientação a Objetos, sendo uma excelente escolha para ser aplicada no projeto no contexto da disciplina de desenho de software.
- Spring : O framework Spring é um dos mais populares do mercado no que se refere ao uso do Java. Este framework implementa um grande numero de funções e facilidades para o desenvolvimento, como como injeção de dependência e persistência de dados, permitindo assim um foco maior no problema a ser solucionado, ao invés de um foco na tecnologia que está sendo utilizada. Além disto, o framework é desenvolvido em cima do padrão Grasp Controller, que transfere as responsabilidades de controlar os eventos do sistema para uma classe não relacionada com a interface.
- Mysql : Banco de dados relacional que será responsável por persistir os dados da aplicação.
- React : Uma biblioteca escrita em javascript, baseada em componentes, cujo o objetivo é permitir a construção de interfaces de usuário.
Versões das tecnologias Utilizadas
Tecnológia | Versão |
---|---|
Java | 8 |
React | 16.2 |
Mysql | 5.0 |
O projeto Pan-pan será implementado com uma arquitetura baseada em microsserviços. Neste modelo, cada serviço é um módulo separado do outro, e o cliente usufrui dos serviços oferecidos pelo servidor sem noção das separações e granularidades internas. Neste projeto, a separação principal é entre os módulos front-end, que tem como objetivo organizar a parte visível para o usuário do sistema, e o módulo back-end implementará uma API RESTful para fornecer os dados e regras da aplicação, utilizando outro módulo para a persistência do banco de dados.
O módulo front-end será implementado com a utilização do React, que permite a criação de componentes para a construção da interface de forma reaproveitável.
O módulo back-end será implementado na linguagem de programação Java, com um viés para o desenvolvimento Web. Para facilitar este desenvolvimento, será utilizado o framework Spring Boot.
O Spring Boot é um framework para Java que tem como objetivo simplificar o desenvolvimento web nesta linguagem, introduzindo componentes prontos e realizando a injeção de dependências, que diminui o acoplamento entre as classes do sistema.
Temos então no software os módulos divididos da seguinte forma:
- Frontend
-
- Pages: São a interface de comunicação com o usuário, as páginas da aplicação
-
- Components: Módulos reaproveitáveis entre as páginas da aplicação.
-
- Actions: Responsáveis pelo envio de informação para armazenamento.
-
- Reducers: Responsável por atualizar o storage da aplicação após atualização das actions
- Backend
-
- Model: que é a camada onde são descritos os modelos de dados que serão utilizados no sistema.
-
- Repository: Classes responsáveis por realizar os acessos ao banco de dados e fornecer uma interface de Criação, Leitura, Remoção e Atualização de objetos (CRUD).
-
- Controller: Responsável por fornecer acesso a métodos mais complexos que CRUD ou que necessitem de acesso a várias repositories
-
- Handlers: Reponsáveis por mapear e executar tarefas pré e pós atividades de uma repository.
O framework Spring em sua forma REST implementa o MVC utilizando a camada repository para abstrair os recursos da API. Ao invés de usar a camada view para exibir dados com uma HTML response, utiliza a camada repository para lidar com as HTTP requests e fornecer dados em formatos JSON para serem consumidos por uma aplicação client-side que lida com a exibição desses dados como bem desejar.
No Spring MVC a solução implementada é simplificada, de maneira que a controller é normalmente responsável por receber e relacionar as models recebidas com dados para a repository. No MVC, a model é uma interface da classe Map, que permite a abstração completa da tecnologia utilizada na view. Desta maneira, é possível fazer a view utilizando frameworks diferentes. Você pode integrar-se diretamente a tecnologias de renderização baseadas em models. para mais informações sobre o funcionamento do spring MVC clicar aqui
A modelagem e o desenho da estrutura do projeto Pan Pan é feita com diferentes artefatos, com o objetivo de mostrar como a arquitetura se comporta de diferentes perspectivas. Os artefatos que serão utilizados para essa representação são:
- Diagrama de Caso de Uso: O diagrama de casos de uso é um diagrama que ajuda na comunicação entre os membros da equipe de desenvolvimento e o cliente, demonstrando os cenários nos quais os atores irão interagir com o sistema. O diagrama de caso de uso pode ser encontrado aqui.
- Diagrama de Classes: O diagrama de classes é um diagrama que tem como objetivo mapear de maneira clara a estrutura de um sistema, definindo suas classes, seus métodos e seus atributos, assim como as interações que as classes possuem umas com as outras, o que facilita a implementação da funcionalidade no código. Este artefato pode ser encontrado aqui.
- Diagrama de Sequência: O diagrama de sequência é um diagrama que ilustra o ciclo de vida de uma interação entre objetos, permitindo ter uma visão determinística da sequência em que cada ação acontece. Neste projeto teremos um diagrama de sequência para cada critério de aceitação de uma feature. Estes artefatos podem ser encontrados aqui.
- Diagrama de Pacotes: O diagrama de pacotes é um diagrama cujo objetivo é demonstrar a organização entre os elementos de um projeto. Apesar de ser normalmente utilizado em projetos de média e larga escala, o diagrama de pacotes é útil no projeto Pan-pan porque permite a equipe desenhar o sistema pensando em módulos e subsistemas. O diagrama de pacotes do projeto pode ser encontrado aqui.
- Diagrama de Colaboração: O diagrama de colaboração é um diagrama cujo objetivo é demonstrar como os objetos interagem entre si. O diagrama de colaboração do projeto pode ser encontrado aqui.
UML Class Diagram Tutorial. https://www.lucidchart.com/pages/uml-class-diagram
Package Diagram. https://www.uml-diagrams.org/package-diagrams.html
Web MVC Framework. https://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.html
Spring Web MVC. https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html
Spring REST. https://spring.io/guides/gs/rest-service/
MVC Framework - Introduction.
https://www.tutorialspoint.com/mvc_framework/mvc_framework_introduction.htm