Es gibt einige Themen, die aus dieser Frage stammen:
- Schnittstellen versus Klassen
- Welche spezifische Klasse aus mehreren ähnlichen Klassen, Sammlungen, Listen, Arrays?
- Gemeinsame Klassen im Vergleich zu Unterelementensammlungen ("Generika")
Möglicherweise möchten Sie hervorheben, dass es sich um eine objektorientierte API handelt
Schnittstellen versus Klassen
Wenn Sie nicht viel Erfahrung mit Schnittstellen haben, empfehle ich, sich an Klassen zu halten. Ich sehe viele Male, wie Entwickler zu Schnittstellen springen, auch wenn dies nicht unbedingt erforderlich ist.
Und am Ende ein schlechtes Interface-Design anstelle eines guten Klassendesigns, das übrigens irgendwann auf ein gutes Interface-Design migriert werden kann ...
Sie werden viele Schnittstellen in der API sehen, aber beeilen Sie sich nicht, wenn Sie sie nicht benötigen.
Sie werden schließlich lernen, wie Sie Schnittstellen auf Ihren Code anwenden.
Welche spezifische Klasse aus mehreren ähnlichen Klassen, Sammlungen, Listen, Arrays?
In c # (Dotnet) gibt es mehrere Klassen, die ausgetauscht werden können. Wenn Sie, wie bereits erwähnt, etwas aus einer spezifischeren Klasse wie "CanBeSortedClass" benötigen, machen Sie es in Ihrer API explizit.
Muss Ihr API-Benutzer wirklich wissen, dass Ihre Klasse sortiert werden kann, oder ein bestimmtes Format auf die Elemente anwenden? Verwenden Sie dann "CanBeSortedClass" oder "ElementsCanBePaintedClass", andernfalls "GenericBrandClass".
Verwenden Sie andernfalls eine allgemeinere Klasse.
Gemeinsame Sammlungsklassen im Vergleich zu Sammlungen von Unterelementen ("Generika")
Sie werden feststellen, dass es Klassen gibt, die andere Elemente enthalten, und Sie können angeben, dass alle Elemente von einem bestimmten Typ sein sollen.
Generische Sammlungen sind Klassen, mit denen Sie dieselbe Sammlung für mehrere Codeanwendungen verwenden können, ohne für jeden neuen Unterelementtyp eine neue Sammlung erstellen zu müssen, z. B.: Sammlung .
Benötigt Ihr API-Benutzer einen ganz bestimmten Typ, der für alle Elemente gleich ist?
Verwenden Sie so etwas wie List<WashingtonApple>
.
Benötigt Ihr API-Benutzer mehrere verwandte Typen?
Expose List<Fruit>
für Ihre API und verwenden List<Orange>
List<Banana>
, List<Strawberry>
intern, wo Orange
, Banana
und Strawberry
sind Nachkommen aus Fruit
.
Benötigt Ihr API-Benutzer eine generische Typensammlung?
Verwenden Sie List
, wo alle Elemente sind object
.
Prost.