Especificação - Software-Design-2017/SSMais GitHub Wiki
Histórico de Revisão
Data | Versão | Descrição | Autor(es) |
---|---|---|---|
29/10/2017 | 1.0 | Introdução | João Paulo |
29/10/2017 | 2.0 | Posicionamento | João Paulo |
29/10/2017 | 3.0 | Envolvidos | João Paulo |
29/10/2017 | 4.0 | Visão Geral do Produto(5.1) | João Paulo |
29/10/2017 | 5.0 | Descrição do Usuário | Igor Gabriel e João Paulo |
29/10/2017 | 6.0 | Recursos do Produto | Ronyell Henrique |
29/10/2017 | 7.0 | Justificativa | Thiago Nogueira |
29/10/2017 | 8.0 | Níveis de Reutilização | Thiago Nogueira |
29/10/2017 | 8.0 | Core | Marcelo Augusto |
1. Introdução
2. Tipo do Framework
2.1. Justificativa
3. Spots
3.1. Hot Spots
3.2. Frozen Spots
4. Core
5. Níveis de Reutilização
Para esta fase do projeto iremos desenvolver um framework de gerenciamento e agendamentos de serviços.
Consideramos a realização disso interessante, pois esta funcionalidade está presente em diversas aplicações, como por exemplo em de clínicas de saúde. Além disso, ela também está presente em nosso projeto da primeira fase da disciplina, o que demonstra a sua utilidade em diversas aplicações.
Como será realizada a sua construção e as suas principais características arquiteturais serão representadas nos tópicos a seguir.
Foi definido, pelos integrantes, que o framework a ser desenvolvido será do tipo Caixa Cinza, que é um híbrido entre o tipo caixa branca e o caixa preta.
O framework caixa branca possui sua reutilização provida por pontos flexíveis, normalmente usando o conceito de herança e alguns padrões de projeto específicos. Este tipo de framework possui sua orientação a hot spots.
Os recursos existentes em um framework caixa-branca são reutilizados e estendidos a partir de: herança de classes do framework e sobrecarga (overriding) de métodos "hook" pré-definidos. Métodos "hook" são definidos em interfaces ou classes abstratas e devem necessariamente ser implementados por uma aplicação. Os padrões de projeto (design patterns) utilizados são o Command, o Observer e o Template Method [Gamma 94].
Já um framework de caixa preta tem sua reutilização provida por composição, sendo menos flexível. Estes são baseados em componentes de software. A extensão da arquitetura é feita a partir de interfaces definidas para componentes. Os recursos existentes são reutilizados e estendidos por meio de: definição de um componente adequado a uma interface específica e integração de componentes em um framework que utiliza padrões de projeto como o Strategy [Gamma 94]. Normalmente a utilização do mesmo é provida por composição.
Logo, o framework de caixa cinza é um misto entre os dois, tendo seus pontos de reutilização provida por meio de hot spots e de composições.
A equipe optou por realizar um framework do tipo caixa cinza por permitir uma flexibilidade em seu uso e mantendo uma certa rigidez, que é necessária em algumas partes do framework.
A equipe se reuniu e fez um levantamento de aplicativos mais utilizados, tanto em plataformas mobile, quanto em plataformas web e notou que muitos deles possuíam uma característica em comum, possuíam serviços relacionados a busca e agendamento. Os sistemas que foram identificados que possuíam as essas características foram o Uber, Airbnb e Trivago. Vendo um potencial mercado que utilizaria o framework para busca e agendamento o grupo decidiu realizar o segundo trabalho nesta área.
Um outro aspecto que auxiliou na escolha do tema para o framework foi a experiência dos membros da equipe com as matérias da faculdade. Nos diversos projetos que foram realizados ou estão sendo realizados nas demais matérias foi levantado que em sua maioria teriam a funcionalidade de busca e agendamento. Alguns projetos como o Coda Mais, Embeleza Mais, Merenda Mais e Receituário Médico seriam beneficiados caso houvesse um framework para implementar está funcionalidade.
Considerando os possíveis locais de sua utilização, torna-se necessária a capacidade de adaptação para a realidade da aplicação que está sendo desenvolvida, pois por exemplo, o agendamento de um determinado serviço médico ocorre de maneira diferente de um agendamento de um serviço de beleza. Contudo, mesmo assim algumas coisas não mudam no agendamento, tendo funções iguais, o que torna necessário que haja a rigidez.
Os hot spots representam as partes do framework que são específicas dos sistemas individuais, sendo projetadas para serem genéricas e cabendo as aplicações que utilizam o framework adaptá-las às necessidades da aplicação.
Os hot spots identificados em nosso framework podem ser visualizados no diagrama de classes. Eles estão representados na cor vermelha.
Já os frozen spots definem uma arquitetura geral, definindo o comportamento dos componentes básicos bem como os relacionamentos entre eles. Estes permanecem físicos no framework, e também são conhecidos como core.
Os frozen spots identificados em nosso framework podem ser visualizados no diagrama de classes. Eles estão representados na cor azul.
Logo acima podemos ver um exemplo de um framework caixa preta, sendo ele um framework que provê reutilização através de serviços.
Esse framework permite permite uma variabilidade nas aplicações através de uma combinação, conforme demanda, para os serviços necessários.
Ele pode ser implementado utilizando o padrão de projeto Strategy, onde as estratégias já estão prontas, bastando consumi-las da forma como estão. Essa parte se faz necessária no nosso framework principalmente no agendamento de serviços onde já se existe um Strategy aplicado.
O Strategy foi identificado na parte core do projeto (frozen spot), onde as implementações das estratégias de escalonamento dos serviços providos por um determinado fornecedor podem ser feitas de forma geral, não especificando o tempo alocado por um determinado recurso, ou de forma específica, utilizando um determinado recurso e escalonando a reserva em um tempo específico.
-
Linhas ou famílias de produto
A linha de produtos está relacionada a uma solução em comum para resolver um problema de aplicações com um domínio diferente, permitindo a customização para os casos específicos. Esse caso se encaixa perfeitamente no que foi proposto pela equipe.
-
Componentes
Os componentes são utilizados na aplicação por trazerem uma maior modularização, permitindo a existência de módulos com foco em preocupações mais específicas.
-
Serviços
A comunicação interna é realizada por meio de requisições a todo o momento, utilizando-se da ideia de serviços.