Skip to content

Documento de Arquitetura

João Pedro Sconetto edited this page Nov 23, 2018 · 44 revisions

Documento de Arquitetura

Histórico de Revisão

Data Versão Descrição Autores
05/09/2018 0.0.1 Criação do documento Mariana Mendes
07/09/2018 0.0.2 Adição de tópicos iniciais João Sconetto e Mariana Mendes
13/09/2018 0.0.3 Tópico visão geral: Diagrama de pacotes João Sconetto e Mariana Mendes
14/09/2018 0.0.4 Adição do diagrama de classes Adrianne Alves, Andrew Lucas, Maria Luiza e Natália
15/09/2018 0.0.5 Adição do diagrama NFR Diego Barbosa e João Pereira
18/09/2018 0.0.6 Adição do tópico 4 Mariana de Souza Mendes
18/09/2018 0.0.7 Descrição do diagrama de classes Adrianne Alves
19/09/2018 0.0.8 Descrição do NFR Framework João Pereira
25/09/2018 0.0.9 Introdução da representação arquitetural e adição do tópico 2.1 Natália Rodrigues
25/09/2018 0.1.0 Introdução da representação arquitetural e adição do tópico 2.2 Maria Luiza
15/11/2018 0.2.0 Evolução do Diagrama de Pacotes João Pedro Sconetto
22/11/2018 0.3.0 Adição do diagrama lógico do banco e descrição das tabelas da versão 1, além da linkagem Adrianne Alves
22/11/2018 0.4.0 Adição do diagramas de sequências Andrew Lucas, Maria Luiza e Adrianne Alves
22/11/2018 0.5.0 Adição dos estilos arquiteturais e adicionando versão 2 do NFR Maria Luiza e Adrianne Alves
22/11/2018 0.6.0 Correção das classes na descrição do diagrama Mariana Mendes
23/11/2018 0.7.0 Correção das classes na descrição do diagrama João Pereira
23/11/2018 1.0.0 Correções para entrega da primeira versão João Pedro Sconetto

Índice Analítico

1: Introdução

1.1 Finalidade

Este documento tem como finalidade apresentar uma visão geral da arquitetura que será usada no desenvolvimento do projeto e permitir um maior entendimento do sistema Ticketflix e de como ele irá se comportar e se comunicar com as outras aplicações que compõem o projeto. Com o maior detalhamento da arquitetura, espera-se deixar explícitas as decisões arquiteturais feitas pela equipe.

1.2 Escopo

Ticketflix será uma ferramenta desenvolvida voltada para empresas que fornecem serviços de shows, espetáculos, apresentações, filmes e etc, onde será possível gerenciar a venda, reserva e demais serviços correlacionados a ingressos para tais espetáculos. Será levantado, também, a construção de um subsistema de gerenciamento de bomboniere/lanchonete para vendas de item de consumação para clientes. Este documento apresentará toda a parte arquitetural para a confecção do software Ticketflix, a fim de tornar claras as características arquiteturais do projeto.

1.3 Metodologia

Para a elaboração desse arquivo, houve a divisão por artefato necessário para descrição da arquitetura do projeto. A primeira coisa feita foi a definição dos tópicos a serem descritos no documento, essa atividade foi realizada pelo João Sconetto e Mariana.

Tópico Autores
Diagrama de pacotes João Sconetto e Mariana
Diagrama de classes Adrianne Alves, Andrew Lucas, Maria Luiza e Natália
NFR inicial Diego Barbosa e João Pereira
Representação arquitetural Natália Rodrigues e Maria Luiza
Diagrama lógico do banco Adrianne Alves
Diagrama de sequência Andrew Lucas, Maria Luiza e Adrianne Alves
Estilos arquiteturais Maria Luiza e Adrianne Alves
Diagrama NFR versão 2 Maria Luiza e Adrianne Alves

É preciso salientar que a versão do documento conta com a revisão de todos os membros da equipe.

1.4 Definições, acrônimos e abreviações

Abreviação Definição
UnB Universidade de Brasília
DSW Desenho de Software

2 Representação Arquitetural

2.1 Padrão Arquitetural

A arquitetura utilizada no projeto será, essencialmente, a arquitetura providenciada pelo framework de desenvolvimento web Django, construído em torno do conceito de MVC (Model View Controller).
Com o advento da Internet, o conceito citado vem crescendo exponencialmente, isso porque tem sido visto como a melhor maneira de desenhar aplicações do tipo cliente-servidor. A grande maioria dos frameworks de desenvolvimento web da atualidade é baseada nele.
O Django utiliza o conceito de MVC fazendo uma adaptação do mesmo e criando o que é chamado de MTV (Model Template View). Tais conceitos serão apresentados nas seguintes seções.

