US2004 - ArthurSchiavom/gestao-informacao-chao-de-fabrica--projeto-academico GitHub Wiki

US2004

=======================================

1. Requisitos

O gestor de produção deseja especificar a Ficha de Produção de um dado produto.

2. Análise

O utilizador inicia o caso de uso. O sistema apresenta uma tabela de produtos para que o utilizador indique o código único daquele cuja ficha de produção será introduzida. O utilizador indica o código único. O sistema limpa a consola, imprime a tabela novamente e indica o produto escolhido. De seguida, enquanto o utilizador não enviar uma mensagem vazia, o sistema pede repetidamente que especifique um código único de produto bem como a quantidade a adicionar à ficha de produção e o utilizador fornece os dados pedidos. Seguidamente o sistema limpa a consola e imprime uma tabela com todos os materiais registados no sistema. Posteriormente, enquanto o utilizador não enviar uma mensagem vazia, o sistema pede repetidamente que especifique um código interno de material bem como a quantidade a adicionar à ficha de produção e o utilizador fornece os dados pedidos. Finalmente, o sistema informa o utilizador sobre o sucesso da operação.

SSD SSD

3. Design

3.1. Realização da Funcionalidade

Note-se que o repositório é obtido através de PersistenceContext.repositories().produto() e que o persistenceContext é obtido através de PersistenceContext.repositories().newTransactionalContext(), que é a metodologia utilizada em toda a aplicação sempre que um repositório é necessário.

SD SD

3.2. Diagrama de Classes

CD CD

3.3. Padrões Aplicados

  • Repository Pattern - ProdutoRepository e MaterialRepository.
  • Factory Method - Para a instanciação de objetos do domínio.
  • Simple Factory - Na instanciação de repositórios, como em PersistenceContext.repositories().material().
  • Controller - ConsultarProdutosSemFichaDeProducaoController
  • Polymorphism & Template method - Usado na implementação do repositório específico de cada entidade bem como na implementação da UI específica deste caso de uso.
  • Dependency inversion & Protected variation & Strategy - JpaProdutoRepository é utilizado como uma instância da interface ProdutoRepository. ArrayList é utilizada como uma instância da interface List. JpaMaterialRepository é utilizado como uma instância da interface MaterialRepository.
  • Creator - Para geração de todos os DTOs. Exemplo: Produto gera ProdutoDTO
  • Liskov Substitution principle & Dependency inversion - Em todas as implementações de interfaces e extensões de classes.
  • Pure fabrication - Controller e UI.
  • Information expert & HC/LC - Sempre presente: cada classe tem uma responsabilidade bem definida, visando a sua independência de outras classes.
  • Singleton - Utilizado na RepositoryFactory
  • Facade - Interface para o utilizador

3.4. Testes

Testes funcionais

  • Introduzir uma quantidade de matéria prima <0
  • Introduzir uma 0 como quantidade de matéria prima
  • Introduzir letras como quantidade de matéria prima
  • Introduzir um código único de produto que não está registado durante a especificação do produto cuja ficha de produção será introduzida.
  • Introduzir um código único de produto que não está registado durante a especificação de matérias primas
  • Introduzir um código interno de material que não está registado durante a especificação de matérias primas
  • Não especificar nenhuma matéria prima
  • Especificar apenas (vários) produtos como matérias primas
  • Especificar apenas 1 produto como matérias primas
  • Especificar apenas (vários) materiais como matérias primas
  • Especificar apenas 1 material como matérias primas

4. Implementação

Foi utilizada uma classe desenvolvida por Carl Eriksson que está disponível publicamente no GitHub. Esta classe gera tabelas em texto para a consola.

⚠️ **GitHub.com Fallback** ⚠️