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

US2006

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

1. Requisitos

O Gestor de Produção pretende que o programa carregue Produtos para a base de dados através de um ficheiro CSV.

Como Gestor de Projeto pretendo que:

  • A funcionalidade permita carregar múltiplos produtos como indicado nos ficheiros exemplos fornecidos.
  • A funcionalidade mostre no final o número de produtos carregados, o número de carregamentos falhados e qual as linhas que falharam associadas ao motivo da falha.
  • A funcionalidade permite escolher entre substituir e ignorar linhas relativas a produtos repetidos.

2. Análise

O utilizador inicia o caso de uso. O sistema pede o caminho do ficheiro e se deve substituir produtos repetidos. O utilizador indica a informação pedida. O sistema apresenta o resultado da importação. O sistema pede ao utilizador que pressione enter para continuar. O utilizador pressiona enter. O caso de uso termina.

SSD SSD

Restrições de dados

Um produto é caracterizado pelos seguintes valores:

  • Código ùnico - Único
  • Código Comercial - Único
  • Descrição Breve - Máximo de 30 palavras
  • Descrição Completa - Não é vazia
  • Unidade - É especificada
  • Categoria - É especificada
  • Ficha de Produção - opcional

Uma ficha de produção é caracterizada por:

  • Uma lista de quantidades de matéria prima.

Uma quantidade de matéria prima é caracterizada por:

  • Matéria prima
  • Quantidade

Uma matéria prima é caracterizada por:

  • Tipo de matéria prima (produto ou material)
  • ID da matéria prima (código único de produto ou código interno de material)

3. Design

3.1. Realização da Funcionalidade

Note-se que o repositório é obtido através de PersistenceContext.repositories().produto(), 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 - Para abstrair o sistema de persistência de objetos, facilitando a implementação com diferentes tecnologias
  • Factory Method - Para a instanciação de objetos do domínio.
  • Simple Factory - Na instanciação de repositórios, neste caso através de PersistenceContext.repositories().produto().
  • Builder - Para permitir um controlo granular do sucesso/falha de cada atributo de produto criado.
  • Command - Para especificar o que fazer quando uma opção do menu é escolhida. Também utilizado na criação de um seletor de opções (OptionSelector).
  • Data Transfer Object - Para poder transferir o resultado da operação do controller para a UI sem misturar os dois layers.
  • Controller - Para separar o layer da interface do layer de domínio, introduzindo então um layer de aplicação encarregue do processamento, mas não responsável por caracterizar o negócio ou interagir com o utilizador.
  • 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 - RegistarProdutosDeCsvController é utilizado como uma instância da interface RegistarProdutosDeFicheiroController. JpaProdutoRepository é utilizado como uma instância da interface ProdutoRepository. CsvFileScanner é utilizado como uma instância da interface FileScanner<String[]>.
  • 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

3.4. Testes

Testes Unitários

  • Código ùnico - Único
  • Código Comercial - Único
  • Descrição Breve - Máximo de 30 palavras
  • Descrição Completa - Não é vazia
  • Unidade - É especificada
  • Categoria - É especificada
  • Ficha de Produção - opcional

Testes Funcionais

  • O código único deve ser único
  • O código Comercial deve ser único
  • A descrição Breve deve ter no máximo de 30 caractéres
  • A Ficha de Produção é opcional
  • A Descrição Completa é especificada
  • A Unidade é especificada
  • A Categoria é especificada
  • O número de campos fornecidos é o esperado
  • O cabeçalho é o esperado
  • O ficheiro existe

4. Observações

Seria possível utilizar o padrão adapter para facilitar a adição de novos sistemas de carregamento para diferentes tipos de ficheiros. No entanto, tal possibilidade não foi posta ou mencionada e a introdução deste padrão no sistema atual não apresenta dificuldade.

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