2.1.1 MVC

O funcionamento do MVC está representado na figura a seguir:

MVC

  • Model (M): É o modelo de representação dos dados. Em outras palavras, é a maneira como os dados serão armazenados no banco. A Model é a camada responsável pela persistência de dados, na qual todas as entidades (classes) participantes do domínio da aplicação serão especificadas.

  • View (V): É a camada de apresentação, onde os dados são exibidos aos usuários finais. Nela, uma interface de interação é providenciada ao usuário, para que ele possa interagir e fazer requisições à aplicação.

  • Controller (C): É a camada intermediária, que controla o fluxo de informações entre a View e a Model. É nela que as requisições de usuários são recebidas e tratadas para que a comunicação entre as duas camadas presentes na extremidades da aplicação seja feita de maneira correta.

2.1.2 MTV

O Django utiliza o padrão MVC, no entanto ele usa sua própria lógica de implementação denominada o padrão MTV (Model - Template -View), que é descrito a seguir:

MVC

  • Model (M): Assim como no MVC, a Model é a camada de acesso a dados. Essa camada contém tudo e qualquer coisa sobre os dados: como acessá-lo, como validá-lo, quais comportamentos ele possui e as relações entre os dados.
  • Template (T): No MVC, a camada Template é representada como a View, que é a camada de apresentação. Essa camada contém questões relacionadas à apresentação: como algo deve ser exibido em uma página da Web ou outro tipo de documento.
  • View (V): No MVC, a camada View é a Controller, que controla o fluxo das informações. Essa camada contém a lógica que representa o intermédio entre a Model e a camada Template.

2.2 Estilos Arquiteturais

Estilo arquiteturais são princípios aplicados ao padrão arquitetural, a fim de dar um grau de uniformidade à arquitetura. Tendo em vista esse conceito, foi aplicado os seguintes estilos arquiteturais ao projeto.

2.2.1 Stand-Alone

A aplicação é independente e não depende de terceiros que fornecem dados ou serviços para a aplicação. Portanto, este estilo arquitetural faz-se presente na representação da arquitetura deste projeto.

2.2.2 N-Camadas

A aplicação é dividida em um conjunto de camadas, cada uma especializada em um tipo de serviço específico. Este é um estilo muito comum em padrões arquiteturais que utilizam MVC ou MTV, o qual está sendo usado neste projeto. Portanto, a aplicação é formada por 3 camadas, sendo Model, Template e View.

3: Padrões de Projeto

Os Padrões de Projeto e os GRASPS podem ser acessados aqui

4: Requisitos e Restrições Arquiteturais

4.1 Ticketflix

Requisito Ferramenta/Solução
Linguagem Python 3.6.4
Framework Django 2.0.3
Plataforma Web - Navegadores Chrome, Safari e Firefox
Segurança O sistema terá informações pessoais dos pacientes que só poderão ser vistas pelo mesmo ou pelo(s) seu(s) respectivo(s) médico(s). Outros dados pessoais só poderão ser vistos pelo próprio usuário.
Internacionalização (i18n) A aplicação terá suporte aos idiomas: Inglês e Português do Brasil (sendo esta a linguagem padrão).

5: Visão Lógica

5.1 Visão Geral: Pacotes e Camadas

O framework Django organiza os projetos em apps, que são pastas que contêm uma funcionalidade independente do restante da aplicação. Além disso, existem arquivos de configuração e arquivos estáticos globais. A figura a seguir mostra a organização de pastas de um app.

Diagrama de Pacotes Diagrama de Pacotes

  • apps: cada app tem uma pasta com as suas models, views, formulários, testes, templates e arquivos estáticos. Além disso, também há um arquivo URLs que será incluso no URLs global.

    • migrations : pasta com as migrações para o banco de dados.

    • static : pasta com arquivos CSS, JavaScript e imagens.

    • tests : arquivos de testes refente ao app.

    • templates : arquivos html do app.

    • locale : traduções referentes ao app.

    • models : arquivos de models do app.

    • views : arquivos de views do app.

    • forms : arquivos de formulários do app.

    • admin : arquivo de conexão do app com o admin.

    • urls.py : arquivo que mapeia as as views com templates de cada app

    • _init_ : arquivo que transforma o app em um pacote python.

    • apps : mapeia a pasta que o contém como um app.

    • utils : arquivos de validação dos apps.

  • config : pasta com as configurações do projeto Django.

    • urls.py : inclui todos os URLs.py dos apps.

    • _init_ : arquivo que transforma as configurações em um pacote python.

    • settings : arquivos com as configurações básicas da aplicação.

    • wsgi : especificação para uma interface simples e universal entre servidores web e aplicações web.

  • manage.py : arquivo criado automaticamente pelo Django para gerênciamento de comandos.

  • docs : documentação da aplicação.

  • compose : pasta com arquivos do docker.

  • utility : arquivos para o auxílio na instalação do software.

  • requirements : organiza todos os pacotes/componentes que a aplicação utiliza em arquivos.

