- https://github.com/igorujiie/contratacao/tree/main
- https://github.com/igorujiie/POII/tree/main/biblioteca/src/main/java/tech/ada/biblioteca
Design de Classes de Domínio
→ OkSeparação em Camadas
→ OkTransição de Estados
→ OkPrincípios SOLID
→ Parcial pois Service implementou Repository
- Geral
- Poderia haver uma classe Main simples que chama uma view e MenuOperacaoController
- Evite deixar métodos comentados no código. Melhor remover
- Ao invés de sempre verificar null procure ler sobre Optional
- Imprimir no console é papel da view e não das outras camadas
- Documente as interfaces. Há bons exemplos no próprio java e com java 23 em markdown
- Procure usar menos condições estruturando em padrões de projeto, melhor design
- Use mais os comportamento das classes de domínio para checar e realizar ações
- Controller
- Muitos atributos em MenuOperacaoController. Sugiro usar um padrão factory
- Lógica por switch de menus pode ser melhorada com padrão command + strategy
- Veja que informações de exibir ao usuário poderia ficar na view e não em outras camadas
- Não entendi a usabilidade ou design do MoedaController
- Vários scanners inicializados independentes. Use um factory com singleton
- View
- As classes da view são mais do que exibir menus. Imagine uma tela mesmo
- Elas que intermediam ações do usuário junto com controller
- Avalie implementar listar entidades de domínio e ações
- Service
- ClienteService possui um
List<Cliente> clientes = new ArrayList<>();
- Isso seria papel do repository e aliás está implementando
ClienteRepository
- E
inicializarClientes()
deveria estar em uma classe utilitária - Assim como
prrencherCadastroCliente()
mais para um papel da view - No ClienteService há apenas o cadastrarCliente e deveria chamar o repositorio
- ContaService, MoedaService, FuncionarioService e TaxaService com muitos métodos vazios
- Maior regra de negócio implementada em OperacaoDeCambioService bem estruturada
- Boa iniciativa ao lançar IllegalArgumentException mas lance uma especifica da aplicação
- Procure ler mais sobre tratamento de exceções. No spring também há e importante isto
- ClienteService possui um
- Model
- Bom design sobre OperacaoCambio com comportamentos e transição de estado
- Mas não permita o setTipoDeOperacao. Deixe como privado. Leia sobre o padrão state
- Poderia ter implementado equals e comparable nas classes de domínio
- Foi importante o design para transição de estados com enums
- Repository
- Apenas interfaces sem implementação o qual ficou dentro do service
- Implementou apenas o devolver e emprestar
- Não implementou o reservar, apenas chamada e não há no repository
- Poderia reusar comportamento do emprestar e devolver, para achar o item
- Faltou fazer a BibliotecaServiceImpl implementar interface e reusar consultar
- BibliotecaServiceVirtual poderia ter ao menos um método comportamento
- Não implementou controllers apesar de opcional, mas tudo bem
- Evite sempre que possivel deixar código comentado no projeto
- Faltou caprichar no readme ou incluir mais informações sobre as suas mudanças
- Bom trabalho e evolução