Dividere una classe

-2

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?

    
posta swigganicks 05.02.2018 - 22:57
fonte

1 risposta

2

È buona pratica classificare le classi con nome E nome verbale . Quindi nel tuo esempio

ReportGenerator
ReportUploader
ReportReader

Sarà più difficile (a livello linguistico) mettere tutto in una classe e creare oggetti divini, rompendo SRP.

    
risposta data 05.02.2018 - 23:12
fonte

Leggi altre domande sui tag