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

US3001

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

1. Requisitos

Como Gestor de Chão de Fábrica, eu pretendo definir a existência de uma nova máquina.

SSD

2. Análise

Uma Categoria de Material é caracterizada por:

  • Código interno - Chave primária
  • Número Série - Máximo 20 chars, min 6 chars único mas costumizável
  • Ordem Linha produção - Maior que 0
  • Data Instalação - Data válida, não pode ser no futuro

Testes unitários

Código interno deve ser único Número série e código interno não pode ser vazio Número série deve ter no máximo de 20 caractéres min 6 chars único mas costumizável, (a partir do application properties) Ordem Linha produção maior que 0 2 máquinas não podem partilhar a mesma posição na linha de produção Data instalação não pode ser no futuro

3. Design

Classe do domínio: Maquina Controlador: RegistarMaquinaController Repositório: MaquinaRepository

3.1. Realização da Funcionalidade

SD

3.2. Diagrama de classes

CD

3.3. Padrões Aplicados

  • Command - Para implementar a ação de registar novas categorias
  • Repository Pattern - Para abstrair o sistema de persistência de objetos, facilitando a implementação com diferentes tecnologias
  • 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.
  • 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
  • Data Transfer Object - Para poder transferir o resultado da operação do controller para a UI sem misturar os dois layers.

3.4. Testes

Testes: São explicitos pelo nome dos métodos

 @Test(expected = IllegalArgumentException.class)
public void garantirNumeroSerieEntreMaxMin() {

    try {
        NumeroSerie.definirRegrasNumeroSerie("20","6");
    } catch (IOException e) {
        e.printStackTrace();
    }
    new NumeroSerie("12345");
}

@Test
public void garantirNumeroSerieEntreMaxMin2() {

    try {
        NumeroSerie.definirRegrasNumeroSerie("20","6");
    } catch (IOException e) {
        e.printStackTrace();
    }
    NumeroSerie numero = new NumeroSerie("123456");
    assertTrue("Objeto criado", numero != null);
}

@Test(expected = IllegalArgumentException.class)
public void garantierOrdemMaiorQue0() {

    new OrdemLinhaProducao(0);
}

@Test
public void garantierOrdemMaiorQue0_2() {
    OrdemLinhaProducao numero = new OrdemLinhaProducao(123456);
    assertTrue("Objeto criado", numero.ordemLinhaProducao == 123456);
}
⚠️ **GitHub.com Fallback** ⚠️