Documento de Arquitetura - naiieandrade/2017.2-Desenho GitHub Wiki

1. Traduções

1.1 Entidades

Inglês Português
Person Pessoa
Clien Cliente
Employee Funcionário
Owner Proprietário
Establishment Estabelecimento
Schedule Agenda
EmployeePoints Ponto dos Funcionários
Service Serviço

1.2 Ligações entre entidades

Inglês Português
work Trabalha
register
  • Registra
  • Cadastra
has
  • Tem
  • Possui
contains Contém
do Faz
realize Realiza

2. Introdução

2.1 Finalidade

Este documento possui como finalidade a elucidação das questões relacionadas à implementação arquitetural do projeto MINUTA, desenvolvido na disciplina de Desenho de Software, que possui como clientes os pequenos empreendedores.

2.2 Escopo

Este artefato documenta a arquitetura a ser implementada no software e abrange assuntos relacionados à metas e restrições arquiteturais, visões de casos de uso, processos, implementação, dados e lógica.

2.3 Visão Geral

Este documento descreve os detalhes sobre as características arquiteturais do software MINUTA a ser desenvolvido, especificando os problemas relacionados a arquitetura da solução em software. O documento é dividido da seguinte maneira: inicialmente é apresentada a arquitetura da solução, em seguida as metas e restrições desta arquitetura são descritas, depois são apresentadas diversas visões sobre elementos da arquitetura e por fim todos os recursos referentes ao tamanho, desempenho e qualidade do software. Durante o documento serão apresentados os diagramas de casos de uso, pacotes, classes e a representação diagramada da modelagem do banco de dados.

3. Representação da Arquitetura

O projeto MINUTA utilizará a arquitetura MVC, que é o padrão utilizado na linguagem Ruby com o framework Rails e que organiza o sistema em três partes distintas: modelo(model), visão(view) e controladora(controller).

A camada de modelo(model) é o lugar onde os dados são estruturados, consultados e validados. Ela se conecta diretamente com a camada de controle pois a camada de controle que, através do input da camada de visão, irá definir quais dados serão consultados para que a camada de modelo faça conexão com a base de dados, e retorne sua resposta baseando-se nos dados analisados ou alterados. Um exemplo de classe da camada de modelo é a verificação de login, pois é uma ação requisitada por um ator que passa pela camada de visão, controle e, por fim, chega na camada de modelo para ser validada ou não.

A camada de visão (view) é a responsável por todas as interações com o usuário e também fará contato com a camada de controle para definir quais informações serão mostradas para o usuário. As principais funções da camada de visão são mostrar a interface gráfica para os usuários e fazer a comunicação com a camada de controle. Um exemplo dessa camada é a interface do usuário na aplicação.

A camada controladora(controller) é a camada que faz a ligação entre usuário e os dados, tendo vital importância dentro da arquitetura de nosso sistema. Os principais métodos que serão implementados estão na camada de controle. Para que essa camada execute os métodos ela recebe os comandos passados pelo usuário através da camada de visão e manipula os dados recebidos da camada de modelo.

Essa arquitetura pode ser vista na figura abaixo.

O MVC em RoR segue o mesmo padrão da arquitetura MVC que outras linguagens utilizam, apesar de possuir outras funcionalidades. A model mantém a relação entre os objetos e o banco de dados e manipula validação associação, transação e muito mais. Esse subsistema é implementado na biblioteca ActiveRecord, que fornece uma interface de vinculação entre as tabelas em um banco de dados relacional e o código de programa em Ruby que manipula registros do Banco de dados. Por padrão o ActiveRecords usa algumas convenções para nomenclatura para descobrir como o mapeamento entre os modelos e tabelas do banco de dados devem ser criados, o Rails pluraliza os nomes das classes para encontrar as tabelas nos respectivos bancos de dados.

View é a representação dos dados em formato específico, gerada a partir da controller, esse subsistema é implementado pela biblioteca ActionView, que é uma API do Rails.

A Controller é utilizada para que seja possível realizar a conexão entre a tela onde o usuário consegue interagir com o software e os dados armazenados do programa, de modo que são realizadas ações relacionadas à manipulação desses dados do banco, como: listar, procurar, alterar, inserir ou deletar informações. Para realizar essas funções os controladores do rails recebem as requisições HTTP do browser direcionando para as views específicas, e, assim, executando os métodos solicitados.

4. Metas e Restrições da Arquitetura

O sistema a ser desenvolvido será suportado por navegadores web como Mozilla Firefox, Microsoft Edge e Google Chrome, sendo otimizado para este último por conta de possuir recursos, em sua maioria, superiores aos outros navegadores disponíveis no mercado, além de abranger a maior parte dos usuários de navegadores mobile e desktop.

