2009-05-05 3 views
83

Was ist der empfohlene Ansatz zum Benennen von Basisklassen? Setzt es den Typnamen mit "Base" oder "Abstract" voran oder würden wir es einfach mit "Base" ergänzen?C# Klassenbenennungskonvention: Ist es BaseClass oder ClassBase oder AbstractClass

sich das folgende:

Typ: ViewModel z.B. MainViewModel, ReportViewModel

Basisklasse: BaseViewModel oder ViewModelBase oder AbstractViewModel

Beachten Sie auch:

Typ: Product z.B. VirtualProduct, ExpiringProduct

Basisklasse: BaseProduct oder ProductBase oder AbstractProduct

die Sie denken Sie mehr Standard ist?

class Entity : EntityBase 
{ 
} 

oder

class Entity : BaseEntity 
{ 
} 
+1

Siehe auch [Namenskonventionen für abstrakte Klassen] (http://stackoverflow.com/a/429494/33499) – wimh

+0

mögliches Duplikat von [Verwendung von "Base" in einem Klassennamen] (http://stackoverflow.com/questions/510839/using-base-in-a-class-name) – nawfal

Antwort

65

Es gibt Beispiele im Framework mit dem Suffix Base, z. System.Configuration.Provider.ProviderBase, System.Web.SessionState.SessionStateStoreProviderBase.

Aber keineswegs alle abstrakten Basisklassen im Framework folgen dieser Konvention (z. B. System.Data.Common.DbParameter, System.Data.Common.DbCommand).

Persönlich würde ich zu vermeiden, das Suffix mit es sei denn, ich die Tatsache betonen wollte, dass es sich um eine abstrakte Klasse ist und das Gefühl, dass sonst Benutzer der Klasse könnte der Name eine konkrete Umsetzung, um anzuzeigen, zu erwarten.

39

Keine der oben genannten. Überlegen Sie, welchen Zweck Ihre Basisklasse erfüllt. Nenne es so. Zum Beispiel könnte die Basisklasse von Automobil und Fahrrad Fahrzeug sein.

Wenn Sie Basisklassen erstellen, nur um eine Basisklasse einer Klasse zu haben, und ohne einen anderen Grund oder Grund als das, machen Sie wahrscheinlich etwas falsch.

+13

Das ist nicht immer der Fall und Sie werden viele Base * -Klassen im Framework finden. CollectionBase, DictionaryBase .... usw. –

+1

Guter Punkt die realen Welt Objekte sollten genau in Artefakte passen. Die Abstraktion von Commons sollte wie Vehicle basieren, Spezifika müssen hintergehen, aber auch exakt. – ruslander

+1

Oder wie wäre es mit einer PageBase in einer Webanwendung? –

2

Wir verwenden BaseEntity, aber ich denke es ist Ihre eigene Präferenz. Ich sehe oft den anderen.

Nur in Ihrem Kontext konsistent sein, sei es Ihr Projekt, Namespace oder wenn möglich, Ihr Team. Unterschiedliche Konventionen sind schlimmer als eine schlechte Konvention IMHO.

2

Persönlich würde ich überhaupt empfehlen, die Wortbasis überhaupt hinzuzufügen. Sie wissen nie, wann Sie den Code ändern müssen und es wird nicht mehr das Basisobjekt sein. Nachdem wir dies in der Vergangenheit getan haben, haben wir das Wort Base an der Front vorausgesetzt. Es scheint besser zu fließen.

-1

BaseEntity sieht ähnlich aus wie camel case - strName, bseEntity. Ich würde für EntityBase gehen, da es das Thema zuerst definiert, was Ihnen helfen wird, seine Funktion schneller zu identifizieren.

+9

Sie sprechen von ungarischer Notation, nicht von camel casing. Die ungarische Notation ist zufällig nur ein Kamel, aber das sind ganz andere Dinge. – sliderhouserules

4

Wenn Sie sprechen über virtuelle Basisklassen, Standard von Microsoft ist ClassnameBase (wie Collection.)

-3

Denken Sie immer an alphabetisiert, wenn Sie Sachen nennen. Ich mag es wirklich nicht, auf einen SQL Server zu schauen, und jede gespeicherte Prozedur heißt usp [irgendwas]. Verwenden Sie in dieser Hinsicht nicht Get und Set als führende Namen für eine Funktion. Denken Sie statt GetItems oder PlaceOrder daran, sie als ItemsGet oder OrderPlace zu benennen.

Also, im Allgemeinen wäre ClassnameBase/EntityBase eine bessere Wahl.

+7

Nicht zustimmen; Lesbarkeit. GetItems macht viel mehr Sinn als ItemsGet. –

+1

Nicht einverstanden ... der gleiche Grund wie oben .. aber nicht in der Lage zu stimmen ... :( – Mugunth

+0

Im Gegensatz zu den anderen Kommentaren haben marcc nicht so etwas wie itemgsGet() vorgeschlagen. Er schrieb Artikel(). –

2

Ich denke, es ist eine Frage der Wahl. Ich würde sagen, wenn Sie viele Basisklassen erstellen, dann ist es vielleicht besser, mit BaseClassname immer zu gehen, denn auf diese Weise können Sie IMMER herausfinden, welche Basisklassen Sie verwenden können, indem Sie einfach Base eingeben und den Rest der Hilfe erhalten Intellisense. Was wäre, wenn Sie 20 Basisklassen hätten und Sie Base als Suffix hinzugefügt hätten und Sie 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 nur ein oder zwei Klassen ist.

Gleiches gilt für die Entscheidung zwischen GetItems und ItemsGet-Funktion. Ich würde zumindest aus Gründen der Lesbarkeit sagen - gehen Sie zu GetItems. Befolgen Sie die Konventionen :)

+0

'Base' Klassen sind ein OO Hack, siehe [Pauls Kommentar] (http://StackOverflow.com/a/826838/162215) Sie sind oft hilfreich und manchmal notwendig, aber immer noch ein Hack. Wenn Sie ein Bedürfnis haben zu suchen Alle verfügbaren Basisklassen, warum ist das? Was teilen sie, die Ihr Bedürfnis schafft, sie alle zusammen zu sehen? Die Antwort könnte Ihnen helfen, eine bessere Benennung zu finden. – Iain

+1

@Abhishek: Die Analogie zu "GetItems" funktioniert nicht - "Get" ist nur ein Verb und stellt daher nur den englischen grammatischen Sinn als Präfix dar, während "Base" sowohl als Adjektiv (Präfix) als auch als Substantiv (Suffix) funktioniert. . –

+1

@Iain: Der Grund, warum Leute "Base" in Klassennamen verwenden, ist nicht in der Lage zu sein, alle Basisklassen zu finden - das Grundprinzip ist näher am Gegenteil. Es ist so, dass die Basisklasse einer Anzahl von verwandten Klassen sich von ihnen abhebt, so wie das Präfix "I" eine Schnittstelle von den Klassen unterscheiden soll, die es verwenden. Ich habe das Präfix/Suffix "Basis" gesehen, das am häufigsten verwendet wird, wenn die Basisklasse selbst nicht funktionsfähig ist - abstrakt durch beabsichtigte Verwendung, unabhängig von einer erzwungenen "Zusammenfassung". –

Verwandte Themen