F
Firephoenix
Gast
Eine "richtige" Antwort gibt es vermutlich nicht, aber ich hätte gerne mal Argumente für die Bennenungskonventionen von Interfaces und implementierenden Klassen.
In den Eclipse-Conventions wird gefordert, dass jedes Interface mit einem führendem "I" benannt wird.
Auf anderen Seiten habe ich dagegen die Version mit normalen Interfaces gefunden, bei denen die Implementierende Klasse ein -Impl angehängt bekommt (oder direkt anders benannt wird - siehe das Hierachiebeispiel unten).
Ich selber bin Verfechter der "ohne I"-Variante, aber man findet ohne Probleme Argumente für beide Versionen:
Mit I
Pro:
-Interfaces werden hervorgehoben und sind für Entwickler leichter erkennbar
-kein "Impl"-Anhang an implementierenden Klassen mit identischem Namen.
Contra:
-Sucht man in einer API hat man ein Namensraumproblem, eine Persistenzschnittstelle könnte Persitence* oder IPersistence* heißen.
-Ändert man ein Interface in eine abstrakte oder konkrete Klasse führt die Änderung am Namen dazu, dass alle abhängigen Klassen sich ebenfalls ändern müssen.
-Man gibt Implementierungsdetails nach außen weiter.
Ohne I
Pro:
-Leichtes Refactoring in konkrete Klasse möglich ohne den Namen anfassen zu müssen
-Bessere Lesbarkeit (da man nicht dauernd das "I" ablesen muss)
-Sauberere Api (Siehe Gegenbeispiel oben)
Contra:
-Führt teilweise zu "-Impl" Klassenpostfixen
-Man sieht nicht mehr direkt was ein Interface und was eine Klasse ist.
Zu dem -Impl Idiom ist allerdings zu sagen, dass der Fall tatsächlich nur dann eintritt, wenn man eine Klasse benötigt die den identischen Namen wie das Interface bekommen soll.
Der Regelfall dürfte aber eher eine Hierachie sein (Interface List, Klassen LinkedList, AbstractList ....)
Bei einem sauberen Framework sollte der Anwender in der Regel ja nur mit einigen wenigen konkreten Klassen kommunizieren und ansonsten die Interfaces verwenden. Dies wäre ein weiteres Argument die Interfaces "schön" zu benennen und "gebaute" Namen wie das -Impl unter der Haube zu verstecken.
Wie geht ihr denn in euren Projekten damit um?
(Und habe ich irgendwelche Argumente vergessen?)
Gruß
In den Eclipse-Conventions wird gefordert, dass jedes Interface mit einem führendem "I" benannt wird.
Auf anderen Seiten habe ich dagegen die Version mit normalen Interfaces gefunden, bei denen die Implementierende Klasse ein -Impl angehängt bekommt (oder direkt anders benannt wird - siehe das Hierachiebeispiel unten).
Ich selber bin Verfechter der "ohne I"-Variante, aber man findet ohne Probleme Argumente für beide Versionen:
Mit I
Pro:
-Interfaces werden hervorgehoben und sind für Entwickler leichter erkennbar
-kein "Impl"-Anhang an implementierenden Klassen mit identischem Namen.
Contra:
-Sucht man in einer API hat man ein Namensraumproblem, eine Persistenzschnittstelle könnte Persitence* oder IPersistence* heißen.
-Ändert man ein Interface in eine abstrakte oder konkrete Klasse führt die Änderung am Namen dazu, dass alle abhängigen Klassen sich ebenfalls ändern müssen.
-Man gibt Implementierungsdetails nach außen weiter.
Ohne I
Pro:
-Leichtes Refactoring in konkrete Klasse möglich ohne den Namen anfassen zu müssen
-Bessere Lesbarkeit (da man nicht dauernd das "I" ablesen muss)
-Sauberere Api (Siehe Gegenbeispiel oben)
Contra:
-Führt teilweise zu "-Impl" Klassenpostfixen
-Man sieht nicht mehr direkt was ein Interface und was eine Klasse ist.
Zu dem -Impl Idiom ist allerdings zu sagen, dass der Fall tatsächlich nur dann eintritt, wenn man eine Klasse benötigt die den identischen Namen wie das Interface bekommen soll.
Der Regelfall dürfte aber eher eine Hierachie sein (Interface List, Klassen LinkedList, AbstractList ....)
Bei einem sauberen Framework sollte der Anwender in der Regel ja nur mit einigen wenigen konkreten Klassen kommunizieren und ansonsten die Interfaces verwenden. Dies wäre ein weiteres Argument die Interfaces "schön" zu benennen und "gebaute" Namen wie das -Impl unter der Haube zu verstecken.
Wie geht ihr denn in euren Projekten damit um?
(Und habe ich irgendwelche Argumente vergessen?)
Gruß