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.