Skip to content

Instantly share code, notes, and snippets.

@rafarocha
Last active September 16, 2024 03:30
Show Gist options
  • Save rafarocha/f1379c3d838785839505b470cde4c922 to your computer and use it in GitHub Desktop.
Save rafarocha/f1379c3d838785839505b470cde4c922 to your computer and use it in GitHub Desktop.

Avaliação dos Requisitos

  • Design de Classes de Domínio → Ok
  • Separação em Camadas → Ok
  • Transição de Estados → Ok
  • Princípios SOLID → Parcial pois Service implementou Repository

Avaliação do Projeto

  • 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
  • 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

Avaliação Desafio 01

  • 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment