Je vais dans une architecture propre et j'élève mon niveau Android de MVC à MVP , en introduisant DI avec Dagger 2, Reactivity avec RxJava 2 et bien sûr Java 8.
Dans l'architecture propre MVP, il existe une couche entre les entités (dans les banques de données) et les présentateurs qui doivent 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 ", au sens où ses projets sont vraiment très lisibles tant le nombre élevé de classes qu'ils contiennent.
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 j'ai compris jusqu'à présent l'architecture propre, j'aurai 24 UseCase.
C'est beaucoup de classes par rapport à 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
Réponses:
Seulement si tout ce que vous écrivez est CRUD .
Reportez-vous au schéma ci-dessous:
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 ressemble plus à «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 de facture et des éléments de ligne de facture). ).
Lorsque vous créez des cas d'utilisation, vous devez penser aux transactions commerciales et non aux méthodes CRUD.
Pour en savoir plus
Aggregate - un cluster d'objets de domaine qui peuvent être traités comme une seule unité
la source
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.
la source
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
la source