5.2 Diagrama Lógico: Base de dados TicketFlix

Segue abaixo a primeira versão do diagrama lógico da aplicação TicketFlix.

  • Tabelas do banco: Até o momento existem um total de 22 tabelas na base de dados TicketFlix, a partir da qual são persistidos os dados para dar suporte à funcionalidades essenciais do sistema, como por exemplo, o usuário poder selecionar um assento para um ticket a ser adquirido na aplicação.

    • **django_content_type, django_admin_log, auth_permission, users_user_user_permission, user_user, auth_group_permission, auth_group,user_user_groups ** : Bases relativas à lógica de usuário do sistema.

    • account_emailconfirmation, account_emailaddress: Tabelas referentes à emails

    • spetacle_play : Tabela para persistência peça.

    • spetacle_movie : Tabela para persistência de filme.

    • spetacle_spetacle: Tabela para persistência da classe pai espetáculo

    • spetacle_show: Tabela para persistência dos dados de show

    • establishment_establishment: Tabela para persistência dos dados de estabelecimento

    • ticket_ticket: Tabela para persistência dos dados de ticket

    • session_session: Tabela para persistência de sessão

5.3 Visão Geral: Classes

O diagrama de classes tem como principal propósito relacionar os tipos modelados no sistema. Geralmente, inclui classe, interface, tipo de dado, restrição de acesso e dependências. Dessa forma, consiste em um importante artefato da UML (Unified Modeling Language) para documentação das classes codificadas ou que serão codificadas em uma aplicação.

O diagrama abaixo representa a arquitetura geral do Ticketflix :

Modelagem do Sistema

  • Classes

    • Establishment: Classe destinada aos estabelecimentos. Possui endereço, nome, cep e telefone.

    • Play: Classe destinada às peças. É parte de uma especialização total de espetáculo. Contém como atributos a Sinopse, diretor e elenco.

    • Show: Especialização de espetáculo, contém atributo específico de show, a banda.

    • Movie: Especialização de espetáculo, contém atributos específicos ao filme.

    • Spectacle: Classe que define o espetáculo. Movie, Show e Play são especializações de Espetáculo.

    • Administrator: Classe que define o administrador. É uma especialização de usuário que possui um atributo de permissão booleano que registra a sua permissão para tarefas de administrador.

    • Customer: Classe definida para o cliente, que contém como atributo a lista de compras já feitas no site. É uma especialização de usuário.

    • Purchase: Classe definida para a compra, possui um cliente, o preço total da compra, um carrinho e um status para definir a sua situação.

    • Authentication: Interface que padroniza o processo de autenticação para os cliente e gerente.

    • Cart: Classe destinada ao carrinho mantido por um cliente. Possui os atributos preço parcial, lista de tickets e lista de atributos da bomboniere.

    • bomboniereProduct: Classe para os produtos de bomboniere dos estabelecimentos. Possui o preço do produto, o tipo, descrição e a que estabelecimento pertence.

    • Ticket: Classe definida para o ticket de uma espetáculo. Possui atributos básicos como sessão a que esse ticket pertence, o tipo de ticket, correspondente à inteira ou meia entrada e o preço do mesmo. Essa classe compõe a classe Card.

    • Session: Classe que define as sessões de uma espetáculo. Possui atributos como a que espetáculo pertence, a data , o tempo de execução, a localização e o número de entradas disponíveis. É composta por tickets e compõe uma sessão.

    • User: Classe que determina o usuário do sistema, com atributos como nome, login, senha e email. É especializada em administrador e cliente.

    • PaymentStrategy: Classe destinada ao pagamento que tem como principal atributo o preço total da compra. É especializada em cartão de crédito e boleto. Compõe uma compra.

    • CreditCard: Classe que define um cartão de crédito. Possui atributos como nome do proprietário, número do cartão, código de segurança. É uma especialização de pagamento.

    • BankTicket: Classe definida para boleto, contendo como atributos o nome do proprietário, seu cpf, data de vencimento e cnpj da empresa. É uma das especializações de pagamento.

  • Relações

    • Establishment promotes Attraction. Determina que um estabelecimento pode promover várias espetáculos e cada espetáculo pode ser promovida por mais que um estabelecimento.

    • Administrator register Attraction. Determina que um administrador pode registrar várias espetáculos, mas cada espetáculo só pode ser registrada por um administrador.

    • Customer makes Purchase: Define que um cliente pode realizar várias compras no site e uma compra só pode pertencer à um cliente.

    • Purchase é composta por Cart: Relação de dependência entre a compra e o carrinho.

    • BomboniereProduct agrega Cart: É uma agregação ao carrinho, tal que um carrinho pode ter vários produtos da bomboniere, mas um produto da bomboniere só pode fazer parte de um carrinho.

    • Cart é composto por Ticket: Define que não há um carrinho sem ticket, e ainda que cada carrinho pode ter um ou vários tickets, mas um ticket só pode pertencer a um carrinho.

    • Sessão é composta por Ticket: Define que não há sessão se não houverem tickets. Além disso, uma sessão pode conter vários tickets, mas um ticket só pode pertencer à uma sessão.

    • Attraction é composta por Session: Define que não há espetáculo se não houver sessão. Além disso, cada espetáculo pode ter várias sessões, mas uma sessão só pode ser de uma espetáculo.

    • Purchase é composta por Payment: Para cada compra deve existir um pagamento.

