2011-07-22 3 views
4

Quelle interface de collecte est préférée pour le système? Par système, je veux dire Repositories, Services, etc. Je dois donc choisir IEnumerable, ICollection, IList ou peut-être même List.Quelle interface de collection choisir?

Je suppose que théoriquement, il serait préférable d'utiliser IEnumerable. Mais il est moins pratique à utiliser: par exemple, je dois utiliser la méthode GetElementAt au lieu de l'indexeur.

Mon choix actuel est IList mais je doute de cette décision.

Répondre

5

Il est vraiment à quel type d'accès que vous voulez permettre aux consommateurs de vos Référentiels, Services, etc.

Si vous ne l'intention des consommateurs de lire à travers la collection, utilisez IEnumerable<T> (aucune méthode de type écriture n'est disponible).

Si vous souhaitez ajouter des consommateurs directement à la collection, alors les méthodes dans ICollection<T> leur donneront cela.

En général, j'essaie d'exposer des collections comme IEnumerable<T> aussi souvent que possible. Lorsque les utilisateurs souhaitent ajouter quelque chose à la collection, ils doivent appeler une méthode distincte plutôt que d'écrire directement dans la collection elle-même. Cela vous donne la possibilité de valider l'entrée, d'effectuer d'autres vérifications, etc.

5

Si vous souhaitez autoriser l'accès à l'indexeur, vous devez utiliser IList<T>. La règle générale est d'utiliser le type le moins spécifique possible qui répond toujours à toutes les exigences d'utilisation. Et dans votre cas, cela ressemble à une liste. (Et bien sûr, IList<T> est moins spécifique que List<T>)

Questions connexes