Verwenden Sie Verben mit Funktionen, Substantive mit Klassen - was ist mit Schnittstellen? [geschlossen]

23

Ok, ich verstehe die normalen Konventionen der Verwendung von Verben mit Funktionen und Substantiven mit Klassen. Was ist mit Schnittstellen? Gibt es eine Methode, um Schnittstellennamen zu finden, die möglicherweise nicht so offensichtlich sind?

Um es klar zu machen, ich spreche nicht darüber, ob ich ein "I" vor den Namen setzen soll oder ob ich camelCase oder PascalCase verwenden soll. Ich wundere mich über die Methode, einen klaren, semantischen Namen für eine Schnittstelle zu finden.

BEARBEITEN Ich bin besessen davon, wie man eine Schnittstelle am klarsten benennt. Ich denke, es muss auch nur ein Substantiv sein, denn wenn ich daran denke, Klassen zu benennen, denke ich an das nächste Objekt der "realen" Welt, mit dem es in Beziehung stehen kann. Ich nehme an, dass reale Schnittstellen Dinge wie eine Tastatur, eine Maus, eine Fernbedienung oder ein Geldautomatenbildschirm sind. Das sind alles Nomen. Auf jeden Fall wäre jeder zusätzliche Einblick in eine gute Möglichkeit, Schnittstellennamen zu formulieren, dankbar.

Programmierer
quelle
2
Hm .. Basierend auf dem Titel dachte ich, dass es darum geht, Teile der Sprache zwischen Programmieren und Englisch gleichzusetzen. In diesem Fall scheinen madlibs möglich zu sein.
Izkata,
Denken Sie daran, wenn Sie eine Klasse erstellen, erstellen Sie auch eine Schnittstelle für Objekte, die von dieser Klasse instanziiert werden. Oder anders ausgedrückt, Klassen sind realisierte Schnittstellen. Daher sollten sie dieselbe Namenskonvention verwenden.
Daniel T.
Auch meiner Meinung nach ist die "Verwendung von Verben mit Funktionen" zu allgemein. Sie sollten Verben mit Befehlen und Substantive mit Abfragen verwenden .
Daniel T.

Antworten:

21

Ich würde sagen, es hängt davon ab, was die Schnittstelle definiert. In einigen Fällen, in denen die Benutzeroberfläche sehr spezifisch und detailliert ist, ist ein Substantiv meiner Meinung nach am besten. Beispiele hierfür sind IList, ICollection.

Manchmal geht es bei einer Schnittstelle jedoch mehr darum, einer Klasse bestimmte allgemeine Features hinzuzufügen. In diesem Fall halte ich ein Adjektiv für das beste. Beispiele dafür sind IDisposable, IEnumerable...

Vielleicht können Sie auch darüber nachdenken, wie viele "Fähigkeiten" Ihre Benutzeroberfläche definiert.

Die IList<T>Benutzeroberfläche definiert beispielsweise die folgenden Funktionen : Hinzufügen, Löschen, Enthält, Einfügen, Entfernen, ... Dies sind alles Eigenschaften einer Liste, also IListein guter Name.

IDisposableAuf der anderen Seite definiert nur eine Fähigkeit: Entsorgen. Es ist also für alles geeignet, was zum Einmalgebrauch bestimmt ist. Daher der Name IDisposable.

Kristof Claes
quelle
10
Ich würde vorschlagen, ein "_able" -Adjektiv zu verwenden, wenn Ihre Schnittstelle nach Dingen benannt würde, die an Ihrem Objekt vorgenommen werden können (z. B. IEnumerable), ein "_er" -Nomen, wenn Ihre Schnittstelle nach Dingen benannt würde, die Ihr Objekt an anderen Objekten ausführt ( eg IEqualityComparer) und ein allgemeines Substantiv, wenn Ihre Schnittstelle nach einer Art von Dingen benannt ist, deren Verhalten sie nachahmt (eg IList<T>).
Supercat
Kommentar von @supercat sollte wirklich in dieser Antwort enthalten sein. Das macht sehr viel Sinn.
Nikhil Vartak
Das tatsächliche Präfixieren des Schnittstellennamens mit Iist redundant.
user1870400
5

