Ho sviluppato molto codice in Java e mi sono occupato di Groovy e Haskell che ora mi ha portato a Scala.Codice collaudabile di Scala con ereditarietà e mixin
Mi sento relativamente a mio agio con il lato funzionale di Scala, ma mi trovo un po 'traballante sulla progettazione orientata agli oggetti in Scala, perché si sente un po' diverso da Java, in particolare a causa di tratti/mix-in.
mi propongo di scrivere il codice che è come verificabile possibile, che nel mio sviluppo Java è sempre tradotto in focus sul
- Immutabilità ove possibile
- Preferisco iniezione di stato dai costruttori
- sempre andare per la composizione, invece di eredità (fortemente influenzato da, e probabilmente una reazione eccessiva a this post on SO)
Ora sto cercando di atterrare sulla I miei piedi in questo nuovo territorio di Scala, e sto facendo fatica a capire quale approccio dovrei andare qui, in particolare se dovrei iniziare ad usare l'ereditarietà per alcuni scopi.
programmazione Scala (Wampler e Payne, O'Reilly, 2nd Edition) ha una sezione con considerazioni ("Good Object-Oriented Design: una digressione"), e ho letto una serie di messaggi su SO, ma non ho visto menzioni esplicite della considerazione progettuale della testabilità. Il libro offre questo consiglio sull'utilizzo di eredità:
- una classe base astratta o un tratto è una sottoclasse di un livello da classi concrete, tra cui classi case.
- classi di cemento non sono mai sottoclassi, ad eccezione di due casi:
- Le classi che miscela in altri comportamenti definiti tratti (...)
- Test-solo le versioni per promuovere unità automatizzata Teting.
- Quando la sottoclasse sembra l'approccio giusto, considera i comportamenti di partizionamento in tratti e mescola invece questi tratti.
- Non suddividere mai lo stato logico tra i limiti del tipo padre-figlio.
Alcuni scavo su SO inoltre suggerisce che sometimes mix-ins are preferable to composition.
Quindi, in sostanza ho due domande:
sono lì casi comuni in cui sarebbe meglio, anche considerando testabilità, utilizzare l'ereditarietà?
I mix-in offrono buoni modi per migliorare la testabilità del mio codice?
Grazie. Apprezzo molto questa risposta in quanto fornisce un buon commento sui miei riferimenti e risposte dirette alle domande. –
Nessun problema, Scala è un linguaggio interessante ed è bello capire come alcune di queste caratteristiche linguistiche più esoteriche si adattino a ciò che le persone hanno già fatto là fuori nel mondo. E 'stata una buona domanda. –
hmm ... a giudicare dal suo grosso punteggio zero, suppongo che avrebbe potuto essere migliore. Ma ho avuto la mia risposta, questa è la parte importante. –