Is it usually more preferable to create a collection, and allow the consumer to operate directly on the collection?
Dipende. Ti aspetti che il tuo utente crei, manipoli e usi la collezione in altro modo? O vuoi lasciare che facciano alcune operazioni simili a raccolte su qualcosa ... non è davvero una collezione?
Ma prima di rispondere: considera che questo è un odore di codice. Bene, sono due possibili odori di codice:
-
Stai creando il tuo tipo di raccolta. - Le raccolte di librerie standard (e le interfacce) sono buone, complete e tutte le conoscono. Sii veramente sicuro di averne bisogno prima di crearne uno nuovo.
-
Forse stai violando una singola responsabilità. - Se hai qualche cosa, e poi quella cosa anche ha
Add
, Remove
, ecc ... la tua cosa potrebbe fare due cose Cerca di separare queste responsabilità.
Tutto ciò che ho detto, tendo a preferire l'opzione 1. Fornisce un controllo più strong su qualsiasi invariante bizzarro che devi proteggere se non stai usando solo List
(o qualunque altra raccolta di base). Di solito questo genere di cose deve associare la raccolta con qualche altra istanza, che diventa pelosa se si disaccoppia la collezione dalla sua istanza appaiata.