Considera Train.Passengers, che tipo useresti per i Passeggeri in cui i passeggeri non dovrebbero essere aggiunti o rimossi dal codice che consuma?
Sto usando .NET Framework, quindi questa discussione si adatterebbe a .NET, ma potrebbe applicarsi a una serie di linguaggi / framework moderni.
In .NET Framework, il List<Person>
non dovrebbe essere esposto pubblicamente. C'è Collection<Person>
e ICollection<Person>
e guidance, che tendo a concordare, è quello di restituire il tipo concreto più vicino nell'albero di ereditarietà, in modo che sarebbe Collection<Person>
poiché è già un ICollection<Person>
.
Ma la collezione ha semantica di lettura / scrittura e quindi forse dovrebbe essere un ReadOnlyCollection<Person>
, ma è probabilmente il suo buonsenso non modificare il contenuto di una raccolta di cui non si ha conoscenza intima, quindi è necessario?
E richiede un lavoro extra internamente e può essere un problema con la (de) serializzazione.
All'estremo opposto potrei semplicemente restituire Person[]
(dato che LINQ ora fornisce molti dei benefici che in precedenza sarebbero stati offerti da una raccolta più specifica) o persino creare un PersonCollection o ReadOnlyPersonCollection strongmente tipizzati!
Che cosa fai?