L'SRP afferma che una classe (modulo) dovrebbe avere solo una ragione per cambiare. I "doveri" di un Interactor nell'architettura pulita di Bob Martin sono, per ogni caso: ricevere richieste / input da un controller; orchestrare le entità di dominio per soddisfare le richieste; e preparare i dati di output.
Questo implica tre motivi per cambiare? (vale a dire ogni volta che gli input cambiano o la funzionalità del dominio viene espansa o vengono aggiunti ulteriori campi di output). Se necessario, quale sarebbe una buona strategia per risolvere questo? (ad es., CQRS?)
Il mio attuale approccio è di creare un modulo Interactor caso d'uso con tre classi, una per ogni preoccupazione e una quarta classe Facade / Mediator per l'interfaccia e l'interfaccia dei client. Tuttavia, non spinge la violazione SRP fino al livello del modulo?
Come sottolineato da @Robert Harvey, il termine "doveri" è stato usato piuttosto sciatto. Il vero problema del design sono state le grandi modifiche all'interoperatore necessarie sia quando il dominio è cambiato, sia i campi / formati OutputData
modificati (meno con l'input). Non sono questi due distinti motivi di cambiamento?
Come ho capito da @Filip Milovanović e @ guillaume31, SRP non è violato, esp. con tre classi separate nel modulo interactor. Inoltre, a livello di modulo, il "Common Closure Principle" è forse più appropriato rispetto all'SRP. Il CCP ("Raccogliere in componenti ... le classi che cambiano per le stesse ragioni e allo stesso tempo.") Potrebbe suggerire di separare le classi degli interactor. (Ma poi le classi corrispondenti allo stesso caso d'uso sarebbero distribuite tra le varie posizioni.) Grazie alle risposte e ai commenti, questi compromessi mi sono diventati molto più chiari.