web-dev-qa-db-fra.com

Architecture propre - Trop de classes de cas d'utilisation

Je vais Clean Architecture et soulever mon Android niveau de MVC à MVP , introduction de DI avec Dagger 2, réactivité avec RxJava 2, et bien sûr Java 8.

Dans MVP clean architecture il y a couche entre les entités (dans les banques de données) et les présentateurs qui devrait y accéder. Cette couche est le "Cas d'utilisation". Un cas d'utilisation est idéalement une interface, qui implémente UNE opération sur UNE entité.

Je sais aussi que Clear Architecture "crie", dans le sens de ses projets, est vraiment très lisible car le nombre élevé de classes en eux.

Maintenant, dans mon projet, j'ai quelque chose comme 6 entités différentes, et bien sûr, chaque référentiel d'entités a au moins 4 méthodes (généralement obtenir, ajouter, supprimer, mettre à jour) pour y accéder .. donc, 6 * 4 = 24.

Si ce que j'ai compris jusqu'à présent de Clean Architecture, j'aurai 24 UseCase.

C'est beaucoup de classes si on le compare à seulement 6 contrôleurs dans MVC ..

Dois-je vraiment faire 24 cas d'utilisation?

J'apprécierai vraiment une clarification par quelqu'un qui l'a déjà utilisé avec succès.

Merci, Jack

14

Dois-je vraiment faire 24 cas d'utilisation?

Seulement si tout ce que vous écrivez est CRUD .

Reportez-vous au schéma ci-dessous:

enter image description here

Votre affirmation est que vous aurez six entités différentes et 4 méthodes (Créer, Lire, Mettre à jour et Supprimer) pour chaque entité. Mais cela n'est vrai que dans le cercle jaune au milieu du diagramme (la couche Entités). Il est inutile de créer 24 méthodes dans la couche Cas d'utilisation qui passent simplement par des appels CRUD à la couche Entités.

Un cas d'utilisation n'est pas "Ajouter un enregistrement client". Un cas d'utilisation est plus dans le sens de "Vendre un article à un client" (qui implique des entités Client, Produit et Inventaire) ou "Imprimer une facture" (qui implique les mêmes entités, en plus de l'en-tête et des postes de facture).

Lorsque vous créez des cas d'utilisation, vous devez penser à transactions commerciales, pas méthodes CRUD.

Lectures complémentaires
Agrégat - un cluster d'objets de domaine qui peuvent être traités comme une seule unité

23
Robert Harvey

Vous avez raison si chaque opération CRUD est traduite en un seul UseCase. Mais un UseCase peut également consister en plusieurs opérations CRUD.

Un UseCase est un modèle séparé qui collecte des informations à partir de différentes sources de données et prépare la communication avec les récepteurs de données. Il peut y avoir plusieurs opérations CRUD impliquées.

Pensez donc à un UseCase où créer une facture pour un client ET créer également le client lui-même car il/elle n'existe pas dans le système. Vous avez un UseCase qui se traduit par au moins deux Create-Operations dans une transaction.

2
oopexpert

Votre définition du cas d'utilisation est erronée, le cas d'utilisation est une classe implémentant une règle métier, il ne doit pas nécessairement s'agir d'une opération CRUD, il peut s'agir d'une opération complexe en plusieurs étapes

1
Buckstabue