Eine Schnittstelle beschreibt das Verhalten, so dass die Namen dies sagen sollten. Ich bin mir über eine Regel nicht sicher, aber Sie werden den Namen kennen, wenn Sie ihn hören.

Einige Beispiele:

Flyable      - Can Fly
Workable     - Can work
Negotiatable - Can negotiate.

Ich denke , es ist nicht richtig zu benennen Schnittstellen mit Iund rufen Sie Setmit , ISetdenn als Entwickler sollten Sie nicht besorgt, ob es sich um eine Schnittstelle oder eine Klasse. Ich sehe, dass diese Praxis in Java jetzt nicht existiert.

ManuPK
quelle
+1 für "Als Entwickler sollten Sie sich keine Sorgen machen, ob es sich um eine Schnittstelle oder eine Klasse handelt."
Kazark
"Als Entwickler sollten Sie sich keine Sorgen machen, ob es sich um eine Schnittstelle oder eine Klasse handelt."
Maximus Minimus
Das Präfix @MaximusMinimus Iist unabhängig davon redundant. Warum nicht abstrakte Klassen mit A, reguläre Klassen mit Cetc?
user1870400
@ user1870400 - stimmt, aber das ist nicht der Teil, mit dem ich nicht einverstanden bin.
Maximus Minimus
4

Da eine Schnittstelle eigentlich nur ein Ausdruck für das "Was", aber nicht für das "Wie" eines Typs ist, würde ich sie so benennen, wie Sie Klassen benennen, zumindest aus der Perspektive von Teilen der Sprache. Das einzige, was ich hinzufügen könnte, ist, dass sie häufig allgemeiner sind als die spezifischen Implementierer (z. B. hat die "Kunden" -Schnittstelle möglicherweise Implementierer für "ProspectiveCustomer" und "PayingCustomer").

Erik Dietrich
quelle
0

Eine Schnittstelle wird wie eine Klasse verwendet. Daher sollte es auch mit einem Substantiv benannt werden, wenn Sie Klassen mit Substantiven benennen. Bevorzugen Sie abstrakte Substantive, zum Beispiel "Fahrzeug", wenn die Klassen "Auto" und "LKW" sind.

Thiton
quelle
0

Schnelle Antwort: In der Benutzeroberfläche geht es mehr um das Hinzufügen einer Reihe von Fähigkeiten, Merkmalen, gemeinsamen Grenzen oder Verbindungen zwischen Entitäten, Klassen, Modellen, Konzepten usw.

Es geht darum, Klassen und Entitäten ein gemeinsames Verhalten hinzuzufügen, und dann wird ein aussagekräftiger Name angezeigt, um die Gruppe der betroffenen Features zu identifizieren.

Benennung der Benutzeroberfläche wie: IStateMachineBuilder, IUserContextProviderBuilder, IEntityBuilderBuilder, IActiveAware, etc.Erklären Sie wahrscheinlich das Konzept.

EL Yusubov
quelle
1
Ja, Schnittstellen stehen für Verträge oder Funktionen. so viel ist bekannt. Aber wie beantwortet dies die Frage, wie man sie benennt? Alles, was Sie in diesem Zusammenhang wirklich sagen, ist: "Denken Sie darüber nach, und die Inspiration wird Sie beeindrucken." Dies gibt beispielsweise keine Empfehlung, welcher der folgenden Namen gewählt werden sollte, aus welchem ​​Grund: IStateMachineBuilder(Nomen), IBuildStateMachine(benannt nach einer Aktion), ICanBuildStateMachine(benannt nach einer Fähigkeit) usw.
stakx
0

Es hängt davon ab, ob die Schnittstelle nur Methoden enthält. Es ist sinnvoll, sie unter Verwendung von Verben wie "Actions" zu benennen, wenn sie eine generische Klasse darstellt, die statische, endgültige Felder enthält. Dann können wir ein generisches Nomen wie "Vehicle" verwenden.

Joms Antony
quelle