Wenn ich Entitäten in meiner Domäne mit Listen von Dingen habe, sollten diese als ILists oder IEnumerables angezeigt werden? ZB hat Order eine Reihe von OrderLines.
Wenn ich Entitäten in meiner Domäne mit Listen von Dingen habe, sollten diese als ILists oder IEnumerables angezeigt werden? ZB hat Order eine Reihe von OrderLines.
Antworten:
IEnumerable<T>
stellt eine Reihe von Elementen dar, über die Sie iterieren können (z. B. mit foreach), während IList<T>
es sich um eine Sammlung handelt, die Sie hinzufügen oder daraus entfernen können.
In der Regel möchten Sie in der Lage sein, eine Bestellung zu ändern, indem Sie OrderLines hinzufügen oder entfernen. Daher möchten Sie wahrscheinlich, dass Order.Lines eine ist IList<OrderLine>
.
Allerdings sollten Sie einige Entscheidungen zum Framework-Design treffen. Sollte es beispielsweise möglich sein, dieselbe Instanz von OrderLine zu zwei verschiedenen Aufträgen hinzuzufügen? Wahrscheinlich nicht. Da Sie also überprüfen möchten, ob der Bestellung eine OrderLine hinzugefügt werden soll, möchten Sie die Lines-Eigenschaft möglicherweise nur als eine IEnumerable<OrderLine>
anzeigen und die Methoden Add (OrderLine) und Remove (OrderLine) bereitstellen, die diese verarbeiten können diese Validierung.
IReadOnlyList
oder verwenden, IReadOnlyCollection
wenn die Liste materialisiert werden soll, Sie sie jedoch nicht hinzufügen oder daraus entfernen möchten.
IReadOnlyList
macht es keinen Sinn.
Die meiste Zeit gehe ich mit IList über IEnumerable, weil IEnumerable nicht über die Count-Methode verfügt und Sie nicht über einen Index auf die Sammlung zugreifen können (obwohl Sie dies mit Erweiterungsmethoden umgehen können, wenn Sie LINQ verwenden).
ElementAt
Methode?