Benennung der abstrakten Java-Klasse

9

Beispiel:

Sie erstellen eine abstrakte Klasse für Ajax-Aktionen. Verschiedene Ajax-Aktionen erweitern diese Klasse.

Problem:

  1. Nennen Sie die Klasse AjaxAction oder AbstractAjaxAction?
  2. Wenn Sie Unterklassen erstellen, benennen Sie diese:
    • Aktion
    • AjaxAction
    • Nennen Sie sie einfach, was sie sind

Ich konnte nicht herausfinden, was die "offizielle" Konvention ist. Ich sehe keine Notwendigkeit für das Präfix "Abstract" oder eine erforderliche Namenskonvention in den Unterklassen. (Es kann sowieso passen, abhängig.)

Gibt es eine offizielle Konvention? Könnten Sie mich damit verknüpfen? Und wie stehen Sie zu diesem Thema?

Michael K.
quelle

Antworten:

16

Wenn möglich, versuche ich, Implementierungsdetails aus Namen herauszulassen, einschließlich eines Präfixes / Suffixes für eine abstrakte Klasse oder Schnittstelle.

Ein Ort, an dem Sie nach Anleitungen / Inspirationen für die Benennung suchen können, ist die Java-API. Ich kann mir keine Teile vorstellen, die das Präfix verwenden (mit einer großen Ausnahme ist die Collections-API, die das Abstract-Präfix stark verwendet). Die folgende Suche liefert einige ziemlich gute Beispiele:

"public abstract class" unter download.oracle.com/javase/6

Sie werden feststellen, dass abstrakte Klassen etwas Abstraktes und konkrete Unterklassen etwas Konkreteres heißen. Zum Beispiel abstrakte Klasse Readerhat konkrete Subklassen BufferedReader, StringReader, InputStreamReaderusw.

Da Ihre konkreten Unterklassen nur spezifischere Versionen Ihrer abstrakten Klasse sind, ist es beabsichtigt, Ihre Namen auf die gleiche Weise auszuwählen. In Ihrem Beispiel würde ich die abstrakte Klasse benennen AjaxActionund diese in den Namen für die konkreten Unterklassen ( SpecificAjaxAction) verwenden.

Tyler Holien
quelle
12

Wähle etwas und sei konsequent. Ob Sie das Suffix verwenden Base, um eine beabsichtigte Basisklasse oder das Präfix anzugeben Abstract, seien Sie einfach konsistent.

Es gibt so viele Meinungen zu solchen Dingen wie Programmierer. Meine Meinung ist für das, was es wert ist, da diese Konsistenz bei der Benennung innerhalb eines Projekts (oder einer Entwicklungsgruppe oder was auch immer) wichtiger ist als jedes spezifische Benennungsschema.

Brian Clapper
quelle
4

Ich würde die abstrakte Klasse benennen AjaxActionBaseund untergeordnete Klassen entweder mit 'Aktion' oder 'AjaxAction' versehen, je nachdem, was für die Aktionen, die ich erstellen musste, natürlicher lesbar war.

Adam Lear
quelle
0

Ich ziehe es vor , aus einem einfachen, aber sehr wichtigen Grund einen Hinweis darauf zu geben, dass eine Klasse abstrakt im Namen ist :

  • Es ist besser, Ihre APIs um Schnittstellen herum zu erstellen, als abstrakte Klassen.
  • Sie möchten den einfachen Namen, z. B. "Aktion", verwenden, um Ihre Schnittstelle zu benennen. Siehe zum Beispiel Liste oder Karte in der Java Collections-API - all dies sind Schnittstellen.

Daher würde ich normalerweise eine abstrakte Klasse der obersten Ebene entweder AbstractAction oder BaseAction nennen. Wenn es keinen sehr spezifischen Bedarf gibt, würde ich diese normalerweise nicht veröffentlichen , damit Benutzer des Codes dazu gebracht werden, die Schnittstelle zu verwenden. Abstrakte Basisklassen sollten normalerweise eher ein Implementierungsdetail als eine Funktion Ihrer API sein, es sei denn, Sie sind sehr vorsichtig, wie die Benutzer sie erweitern sollen.

mikera
quelle