5.4 Visão Geral: Requisitos não-funcionais

O NFR Framework utiliza requisitos não-funcionais tais como segurança, precisão, performance e custo para guiar o processo geral de desenho. Ele oferece uma estrutura para representar e registrar o desenho e o processo de raciocínio em diagramas, chamados de diagramas de interdependência de softgoal (softgoal interdependency graphs - SIGs) e tem como objetivo colocar os requisitos não-funcionais em primeiro lugar na mente do desenvolvedor. Existem vários passos importantes no processo de desenho:
  • acessar e adquirir conhecimento sobre:
    • o domínio particular e sobre o sistema a ser desenvolvido;
    • requisitos funcionais sobre o sistema em particular; e
    • tipos particulares de requisitos não-funcionais e técnicas de desenvolvimento associadas;
  • identificar os requisitos não-funcionais do domínio;
  • decompor os requisitos não-funcionais;
  • identificar as "operacionalizações" (possíveis alternativas de desenho para viabilizar os requisitos não-funcionais no sistema desejado);
  • lidar com:
    • ambiguidades;
    • trocas e prioridades; e
    • interdependências entre requisitos não-funcionais e operacionalizações;
  • selecionar operacionalizações;
  • apoiar as decisões com o Design Rationale; e
  • avaliar os impactos das decisões.

O diagrama de interdependência abaixo representa os requisitos não-funcionais do Ticketflix:

Versão 1

Versão 2

5.4 Diagrama de sequência

Para melhor compreensão das interações entre os objetos, foi elaborado dois diagramas de sequência um para a sequência do processo realizado pelo usuário, ao realizar o fluxo de compra. E outro, o fluxo do administrador, ambos seguem abaixo:

5.4.1 Diagrama de sequência Usuário

Esse fluxo representa a sequência realizada pelo usuário no processo de compra. O fluxo inicia com o usuário selecionando uma Espetáculo, depois uma das sessões desse espetáculo. Após a escolha da sessão o usuário deve escolher a quantidade de ingressos, e depois escolher os assentos. O próximo passo é selecionar os itens de bomboniere e então finalizar o pedido de compra. O usuário então, irá visualizar o resumo do pedido, confirmar a compra, e realizar o pagamento. Após a aprovação do pagamento, os ingressos serão enviados ao usuário.

5.4.2 Diagrama de sequência Administrador

O fluxo de criação dos objetos, é realizado pelo administrador. Ele inicia cadastrando espetáculos, salas e itens de bomboniere. Por fim ele cadastra uma sessão definindo em qual sala ela ocorrerá e a qual espetáculo ela pertence.

6 Referências

CHUNG, Lawrence et al. Non-functional requirements in software engineering. Springer Science & Business Media, 2012.

SERRANO, Milene. Arquitetura e Desenho de Software - Aula 02. 2018. 45 slides. Material apresentado na disciplina de Arquitetura e Desenho de Software no curso de Engenharia de Software da UnB, FGA.

Clone this wiki locally