2017-05-05 2 views
4

J'ai récemment tombé sur Clean Architecture, par Oncle Bob, et je suis curieux de savoir si les Interacteurs peuvent exécuter d'autres Interacteurs. Par exemple, ce sont mes Interacteurs à ce jour: getEmptyAlbums, getOtherAlbums. Les deux ont des rappels qui retournent avec une liste d'albums (une liste d'objets d'un modèle d'album) respectivement.Architecture propre: combiner des interacteurs

Suis-je autorisé à avoir un Interacteur appelé getAllAlbums qui exécute les deux Interacteurs précédents dans son bloc d'exécution?

@Override 
public void run() { 
    getEmptyAlbums.execute();  
} 

void onEmptyAlbumsReceived(ArrayList<Album albums){ 
    getOtherAlbums.execute; 
} 
void onOtherAlbumsReceived(ArrayList<Album albums){ 
     mMainThread.post(new Runnable() { 
     callback.onAlbumsReceived(albums); 
    } 
}); 

Répondre

3

Je suis méditais la même chose et après avoir trouvé très peu sur le sujet, je suis venu à la conclusion « Oui » est probablement la meilleure option.

mon raisonnement comme suit:

  1. responsabilité unique: Si vous ne pouvez pas les cas d'utilisation globaux, chacun ne peut pas vraiment être seule responsabilité. Sans agrégation, cela signifie que la logique du domaine se retrouve dans la couche de présentation, ce qui va à l'encontre du but recherché. DRY: les cas d'utilisation peuvent être partagés, et devrait être être là où c'est logique.

Pour préserver la responsabilité unique, j'envisager de limiter les cas d'utilisation agrégeant à faire seulement, à savoir l'exécution de ces cas d'utilisation et de réaliser une transformation finale. Compte tenu de l'âge de cette question, je serais intéressé de savoir dans quelle direction vous êtes allé avec cela et les problèmes que vous avez rencontrés.

+1

(Je viens de lancer une recherche pour cette question) et se penchait "Oui" en raison du principe DRY. Je peux voir un objet 'Interactor' (cas d'utilisation) créant un nouveau' RequestModel' et le passant à un objet 'Interactor' séparé. Cependant, comme vous l'avez dit, il y a "très peu de choses sur le sujet". – emeraldinspirations

+1

J'ai utilisé des interacteurs qui exécutaient d'autres interacteurs pour éviter que mes couches de présentation ne soient trop confuses et trop volumineuses et ne rencontrent aucun problème en tant que tel. –

+0

Je le vois de la même manière. Pour un exemple plus détaillé sur ce sujet, voir https://plainionist.github.io/Implementing-Clean-Architecture-UseCases/ – plainionist