Ho implementato un'applicazione proof of concept utilizzando l'architettura pulita di Uncle Bob e ho avuto un piccolo problema.
L'architettura di Uncle Bob richiede l'esplicita separazione delle richieste e delle risposte usando le interfacce. Questo non è un problema nella maggior parte dei casi (ad es. Quando si implementa un'interfaccia utente utilizzando il pattern MVP), ma non so come applicarlo per creare un'API REST utilizzando Spring MVC.
Il mio Controller ha un metodo con la seguente firma:
Response<String> greet(String name)
mappato su /greeting che prende un nome e genera un saluto diverso a seconda del valore del nome.
Inserito in Controller è il UseCase che riceve il nome e crea il saluto, inviando l'output attraverso OutputPort iniettato in esso.
Il problema è che non posso separare gli input e gli output in questo modo perché Controller deve interagire con gli input e gli output per creare una risposta.
L'unico modo per "implementare" questo, che posso inventare, è restituire il valore usando InputPort , che suona piuttosto male e non è affatto quello che richiede un'architettura pulita.
Ci stavo pensando e non riesco a trovare alcun modo in cui il mio Controller possa agire sia come Controller sia come Presenter allo stesso tempo. Mi sto perdendo qualcosa qui? Esiste un desing migliore che consentirebbe la separazione degli input e output dell'API REST senza complicare eccessivamente le cose?
EDIT: Ho letto di nuovo i capitoli 23 e 24 di Clean Architecture e sicuramente avrei potuto formulare le mie domande molto meglio. Quello che ho adesso come soluzione (funzionante, perfettamente funzionante) è un limite unidimensionale (pagina 219) e mi chiedevo se potevo estendere questo aspetto e separare questa interfaccia in due interfacce reciproche. Spero che questo chiarisca un po 'il mio punto.