US3001 - ArthurSchiavom/gestao-informacao-chao-de-fabrica--projeto-academico GitHub Wiki
=======================================
Como Gestor de Chão de Fábrica, eu pretendo definir a existência de uma nova máquina.

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
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
Classe do domínio: Maquina Controlador: RegistarMaquinaController Repositório: MaquinaRepository


- 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.
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);
}