Come qualcuno mi ha detto molto tempo fa:
codice refactoring non è una questione di modo casuale movimento del codice intorno.
Nel tuo esempio, che è esattamente quello che stai facendo: spostando il codice in un altro file
Perché è brutto?
Spostando il codice in questo modo, si rende la classe originale più complicata poiché la logica viene suddivisa casualmente in diverse altre classi. Certo, sembra migliore, meno codice in un file è visivamente migliore, ma questo è tutto.
Prefer composizione a ereditarietà. Usare mixini come questo richiede di "pulire" una stanza disordinata scaricando il disordine in sei cassetti della spazzatura separati e sbattendoli. Certo, sembra più pulito in superficie, ma i cassetti spazzatura in realtà rendono più difficile identificare e implementare le scomposizioni e le estrazioni necessarie per chiarire il modello di dominio.
Cosa devo fare allora?
Dovresti chiederti:
- Quale codice va di pari passo e potrebbe essere parte di una nuova/modulo di classe?
- Dove ha senso estrarre il codice da qualche altra parte?
- Ho qualche pezzo di codice condiviso con la mia applicazione?
- Posso estrarre schemi ricorrenti nel mio codice base?
oggetto estratto Servizio
raggiungo per il Servizio oggetti quando un'azione soddisfa uno o più di questi criteri:
- L'azione è complesso
- L'azione raggiunge su più modelli
- L'azione interagisce con un servizio esterno
- L'azione non è una preoccupazione fondamentale del modello sottostante
- Esistono diversi modi per eseguire l'azione
forma di estratto Oggetti
Quando modello multiplo può essere aggiornato aa singolo modulo di presentazione, potresti voler creare un oggetto modulo.
Questo abilita a mettere tutta la logica del modulo (convenzioni del nome, convalide e così via) in un unico posto.
estratto Query Oggetti
Si dovrebbe estrarre SQL complessa/query NoSQL nella loro classe. Ogni oggetto di query è responsabile della restituzione di un set di risultati in base ai criteri/alle regole aziendali.
Presentatori Extract/Decoratori
estratto vede la logica in presentatori. Il tuo modello non dovrebbe occuparsi della logica delle viste specifiche. Inoltre, ti permetterà di usare il tuo presentatore in più viste.
More on decorators
Grazie a this post sul blog per aiutarmi a mettere insieme questi.
questo tipo di separazione è completamente inutile. Se devi decostruire un modello, esamina le preoccupazioni. – sevenseacat
@sevenseacat, puoi spiegare perché è inutile? –
perché significa che stai suddividendo una classe in più file senza alcun motivo.Non stai rendendo il modello più sottile in questo modo, stai solo rendendo più complicata la base di codici con cui lavorare. – sevenseacat