Come posso condensare una classe di case con ~ 20 argomenti di costruzione in 5 o 6 argomenti in Scala?

0

Diciamo che ho una case case con ~ 20 argomenti di costruzione? Questo è ovviamente molto goffo da digitare. Quale sarebbe il modo migliore per condensare questi argomenti in forse 5 o 6 argomenti? Ci sono alcuni argomenti che sono correlati tra loro abbastanza che potrei vedere fare:

case class myClass(myStorageContainer, myOtherStorageContainer...)

invece di

case class myClass(arg0...arg19)

Dato che questa classe di case è memorizzata in un ampio elenco di case classes di questo tipo, non sono sicuro se il sovraccarico sia significativo per l'inizializzazione di così tanti oggetti per costruire gli argomenti del costruttore.

    
posta Tim 06.02.2015 - 18:04
fonte

1 risposta

3

Tra le cose di cui dovresti preoccuparti come programmatore, l'overhead di inizializzazione è molto, molto in basso nella lista. Il tuo raggruppamento suggerito è un primo passo minimo.

Il prossimo passo è quello di riconsiderare se è effettivamente necessario mantenere tutti i dati insieme in una classe del caso. Non fai quasi mai e di solito ti fa male creare un grande accoppiamento.

Una cosa che spesso funziona è invece di memorizzare una lista massiccia di myClasses , memorizzare singoli elenchi di myStorageContainers o anche args . Quindi ri-associalo al volo secondo necessità utilizzando zip o map o alcuni di questi.

Questo sembra sbagliato per i programmatori addestrati in lingue imperative, il cui istinto è quello di proteggere i loro dati da altre persone che lo mutano e il cui stile architettonico si è sviluppato di conseguenza.

Immutabilità significa che non è necessario memorizzare i dati nello stesso contenitore al fine di mantenere relazioni invarianti tra loro. Se ho un List immutabile di arg0 e un altro List immutabile di arg1 che vengono creati insieme, allora so che l'ennesimo elemento del primo elenco va sempre con l'ennesimo elemento del secondo elenco. Allo stesso modo per oggetti memorizzati in mappe immutabili separate indicizzate utilizzando la stessa chiave. Non devono essere fisicamente nella stessa struttura dati.

Fai una prova e guarda. Probabilmente troverai la tua modularità al rialzo quando le funzioni non sono più abbinate a una case case gigante.

    
risposta data 06.02.2015 - 21:49
fonte

Leggi altre domande sui tag