Estou entrando na arquitetura limpa e elevo meu nível Android do MVC para o MVP , introduzindo o DI com o Dagger 2, a reatividade com o RxJava 2 e, claro, o Java 8.
Na arquitetura limpa do MVP, há uma camada entre as entidades (nos datastores) e os apresentadores que devem acessá-los. Essa camada é o "Caso de Uso" . Um caso de uso é idealmente uma interface, que implementa UMA operação em UMA entidade.
Sei também que a Clear Architecture " está gritando ", no sentido de seus projetos serem realmente altamente legíveis como o alto número de classes neles.
Agora, no meu projeto, tenho algo como 6 entidades diferentes e, é claro, cada repositório de entidades possui pelo menos 4 métodos (geralmente obtém, adiciona, exclui, atualiza) para acessá-los. Então, 6 * 4 = 24 .
Se o que eu entendi até agora de Arquitetura Limpa, terei 24 UseCase.
São muitas classes se comparadas a apenas 6 controladores no MVC.
Eu realmente tenho que fazer 24 casos de uso?
Eu realmente aprecio um esclarecimento de alguém que já o usou com sucesso.
Obrigado Jack
Respostas:
Somente se tudo que você escreve for CRUD .
Consulte o diagrama abaixo:
Sua afirmação é que você terá seis entidades diferentes e quatro métodos (Criar, Ler, Atualizar e Excluir) para cada entidade. Mas isso só é verdade no círculo amarelo no meio do diagrama (a camada Entidades). Não faz sentido criar 24 métodos na camada Casos de Uso que simplesmente passam por chamadas CRUD para a camada Entidades.
Um caso de uso não é "Adicionar um registro de cliente". Um Caso de Uso é mais parecido com "Vender um item para um cliente" (que envolve entidades de Cliente, Produto e Inventário) ou "Imprimir uma fatura" (que envolve as mesmas entidades, além de Cabeçalho da Fatura e Itens de Linha da Fatura )
Ao criar Casos de Uso, você deve pensar em transações comerciais, não em métodos CRUD.
Leitura adicional
agregada - um cluster de objetos de domínio que podem ser tratados como uma única unidade
fonte
Você está certo se toda operação CRUD for traduzida em um UseCase. Mas um UseCase também pode consistir em várias operações CRUD.
Um UseCase é um modelo separado que reúne informações de diferentes fontes de dados e prepara a comunicação com os coletores de dados. Pode haver várias operações CRUD envolvidas.
Então, pense em um UseCase onde criar uma fatura para um cliente E criar também o próprio cliente, porque ele não existe no sistema. Você tem um UseCase que resulta em pelo menos duas operações de criação em uma transação.
fonte
Sua definição de Caso de Uso está incorreta, Caso de Uso é uma classe que implementa uma regra de negócios, não precisa ser uma operação CRUD, pode ser uma operação complexa em várias etapas
fonte