US2004 - ArthurSchiavom/gestao-informacao-chao-de-fabrica--projeto-academico GitHub Wiki
=======================================
O gestor de produção deseja especificar a Ficha de Produção de um dado produto.
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.
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.
- 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
- 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
Foi utilizada uma classe desenvolvida por Carl Eriksson que está disponível publicamente no GitHub. Esta classe gera tabelas em texto para a consola.


