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

US2002

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

1. Requisitos

O Gestor de Produção, pretende definir uma nova categoria de matérias-primas.

SSD

2. Análise

Uma Categoria de Material é caracterizada por:

  • Código alfanúmerico - Máximo 10 chars, único
  • Descrição

Testes unitários

Código alfanúmerico deve ser único Código alfanúmerico não pode ser vazio Código alfanúmerico deve ter no máximo de 10 caractéres A Descrição é especificada

3. Design

Classe do domínio: Categoria Controlador: DefinirCategoriaController Repositório: CategoriaRepository

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

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

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

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