2011-01-13 15 views
9

Betrachten Sie eine Klasse, die viele Schnittstellen implementiert, wäre es sinnvoll, jede Schnittstelle in einer separaten Datei mit partial class Definitionen zu implementieren?Implementieren von Schnittstellen in partiellen Klassen

Wäre dies ein Missbrauch der Sprachfunktion oder ist es ein Idiom, von dem ich nichts weiß?

+0

Eine einfache Alternative, die Visual Studio verwendet standardmäßig ist Regionen. – CodesInChaos

+0

Ich bin mir nicht sicher, ob ich dies für Schnittstellenimplementierungen tun würde, aber ich habe dies bereits getan, um mehrere private verschachtelte Klassen zu teilen. –

Antwort

12

Wenn Ihre Klasse hat, um viele Schnittstellen zu implementieren, ist das ein vernünftiger Weg, die Quelle zu verwalten, ja. Sie können die Projektdatei so bearbeiten, dass mehrere von ihnen von einer "Haupt" -Klassendatei abhängen, wodurch die Arbeit mit dem Projektmappen-Explorer erleichtert wird.

Sie sollten sich fragen, ob Sie nicht mehrere kleinere Klassen haben sollten, die jeweils eine einzige Schnittstelle implementieren. Manchmal ist das ein besserer Ansatz, manchmal nicht - aber es lohnt sich immer, die Frage zu stellen.

+0

Ja, in der Tat, definitiv eine Frage wert. –

+1

Das ist ein interessanter Vorschlag, wie macht man Quelldateien voneinander abhängig? – Motti

+2

@Motti: Sie müssen die Projektdatei von Hand bearbeiten. Beispiele finden Sie unter http://stackoverflow.com/q/223249/22656. –

4

Kein Idiom, von dem ich jemals gehört habe, aber klingt wie eine elegante Möglichkeit, Ihren Code zu partitionieren.

1

Der einzige Vorteil besteht darin, dass die verschiedenen Schnittstellenimplementierungen in separaten physischen Dateien vorliegen.

Meiner Meinung nach wird dies durch den Nachteil aufgewogen, dass Ihre Klassendeklaration in separaten physischen Dateien gespeichert ist.

2

Sie können, ja, aber das wird Ihnen keine Vorteile mehr, sagen wir, eine einzige Datei mit Regionen. Teilweise Klassen neigen dazu, eklig zu sein, weil es nicht sofort offensichtlich ist, dass es einen anderen Teil dazu gibt, und jemand anderes, der die Klasse betrachtet, könnte es vermissen. Ich persönlich bevorzuge es, alles an einem Ort zu haben.

3

Ich denke, dass Sie sich fragen sollten, ob es einfacher oder schwerer ist, den Code zu verstehen, wenn Sie für jede von Ihrer Klasse implementierte Schnittstelle eine .cs-Datei haben. Wie würdest du die Dateien benennen?

Obwohl ich hier vielleicht ein wenig ausstrecke, denke ich, dass ich vorschlagen werde, dass Sie die viel verhasste #region Direktive verwenden, wenn das Organisieren des Codes Ihr Ziel ist.

1

Pro: kann leicht feststellen, welcher Teil einer Klasse welche Schnittstelle implementiert (gut, wenn Sie ein Werkzeug verwenden, das nicht leicht durch Code innerhalb der IDE navigieren kann).

Con: leichte Kontext zu verlieren, da Sie jetzt in mehreren Dateien navigieren

ich denn w/dem Fortschritt in der IDE heutzutage, ist es nicht wirklich wichtig. Sie können eine einzelne Datei haben und mit dem Tool schnell in Ihrer Klassenstruktur navigieren. Aber dann kann wieder Werkzeug in beide Richtungen helfen ... so ...

Teilweise ist immer noch gut zum Trennen von generierten Code vs benutzerdefinierten Code.

1

Es geht um so viel Sinn macht, als mit Konstrukteuren in einem Teilklassendatei Eigenschaften in einem anderen Teilklassendatei, etc., etc.

heißt Sie es nicht tun, wenn Sie einen guten Grund haben.

0

Ich denke, es gibt bessere Möglichkeiten der Strukturierung Ihres Codes als die Verwendung von Teiltönen in diesem Fall. Es gibt keine Referenz in Visual Studio, die Sie konsultieren können, um zu sehen, wie viele partielle Implementierungen es für eine bestimmte Klasse gibt, so dass es leicht ist, den Überblick zu verlieren.

Je nachdem, wie viele Schnittstellen Sie wirklich mit "vielen Schnittstellen" meinen, können Sie Regionen verwenden, um die Implementierungen zu trennen. Das wäre bis zu 10-15 Schnittstellen mit insgesamt 150 Funktionen zu implementieren. Danach werden die Dinge unordentlich und du wirst den Überblick verlieren. Und hier profitieren Sie von anderen Mechanismen wie Vererbung, Kapselung oder Aggregation und der Verwendung von Services und Hilfsklassen.

Aber ich würde ernsthaft die Architektur des Codes überdenken, wenn Sie jemals über die Notwendigkeit kommen 15+ Schnittstellen zu implementieren ....

Verwandte Themen