C #: Was würdest du eine IEnumerable-Klasse nennen?

7

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?

%Vor%

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?

%Vor%

Fast funktioniert, aber klingt ein bisschen seltsam ... Wie würdest du es nennen?

    
Svish 14.07.2009, 19:21
quelle

9 Antworten

6

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).

    
Noldorin 14.07.2009, 19:25
quelle
6

Ich denke, dass "Sequence" ein gutes Suffix wäre.

    
Andrew Hare 14.07.2009 19:28
quelle
5

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.

    
tvanfosson 14.07.2009 19:27
quelle
2

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.

    
Kenan E. K. 14.07.2009 19:26
quelle
0

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.

    
Fredrik Mörk 14.07.2009 19:24
quelle
0

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:

  • ProductIterator: Dies iteriert Produkte.
  • ProductRetriever: Dies ruft Produkte ab.
  • ProductCreator: Dies erstellt neue Produkte zur Laufzeit.
Dykam 14.07.2009 19:25
quelle
0

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.

    
Daniel Earwicker 14.07.2009 19:26
quelle
0

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.)?

    
n8wrl 14.07.2009 19:31
quelle
0

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;)
Ссылка

    
Zyphrax 14.07.2009 19:31
quelle

Tags und Links