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.
quelle
Antworten:
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, alsoIList
ein guter Name.IDisposable
Auf der anderen Seite definiert nur eine Fähigkeit: Entsorgen. Es ist also für alles geeignet, was zum Einmalgebrauch bestimmt ist. Daher der NameIDisposable
.quelle
IEnumerable
), ein "_er" -Nomen, wenn Ihre Schnittstelle nach Dingen benannt würde, die Ihr Objekt an anderen Objekten ausführt ( egIEqualityComparer
) und ein allgemeines Substantiv, wenn Ihre Schnittstelle nach einer Art von Dingen benannt ist, deren Verhalten sie nachahmt (egIList<T>
).I
ist redundant.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:
Ich denke , es ist nicht richtig zu benennen Schnittstellen mit
I
und rufen SieSet
mit ,ISet
denn 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.quelle
I
ist unabhängig davon redundant. Warum nicht abstrakte Klassen mitA
, reguläre Klassen mitC
etc?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").
quelle
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.
quelle
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.quelle
IStateMachineBuilder
(Nomen),IBuildStateMachine
(benannt nach einer Aktion),ICanBuildStateMachine
(benannt nach einer Fähigkeit) usw.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.
quelle