Frage

Ich habe eine Klassenmethode, die eine Liste von Mitarbeitern zurückgibt, die ich durchlaufen kann.Wie kann ich die Liste am besten zurückgeben?Normalerweise gebe ich einfach eine ArrayList zurück.Soweit ich weiß, eignen sich Schnittstellen jedoch besser für diese Art von Aktion.Welche Schnittstelle wäre die beste?Warum ist es außerdem besser, eine Schnittstelle zurückzugeben als die Implementierung (z. B. ein ArrayList-Objekt)?Es scheint mir einfach viel mehr Arbeit zu sein.

War es hilfreich?

Lösung

Persönlich würde ich a verwenden Aufführen<Mitarbeiter> zum Erstellen der Liste im Backend und dann verwenden IList wenn du zurück kommst.Wenn Sie Schnittstellen verwenden, haben Sie die Flexibilität, die Implementierung zu ändern, ohne ändern zu müssen, wer Ihren Code verwendet.Wenn Sie bei einer ArrayList bleiben wollten, wäre das nicht generisch IList.

Andere Tipps

@Jason

Sie können auch IList<> zurückgeben, da ein Array diese Schnittstelle tatsächlich implementiert.

Der beste Weg, so etwas zu tun, wäre, wie Sie sagen, eine Liste zurückzugeben, vorzugsweise unter Verwendung von Generika, also wäre es List<Employee>.

Die Rückgabe einer Liste anstelle einer ArrayList bedeutet, dass Sie, wenn Sie sich später beispielsweise für die Verwendung einer LinkedList entscheiden, keinen Code ändern müssen, außer an der Stelle, an der Sie das Objekt zunächst erstellen (d. h. den Aufruf von „new“) Anordnungsliste())".

Wenn Sie lediglich die Liste durchlaufen, können Sie eine Methode definieren, die die Liste als IEnumerable (für .NET) zurückgibt.

Indem Sie die Schnittstelle zurückgeben, die genau die Funktionalität bereitstellt, die Sie benötigen, können Sie Ihre Methode mithilfe von vollständig neu schreiben, wenn in Zukunft ein neuer Sammlungstyp auf den Markt kommt, der besser/schneller/besser zu Ihrer Anwendung passt, solange er noch IEnumerable implementiert den neuen Typ darin, ohne den Code zu ändern, der ihn aufruft.

Gibt es einen Grund, warum die Sammlung bestellt werden muss?Warum nicht einfach eine zurückschicken? IEnumerable<Employee>?Dies stellt das absolute Minimum dar, das erforderlich ist – wenn Sie später eine andere Form der Aufbewahrung wünschen, wie eine Tasche, ein Set, einen Baum oder so weiter, bleibt Ihr Vertrag intakt.

Ich bin nicht mit der Prämisse einverstanden, dass es besser ist, eine Schnittstelle zurückzugeben.Mein Grund dafür ist, dass Sie den Nutzen maximieren möchten, den ein bestimmter Codeblock bietet.

Vor diesem Hintergrund funktioniert eine Schnittstelle zum Akzeptieren eines Elements als Argument.Wenn ein Funktionsparameter ein Array oder eine ArrayList aufruft, ist das das Einzige, was Sie ihm übergeben können.Wenn ein Funktionsparameter ein IEnumerable aufruft, akzeptiert er eines davon sowie eine Reihe anderer Objekte.Es ist nützlicher

Der Rückgabewert funktioniert jedoch umgekehrt.Wenn Sie ein IEnumerable zurückgeben, können Sie es nur aufzählen.Wenn Sie eine Liste zur Hand haben und diese zurückgeben, kann Code, der Ihre Funktion aufruft, auch problemlos eine Reihe anderer Dinge tun, z. B. eine Zählung ermitteln.

Ich stimme jedoch mit denen überein, die Ihnen raten, von der ArrayList wegzukommen.Generika sind so viel besser.

Eine Schnittstelle ist ein Vertrag zwischen der Implementierung und dem Benutzer der Implementierung.

Durch die Verwendung einer Schnittstelle ermöglichen Sie der Implementierung, sich beliebig zu ändern, solange der Vertrag für die Benutzer eingehalten wird.

Außerdem können mehrere Implementierungen dieselbe Schnittstelle verwenden, sodass Benutzer Code wiederverwenden können, der mit der Schnittstelle interagiert.

Sie sagen nicht, über welche Sprache Sie sprechen, aber in etwas .NET-ähnlichem ist es nicht mehr Arbeit, eine IList zurückzugeben als eine Liste oder sogar eine ArrayList, obwohl mich die bloße Erwähnung dieser veralteten Klasse vermuten lässt, dass Sie es sind Ich spreche nicht von .NET.

Eine Schnittstelle ist im Wesentlichen ein Vertrag darüber, dass eine Klasse über bestimmte Methoden oder Attribute verfügt.Die Programmierung auf einer Schnittstelle anstelle einer direkten Implementierung ermöglicht einen dynamischeren und besser verwaltbaren Code, da Sie Implementierungen vollständig austauschen können, solange der „Vertrag“ noch besteht.

In dem von Ihnen beschriebenen Fall bietet Ihnen die Übergabe einer Schnittstelle keinen besonderen Vorteil. An meiner Stelle würde ich die ArrayList mit dem generischen Typ oder das Array selbst übergeben:list.toArray()

Eigentlich sollten Sie keine Liste zurückgeben, wenn es sich um ein Framework handelt, zumindest nicht ohne darüber nachzudenken. Die empfohlene Klasse ist eine Sammlung.Die List-Klasse bietet einige Leistungsverbesserungen auf Kosten von Server-Erweiterbarkeitsproblemen.Es handelt sich tatsächlich um eine FXCop-Regel.

Die Begründung dafür finden Sie hier Dieser Artikel

Der Rückgabetyp für Ihre Methode sollte sein IList<Employee>.

Das bedeutet, dass der Aufrufer Ihrer Methode alles verwenden kann IList Angebote, können aber keine spezifischen Dinge verwenden ArrayList.Wenn du das dann irgendwann spürst LinkedList oder YourCustomSuperDuperList bietet eine bessere Leistung oder andere Vorteile. Sie können es sicher in Ihrer Methode verwenden und Anrufer nicht verarschen.

Das sind ungefähr Schnittstellen 101.;-)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top