Sono nel mezzo del refactoring di un progetto. Di recente ho letto Clean Code e desidero prestare attenzione ad alcuni dei consigli al suo interno, con particolare attenzione al Single Responsibility Principle (SRP).
Attualmente esiste una classe denominata OrderProcessor nel contesto di un sistema di ordini di prodotti di produzione.
Questa classe attualmente esegue la seguente routine ogni n minuti:
- controlla il database per gli ordini appena inviati + non elaborati (tramite una classe Data Layer già, per favore!)
- raccogliere tutti i dettagli degli ordini
- contrassegnali come in-process
-
scorrere ogni a:
- esegue alcuni controlli di integrità
- chiama un servizio web su un sistema di terze parti per effettuare l'ordine
- controlla lo stato del valore di ritorno del servizio web per successo / fallimento
- invia un'email a qualcuno se il servizio web restituisce un errore
- accedere costantemente a un file di testo su ogni operazione o possibile punto di errore
Ho iniziato suddividendo questa lezione in nuove classi come:
- OrderService - nome scadente. Questo è quello che si sveglia ogni n minuti
- OrderGatherer - chiama il DL per ottenere l'ordine dal database
- OrderIterator (? sembra troppo forzato o mal chiamato) -
- OrderPlacer - chiama il servizio web per effettuare l'ordine
- EmailSender
- Logger
I stanno lottando per trovare buoni nomi per ogni classe, e implementando SRP in modo ragionevole.
In che modo questa classe può essere separata in una nuova classe con responsabilità discrete?