Reutilização de Software
Introdução
A reutilização de software aborda os conceitos inerentes ao que tange todo o tipo de reuso ou reaproveitamento de conceitos, produtos ou soluções previamente elaboradas ou adquiridas para a criação de novos. Tem o objetivo de prover formas para se aumentar a qualidade de produtos de softwares bem como a economia e a produtividade durante o processo de desenvolvimento[1].
Sendo assim, o presente documento tem como objetivo elucidar e descrever algumas partes onde se pode observar a utilização da reutilização ao longo do projeto Curumim.
Código
No que se refere ao código do projeto propriamente dito, podem ser citados alguns dos padrões de projetos que foram aplicados que colaboram de forma muito agregadora para as práticas de reutilização. Seguem alguns exemplos:
- Middlewares: Os middlewares desenvolvidos na API conferem uma ótima forma de reutilização de software visto que um middleware pode ser utilizado de forma desacoplada em diferentes rotas e em diferentes contextos.
- ProjectInteface: A classe ProjectInterface confere uma interface para a aplicação do padrão state. Essa classe irá definir os métodos que serão utilizados pelas classes ActivityController e EventController de acordo com o estado vigente da classe ProjectController.
- global-styles: Já no front-end, o arquivo global-styles.css será utilizado ao longo de todo o código do projeto, sendo acessado e aplicado em muitos elementos do sistema.
- components: Também no front-end, com a utilização da biblioteca React, foram desenvolvidos alguns componentes encapsulados que serão utilizados em muitos lugares no código do front. Podem-se tomar como exemplos mais específicos os componentes header e sidebar.
Docker
Abordando um pouco o contexto de ambiente de desenvolvimento, é importante citar a utilização do Docker. O Docker é uma plataforma que visa a criação, a testagem e a implementação de aplicações em ambiente separado e isolado na máquina original, um container[2]. Dessa forma, é possível para os desenvolvedores uma maior padronização dos recursos que serão utilizados e facilita muito o fluxo de trabalho. Isso implica num empacotamento de maior qualidade visto a uniformidade entre os ambientes utilizados pelos desenvolvedores que compõem uma equipe.
No back-end foi configurado um Docker com a versão alpine do Node.js. Já no front-end o Docker foi configurado com React.js a partir de uma imagem Node.js básica. Tais configurações podem ser melhor visualizadas a partir do Dockerfile do back-end e do Dockerfile do front-end.
Além disso, é feito o uso do Docker Compose que age, basicamente, como o orquestrador de containers do Docker, organizando e gerenciando as instâncias do Docker utilizadas na aplicação[3]. As configurações do Docker Compose podem ser acessadas pelos documentos: docker-compose.yml do back-end e docker-compose.yml do front-end.
Node.js
O Node.js é um interpretador JavaScript que trabalha de forma assíncrona permitindo aos desenvolvedores a criação de todo tipo de aplicação e ferramentas do lado servidor (back-end)[4].
Do ponto de vista de reutilização, o Node permite a utilização de inúmeras bibliotecas e ferramentas, bem como frameworks como o Express, o qual oferece soluções para gerenciamento de requisições de diferentes verbos HTTP em diferentes URLs, integração de "view engines" para inserir dados nos templates, entre outros[4].
A utilização do Express no projeto pode ser visualizada no arquivo app da API, onde ocorre a sua importação e configuração e no arquivo de rotas da API, onde as rotas são tratadas com aplicações de middlewares conforme proporciona o framework.
Além disso, pode se notar uma grande forma de reutilização de software no projeto a partir da utilização do Sequelize, que se trata de um ORM (Object/Relational Mapper), e é utilizado para simplificar de forma a abstrair as manipulações e interações com o banco de dados. Sua utilização pode ser conferida nos arquivos de migrations contidos no diretório migrations e no index do banco de dados onde são inicializadas a models e suas relações.
React.js
Já no front-end da aplicação, pode-se citar a utilização da biblioteca JavaScript React que visa facilitar a criação de UIs interativas. Permite um desenvolvimento baseado em componentes[5] o que colabora muito significativamente com as práticas de reutilização de software.
Bibliografia
- [1] DEVMEDIA. Reutilização de Software - Revista Engenharia de Software Magazine 39. Disponível em: https://www.devmedia.com.br/reutilizacao-de-software-revista-engenharia-de-software-magazine-39/21956. Acesso em: 13 de outubro. 2021.
- [2] GOMES, Pedro. Afinal, o que é Docker?. opservices, 2018. Disponível em: https://www.opservices.com.br/o-que-e-docker/. Acesso em: 13 de outubro. 2021.
- [3] DOCKER. Overview of Docker Compose. Disponível em: https://docs.docker.com/compose/. Acesso em: 13 de outubro. 2021.
- [4] MOZILLA. Introdução Express/Node. Disponível em: https://developer.mozilla.org/pt-BR/docs/Learn/Server-side/Express_Nodejs/Introduction. Acesso em: 13 de outubro. 2021.
- [5] REACT. React – Uma biblioteca JavaScript para criar interfaces de usuário. Disponível em: https://pt-br.reactjs.org/. Acesso em: 13 de outubro. 2021.
Versionamento
Versão | Data | Modificação | Autor |
---|---|---|---|
0.1 | 13/10/2021 | Identificação de reutilizações no projeto | Todos os integrantes |
1.0 | 13/10/2021 | Abertura do documento | Daniel Porto |
1.1 | 14/10/2021 | Revisão por pares | Bruno Felix, João Pedro |