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

US2001

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

1. Requisitos

O Gestor de Produção , pretende adicionar uma matéria-prima ao catálogo.

SSD

2. Análise

Um Material é caracterizada por:

  • Código Interno - Unico
  • Nome do Material
  • Descricao do Material
  • Unidade de medida
  • Conteudo da ficha tecnica

Testes unitários

Código Interno deve ser unico. Código Interno não pode ser vazio. Nome do material nao deve ser vazio. Unidade de medida deve corresponder a uma do Enum. Conteudo da ficha tecnica nao deve ser vazio.

3. Design

Classe do domínio: Material Controlador: EspecificarMaterialController Repositório: MaterialRepository

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

3.4. Testes

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

(Teste ficha tecnica pdf)

@Test(expected = IllegalArgumentException.class) public void garantirPathNaoPodeSerNull() {
    try {
        new FichaTecnicaPDF(null,"teste","vazio");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

@Test(expected = IllegalArgumentException.class)
public void garantirPathNaoPodeSerStringVazia() {
    try {
        new FichaTecnicaPDF("","teste","vazio");
    } catch (IOException  e) {
        e.printStackTrace();
    }
}

@Test(expected = IllegalArgumentException.class)
public void garantirPathNaoSerVazioComEspacos() {
    try {
        new FichaTecnicaPDF("        ","teste","vazio");
    } catch (IOException e) {
        e.printStackTrace();
    }
}

(Teste codigo interno)

@Test(expected = IllegalArgumentException.class) public void garantirCodigoInternoNaoPodeSerNull() {
        new CodigoInterno(null);
}

@Test(expected = IllegalArgumentException.class)
public void garantirCodigoInternoNaoPodeSerStringVazia() {
        new CodigoInterno("");
}

@Test(expected = IllegalArgumentException.class)
public void garantirCodigoInternoNaoSerVazioComEspacos() {
        new CodigoInterno(" ");
}
⚠️ **GitHub.com Fallback** ⚠️