Ho una classe Report
che è fondamentalmente un'interfaccia per la creazione di report HTML generati tramite un motore di template Python. La classe Report al momento genera il report ma ha anche alcuni metodi relativi al recupero / caricamento dei dati da S3. Questi metodi S3 sono prevalentemente agnostici rispetto a ciò che considererei la parte principale della classe Report
. L'unica ragione per cui li ho in questa classe è che generano partizionamento / denominazione in base ad alcune cose come il nome del report e l'account. Con la mia configurazione attuale, il flusso sarebbe simile a questo per generare e caricare un rapporto:
billing_report = Report(<account_name>,<type>,...)
billing_report.generate() # returns HTML report for render or processing
billing_report.upload() # uploads generated report to S3
I dati grezzi necessari per generare il report provengono da S3 e quindi il report finale può essere inserito anche in S3.
In base al principio di responsabilità unica, sembra che questa classe Report
debba essere suddivisa in quanto genera sia il report sia la gestione delle operazioni relative al recupero / caricamento di S3. Ma se li suddivido in classi Report
e S3
, sembra che siano strettamente accoppiati. Inoltre, la classe S3
sarebbe solo un wrapper leggero per alcune chiamate API S3 e dovrei creare un oggetto S3
che non abbia senso logico come oggetto.
Quindi qual è il modo migliore per affrontare questo tipo di situazione?