Documento de Arquitetura - naiieandrade/2017.2-Desenho GitHub Wiki
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 |
Inglês | Português |
---|---|
work | Trabalha |
register |
|
has |
|
contains | Contém |
do | Faz |
realize | Realiza |
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.
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.
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.
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.
![](https://github.com/naiieandrade/2017.2-Desenho/wiki/imgs/mvc.png)
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.
![](https://github.com/naiieandrade/2017.2-Desenho/wiki/imgs/railsmvc.png)
![](https://github.com/naiieandrade/2017.2-Desenho/wiki/imgs/clip-image0045.jpg)
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.
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.
![](https://github.com/naiieandrade/2017.2-Desenho/wiki/imgs/diagramaDeCasosDeUso.png)
Clique aqui para visualizar a imagem ampliada
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. |
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.
![](https://github.com/naiieandrade/2017.2-Desenho/wiki/imgs/classe1versao.jpeg)
Clique aqui para visualizar a imagem ampliada
![](https://github.com/naiieandrade/2017.2-Desenho/wiki/imgs/diagramaDeClasse.jpg)
Clique aqui para visualizar a imagem ampliada
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.
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:
![](https://github.com/naiieandrade/2017.2-Desenho/wiki/imgs/banco1versao.jpeg)
Clique aqui para visualizar a imagem ampliada
![](https://github.com/naiieandrade/2017.2-Desenho/wiki/imgs/desenhoConceitual.jpg)
Clique aqui para visualizar a imagem ampliada
![](https://github.com/naiieandrade/2017.2-Desenho/wiki/imgs/desenhoConceitual3.0.jpg)
Clique aqui para visualizar a imagem ampliada
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 |
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 |
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 |
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. |
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. |
Atributo | Domínio | Tamanho | Formato | Descrição |
---|---|---|---|---|
status | Texto | 15 | status do serviço, se ele está disponível ou não. |
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. |