O projeto será implementado usando a linguagem de programação Python, em sua terceira versão (Python3), no framework de desenvolvimento Django na versão 1.11.4 e terá comportamento responsivo, ou seja, o mesmo site da aplicação será otimizado para uso tanto em dispositivos móveis, quanto desktops, utilizando o framework de desenvolvimento front-end Bootstrap 3.

Para que o software funcione será necessária conexão com a internet.

O software por possuir uma base de dados pessoais bastante pertinente dos clientes, donos e funcionários dos estabelecimentos, deverá manter estes dados em segurança dentro da base de dados do sistema, assim como as credenciais de usuários se tornam necessárias para a filtragem de recursos dentro do software.

5. Visão dos Casos de Uso

Clique aqui para visualizar a imagem ampliada

5.1 Atores dos Casos de Uso

Ator Descrição
Proprietário Dono do estabelecimento, responsável por cadastrar o estabelecimento na aplicação, além de poder disponibilizar seus serviços.
Funcionário Trabalhador do estabelecimento e prestador dos serviços do estabelecimento.
Cliente Parte interessada nos serviços prestados pelos estabelecimentos.

6. Visão Lógica

6.1 Diagrama de Classes

O diagrama de classe que está sendo utilizado no projeto é o 2.0 e a versão seguinte é a versão 1.0, seguida da versão 2.0 que é a versão atual do diagrma.

6.2 Versão Anterior do Diagrama de Classe (1.0)

Clique aqui para visualizar a imagem ampliada

6.3 Versão Atual do Diagrama de Classe (2.0)

Clique aqui para visualizar a imagem ampliada

7. Visão da Implementação

No pacote View ficarão todos os arquivos referentes a parte visual do software, que são os arquivos HTML e CSS. Em Ruby on Rails a camada View é implementada na biblioteca ActionView que define modelos de apresentação para dados.

O pacote Model mantém o relacionamento entre os objetos e o banco de dados, fazendo as validações necessárias ao sistema. Em Ruby on Rails a camada Model é implementada pela biblioteca ActionRecord que oferece uma interface de relacionamento entre as tabelas do banco de dados e o código do programa..

O pacote Controller é responsável por fazer a integração entre o pacote View e Model. Em RoR a camada Controller é representada pelo pacote ActionController que faz o controle de dados entre a ActionRecord e ActionView.

8. Visão dos Dados

O banco de dados está na versão 3.0, sendo mostrada a versão 1.0 a seguir, a versão 2.0 na sequência e por fim a terceira e atual versão do banco de dados, a versão 3.0:

8.1 Primeira Versão do Banco de Dados (1.0)

Clique aqui para visualizar a imagem ampliada

8.2 Segunda Versão do Banco de Dados (2.0)

Clique aqui para visualizar a imagem ampliada

8.3 Terceira Versão (atual) do Banco de Dados (3.0)

Clique aqui para visualizar a imagem ampliada

8.4 Dicionário de Dados - DD

8.4.1 Entidade: Person

Atributo Domínio Tamanho Formato Descrição
phone_person Texto 14 (xx) 9xxxx-xxxx número de telefone da pessoa
cpf Texto 14 xxx.xxx.xxx-xx cpf da pessoa
sexo Texto masculino ou feminino
name_person Texto 26 nome da pessoa

8.4.2 Entidade: Client

Atributo Domínio Tamanho Formato Descrição
id_user Numérico atributo de identificação do cliente
email_client Texto 26 [email protected] email para login no sistema
password_client Texto 10 senha para login no sistema

8.4.3 Entidade: Employee

Atributo Domínio Tamanho Formato Descrição
id_user Numérico atributo de identificação da pessoa
email_employee Texto 26 [email protected] email para login no sistema
password_employee Texto 10 senha para login no sistema

8.4.4 Entidade: Establishment

Atributo Domínio Tamanho Formato Descrição
name_establishment Texto 26
ending_time Texto 5 hh:mm horário de fechamento do estabelecimento.
opening_time Texto 5 hh:mm horário de abertura do estabelecimento.

8.4.5 Entidade: Schedule

Atributo Domínio Tamanho Formato Descrição
hour Texto 5 hh:mm horário marcado.
date Texto 10 hh:mm data que será realizado o serviço.

8.4.6 Entidade: Service

Atributo Domínio Tamanho Formato Descrição
status Texto 15 status do serviço, se ele está disponível ou não.

8.4.7 Entidade: Employee Points

Atributo Domínio Tamanho Formato Descrição
entry_time Texto 5 hh:mm horário de entrada do funcionário no estabelecimento.
exit_time Texto 5 hh:mm horário de saída do funcionário do estabelecimento.
⚠️ **GitHub.com Fallback** ⚠️