Als ich diese Frage gelesen habe, habe ich mich ein bisschen gefragt. Angenommen, Sie haben diese zwei:
%Vor% Was würdest du als IEnumerable<Product>
bezeichnen?
Bevor ich diese andere Frage gelesen habe, hätte ich sie vielleicht tatsächlich als ProductCollection
bezeichnet, aber unter Berücksichtigung der neuen Informationen wäre das ein wenig irreführend gewesen, da ICollection<Product>
nicht implementiert wurde. Könnten Sie es Products
nennen?
Fast funktioniert, aber klingt ein bisschen seltsam ... Wie würdest du es nennen?
Im Allgemeinen basiert der Name einer Klasse nicht auf einer Schnittstelle , die implementiert wird. (Welchen wählen Sie, wenn es mehrere gibt, für einen Anfang?) Es ist ziemlich typisch, es von einer geerbten Klasse abzurichten, aber öfter nur vom Zweck der Klasse, und schon gar nicht die Schnittstelle. (Die Schnittstelle wird möglicherweise nach der Klasse benannt.)
Ihr Beispiel wird durch die Tatsache, dass ein gut entworfenes ProductCollection
ICollection<Product>
und IEnumerable<Product>
implementieren sollte, etwas ungültig gemacht, während ein gut entworfenes ProductList
beide diese Schnittstellen ebenfalls implementieren sollte als IList<Product>
.
Wenn Sie in der BCL von .NET Framework nachsehen, sollten Sie feststellen, dass dies genau der Fall ist. Die Klasse List<T>
implementiert alle drei Schnittstellen, ebenso wie die Klasse Collection<T>
(obwohl im allgemeinen Fall eine 'Sammlung' nicht IList<T>
implementieren muss).
Wenn es nur IEnumerable<Product>
implementiert, dann würde ich es ProductEnumeration
nennen, aber ich würde gerne eine Instanz davon nennen products
. Auf der anderen Seite erinnere ich mich nicht, jemals eine Klasse erstellt zu haben, die nur IEnumerable<T>
implementiert hat. Scheint nicht viel Sinn zu sein, wenn du nichts hinzufügen kannst und wenn du kannst, dann würde ich von einer der Auflistungsklassen ableiten, die IEnumerable<T>
implementiert und dieses Verhalten ebenfalls erbt.
Wenn ich eine Enumeration von Product entities zurückgeben würde, würde ich sie einfach als IEnumerable<Product>
zurückgeben, ohne eine spezielle Klasse zu haben.
Es hängt vom Kontext ab, z. B. könnte es ein ProductsCatalog
sein (was die schreibgeschützte Natur von IEnumerable
impliziert).
Allgemeiner könnte es ProductsView
sein. Natürlich wäre% code_de% änderbar, aber ich denke, es klingt trotzdem angemessen.
Wenn Sie sich die Typen in .NET Framework ansehen, die IEnumerable<T>
implementieren, würde ich sagen, dass das häufigste Suffix Collection
ist, gefolgt von der Pluralform dessen, was die Liste enthält. Dann gibt es eine Reihe von "Sonderfällen" (zB Queue
und Stack
). Ich würde persönlich für Collection
als erste Wahl stimmen.
Das Problem hier ist, dass List oder Collection sie so verhalten. IEnumerable ist jedoch sehr generisch, nicht nur in der C # - Bedeutung von generic. Jede Implementierung kann dahinter stehen.
Einige Vorschläge:
In fast allen Fällen kann ich an meine eigene Erfahrung denken, ich musste nicht an einen Namen denken. Der Compiler macht das für mich, weil ich eine Iterator-Methode schreibe, anstatt eine Klasse von Hand zu schreiben. Und für den Methodennamen ist es natürlich, es einfach zu einem pluralen Wort zu machen, das die Sequenz beschreibt.
Wie kek444 Ich denke, ich müsste fragen, was macht es sonst noch? Es implementiert IEnumerable & lt; & gt; aber das ist nicht alles, oder sonst würdest du die Klasse nicht brauchen, oder? Es ist eine Sammlung? Wandelt es ein Enumerable in ein anderes um (Reihenfolge, Auswahl, Generierung usw.)?
Ich würde sagen Sammlung . Es könnte eine ReadOnlyCollection oder ObservableCollection vorschlagen, beschreibt aber die Klasse gut. Es ist schließlich eine Sammlung von Produkten (was auch immer der zugrunde liegende Typ sein mag).
Um diese Frage und die andere Frage zu lösen, verwenden Sie diese;)
Ссылка
Tags und Links .net naming-conventions