116 Stimmen

Benennungskonventionen für abstrakte Klassen

Ich erinnere mich ganz deutlich daran, dass Microsoft einmal die Richtlinie hatte, dem Namen einer abstrakten Klasse das Suffix "Base" hinzuzufügen, um offensichtlich zu machen, dass es sich um eine abstrakte Klasse handelt. Deshalb haben wir Klassen wie System.Web.Hosting.VirtualFileBase, System.Configuration.ConfigurationValidatorBase, System.Windows.Forms.ButtonBase und natürlich auch System.Collections.CollectionBase.

Aber mir ist aufgefallen, dass in letzter Zeit viele abstrakte Klassen im Framework diese Konvention nicht mehr zu befolgen scheinen. Zum Beispiel sind die folgenden Klassen alle abstrakt, folgen aber nicht dieser Konvention:

  • System.DirectoryServices.ActiveDirectory.DirectoryServer

  • System.Configuration.ConfigurationElement

  • System.Drawing.Brush

  • System.Windows.Forms.CommonDialog

Und das ist nur, was ich in wenigen Sekunden finden konnte. Also habe ich nachgesehen, was die offizielle Dokumentation dazu sagt, um sicherzugehen, dass ich nicht verrückt bin. Ich habe die Namen von Klassen, Structs und Interfaces auf MSDN unter Designrichtlinien für die Entwicklung von Klassenbibliotheken gefunden. Seltsamerweise habe ich keine Erwähnung der Richtlinie gefunden, "Base" am Ende des Namens einer abstrakten Klasse hinzuzufügen. Und die Richtlinien sind für Version 1.1 des Frameworks nicht mehr verfügbar.

Also, werde ich verrückt? Hat diese Richtlinie jemals existiert? Wurde sie einfach kommentarlos aufgegeben? Habe ich zwei Jahre lang alleine lange Klassennamen erstellt, umsonst?

Jemand wirf mir einen Knochen zu.

Update Ich bin nicht verrückt. Die Richtlinie hat existiert. Krzysztof Cwalina beschwert sich darüber im Jahr 2005.

0 Stimmen

Wenn Sie diesen Text gelesen haben, beschwert sich Krzysztof lediglich darüber, "einen Satz von Empfehlungen" erhalten zu haben - nicht unbedingt, dass diese Empfehlungen von Microsoft offiziell waren. Ich erinnere mich daran, die Richtlinien von MS gelesen zu haben und gesehen zu haben, dass sie dagegen empfehlen.

1 Stimmen

Ich habe es gelesen, obwohl es das erste Mal ist, dass ich diesen bestimmten Artikel gesehen habe. Es ist tatsächlich eine Erleichterung. Mir hat die Empfehlung nie wirklich gefallen. Das wird mir eine Menge Groll ersparen. :)

3voto

Kooooons Punkte 109

Ich verstehe die Neigung, eine Basissuffix zu vermeiden, aber ich verstehe auch die Notwendigkeit für irgendein Suffix. Nun schlägt ein Kommentar dieses Artikels vor, "Type" als Suffix als zweite Wahl zu verwenden, um keins zu verwenden. Ich glaube, das könnte verwirrend sein, aber die Idee, dass "ein solches unverbindliches Wort dazu neigen würde anzudeuten, dass es sich um eine unverbindliche Klasse handelt", ist bei mir hängengeblieben.

Als Alternative: Ich würde es bevorzugen, "Art" als Suffix zu verwenden, um das Objekt als "von oder gehörig zu einer bestimmten Rasse oder Familie" zu kennzeichnen (Wiktionary: -kind).

Beispiel: DataProvider und ReflectiveDataProvider sind beide DataProviderKind

Inspiriert von der Biologie, wo z.B. "canis lupus" zur Familie "Canoidea" gehört, was grob übersetzt "hundlich" bedeutet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X