2010-11-12 9 views
5

Ich überlege, eine Schnittstelle zu erstellen und auf alle Objekte in einem bestimmten Namespace anzuwenden.Ist die Verwendung von leeren Schnittstellen ein schlechtes Design?

Szenario, in dem ich das verwenden würde: Ich möchte einen generischen Handler dieser Objekte erstellen, und ich möchte den generischen Parameter erzwingen, nur Typen zu akzeptieren, die diese bestimmte Schnittstelle implementieren.

Ist dies ein schlechtes Design, oder sind leere Schnittstellen akzeptabel?

+0

Wiederholen? http://StackOverflow.com/q/3162214/456188 – Crisfole

+0

@Cpfohl: Meine Frage scheint sehr ähnlich zu der, die Sie verknüpfen. Es scheint, dass diese andere Frage unklarer geschrieben ist (überprüfen Sie die "gesehene" Anzahl), und weniger gut in den Antworten abgedeckt. – Remus

+0

Ich sage dir nicht, du musst es runternehmen! :) Ich zeige es nur für den Fall, dass Sie zusätzliche Informationen erhalten. – Crisfole

Antwort

2

Wovon Sie reden, ist bekannt als Marker Interfaces.

Ich habe diese Technik in der Vergangenheit erfolgreich verwendet, aber ich würde in Frage stellen, ob die künstliche Beschränkung, die Sie auf Ihre generische Klasse setzen, tatsächlich notwendig ist. Wenn ja, dann ist dies sicherlich eine schnelle und kompilierte Methode, um es zu erreichen.

+0

Also da ist * ein Name dafür ... Danke! – Remus

1

Nichts falsch mit ihnen meiner Meinung nach. Ein Großteil ihrer Stärke liegt in der Kombination mit (generierten) partiellen Klassen.

0

Warum erstellen Sie diese Schnittstelle, wenn sie leer ist? Was sind die Inhalte jeder Klasse? Gibt es beliebig Gemeinsamkeit zwischen ihnen? Wenn die Antwort auf diese Frage nein ist, warum machst du dann eine Schnittstelle für jeden?

Wenn Sie einen guten Grund für eine leere Schnittstelle haben, ist es wahrscheinlich in Ordnung. Aber denken Sie darüber nach und sehen Sie, ob Sie etwas in die Schnittstelle zwischen den Elementen einfügen können.

+0

... Gleichzeitig würde ich zusätzliche Informationen nicht einfach in eine Schnittstelle zwingen. Je weniger definiert und Schnittstelle ist desto besser. Sie können immer mehrere Schnittstellen für zusätzliche funktionale Verpflichtungen verwenden. – deanvmc

+0

Ich würde keine Schnittstelle für jede, nur eine Schnittstelle, die alle Objekte in einem bestimmten Namespace abdeckt. Und die Annahme in meiner Frage ist, dass es zwischen ihnen keine Gemeinsamkeit gibt. – Remus

1

Mein persönliches Verständnis einer Schnittstelle ist, dass sie den öffentlichen Vertrag zwischen einem oder mehreren Objekten bildet. Die Idee ist einfach: Sie können Ihre Code-Basis über Schnittstellen aufbauen, ohne sich Gedanken über die Implementierung machen zu müssen. Es ist eine interessante Frage, weil Sie technisch versuchen, einen Vertrag zu erzwingen. Ich würde sagen, mach weiter.

0

Es gibt nichts ... Falsch mit der Verwendung einer leeren Schnittstelle, denke ich. Der Zweck einer Schnittstelle ist es, einen gemeinsamen Satz von Funktionen zu definieren, die sich in ihrer Implementierung unterscheiden können.

Es wird die Codierung nicht einfacher, da Sie effektiv mit einer Black-Box arbeiten (object, wie manche es nennen).

Ehrlich gesagt, wenn ich eine solche offene Architektur implementieren würde, würde ich einfach mit normalen alten gehen object.

1

Nein, es ist nicht schlechtes Design. Durch die Bereitstellung angemessener Einschränkungen für generische Argumente wird die Sicherheit und Lesbarkeit des Codes gewährleistet. Außerdem können Sie sicher sein, dass die Schnittstelle nicht für immer leer bleibt.

Verwandte Themen