Was ist der empfohlene Ansatz zum Benennen von Basisklassen? Wird dem Typnamen " Base " oder " Abstract " vorangestellt oder wird ihm nur "Base" hinzugefügt?
Folgendes berücksichtigen:
Typ: ViewModel
zB MainViewModel , ReportViewModel
Basisklasse: BaseViewModel
oderViewModelBase
oderAbstractViewModel
Beachten Sie auch:
Typ: Product
zB VirtualProduct , ExpiringProduct
Basisklasse: BaseProduct
oderProductBase
oderAbstractProduct
Was denkst du ist mehr Standard?
class Entity : EntityBase
{
}
oder
class Entity : BaseEntity
{
}
c#
naming-conventions
base-class
Soni Ali
quelle
quelle
Antworten:
Es gibt Beispiele im Framework mit dem Basissuffix, z
System.Configuration.Provider.ProviderBase
.System.Web.SessionState.SessionStateStoreProviderBase
.Auf keinen Fall folgen jedoch alle abstrakten Basisklassen im Framework dieser Konvention (z
System.Data.Common.DbParameter
.System.Data.Common.DbCommand
).Persönlich würde ich die Verwendung des Suffixes vermeiden, es sei denn, ich wollte die Tatsache hervorheben, dass es sich um eine abstrakte Klasse handelt, und hatte das Gefühl, dass Benutzer der Klasse ansonsten erwarten könnten, dass der Name auf eine konkrete Implementierung hinweist.
quelle
Avoid
Benennen von Basisklassen mit einemBase
Suffix, wenn die Klasse für die Verwendung in öffentlichen APIs vorgesehen ist." Richtlinien für das Framework-Design, Seite 174Nichts des oben Genannten. Überlegen Sie, welchen Zweck Ihre Basisklasse bietet. Nennen Sie es so. Zum Beispiel könnte die Basisklasse von Automobil und Fahrrad Fahrzeug sein.
Wenn Sie Basisklassen erstellen, um nur eine Basisklasse einer Klasse zu haben, und ohne einen anderen Zweck oder Grund als diesen, machen Sie wahrscheinlich etwas falsch.
quelle
Wenn Sie über virtuelle Basisklassen sprechen, lautet der Microsoft-Standard ClassnameBase (wie CollectionBase).
quelle
Ich denke, es ist eine Frage der Wahl. Ich würde sagen, wenn Sie viele Basisklassen erstellen, ist es vielleicht besser, immer mit BaseClassname zu arbeiten, da Sie auf diese Weise IMMER herausfinden können, welche Basisklassen Sie verwenden können, indem Sie einfach Base eingeben und den Rest der Hilfe von erhalten Intellisense. Was wäre, wenn Sie 20 Basisklassen hätten und Base als Suffix hinzugefügt hätten und vergessen hätten, wie die Basisklasse heißt? Möchten Sie zuerst ein Klassendiagramm aus VS erstellen und herausfinden, welche Basisklassen verfügbar sind? Es ist in Ordnung, sie ClassBase zu nennen, wenn es sich nur um eine oder zwei Klassen handelt.
Gleiches gilt für die Entscheidung zwischen GetItems und ItemsGet. Ich würde sagen, zumindest aus Gründen der Lesbarkeit - wählen Sie GetItems. Befolgen Sie die Konventionen :)
quelle
GetItems
funktioniert nicht - "Get" ist nur ein Verb und macht daher nur einen englischen grammatikalischen Sinn als Präfix, während "Base" sowohl als Adjektiv (Präfix) als auch als Substantiv (Suffix) funktioniert.abstract
.Wir verwenden BaseEntity, aber ich denke, es ist Ihre eigene Präferenz. Ich sehe oft den anderen.
Seien Sie einfach konsistent in Ihrem Kontext, sei es Ihr Projekt, Ihr Namespace oder, wenn möglich, Ihr Team. Unterschiedliche Konventionen sind meiner Meinung nach schlechter als schlechte Konventionen.
quelle
Persönlich würde ich davon abraten, die Wortbasis überhaupt hinzuzufügen. Sie wissen nie, wann Sie den Code ändern müssen, und es wird nicht mehr das Basisobjekt sein. Davon abgesehen haben wir dies in der Vergangenheit getan und das Wort Base auf der Vorderseite vorangestellt. Es scheint besser zu fließen.
quelle
BaseEntity ähnelt stark dem Kamelfall - strName, bseEntity. Ich würde mich für EntityBase entscheiden, da es zuerst das Thema definiert, wodurch Sie die Funktion schneller identifizieren können.
quelle
Denken Sie immer an die Alphabetisierung, wenn Sie Dinge benennen. Ich mag es wirklich nicht, einen SQL Server zu betrachten, und jede gespeicherte Prozedur heißt usp [etwas]. Verwenden Sie Get and Set in diesem Sinne nicht zu häufig als führende Namen für eine Funktion. Denken Sie anstelle von GetItems oder PlaceOrder daran, sie als ItemsGet oder OrderPlace zu benennen.
Im Allgemeinen wäre ClassnameBase / EntityBase daher die bessere Wahl.
quelle