Checkstyle: Lösungsvorschläge für Design for Extension

Jay_030

Aktives Mitglied
Ich wollte nicht Leichenflederer spielen und in diesen Thread schreiben. Daher ein neues Thema dazu. Wenn die Moderatoren das anders sehen, kann man die Threads ja immer noch mergen. (Hoffe ich. ^^)

Ich nutze seit kurzem Checkstyle über Sonar und da ist mir diese Meldung aufgefallen: Design for Extension. Kurzes Googeln hat mir gezeigt, dass ich nicht der Einzige bin, der darüber stutzt. Wie aus diesem Thread ersichtlich ist, arbeite ich neuerdings mit dem DI-Framework Guice. Das heißt (grob vereinfacht für alle Nicht-DIler), ich habe eine ganze Reihe von Interfaces und dahinter jeweils eine Implementierung. Bei den Methoden der Impl-Klassen zeigt mir Checkstyle dann diese Meldung an. Auch bei den equals-, hashCode- und toString-Methoden.

Eine Lösung wäre, die Impl-Klassen zusätzlich final zu deklarieren, um nicht bei jeder Methode final dranklatschen zu müssen. Die Idee hinter dieser Regel ist ja nicht schlecht, aber irgendwie missfällt mir das vom "Codeaussehen" (was wahrscheinlich subjektiver Quatsch ist).

Wie geht ihr mit dieser Regel von Checkstyle um? Habt ihr sie ausgeschaltet oder ignoriert ihr sie einfach?

Was mich besonders interessiert: Ist es üblich, wenn es nur eine Implementierung für ein Interface gibt, diese als final zu deklarieren?
 
Zuletzt bearbeitet:
G

Gast2

Gast
Grundsaetzlich definiere ich alle Klassen als final wenn sie nicht explizit fuer eine Vererbungshierachie designed sind. Das ist soweit auch best practice, siehe z.B. Effective Java von J. Bloch

Oder hab ich dein Porblem jetzt falsch verstanden?
 

Jay_030

Aktives Mitglied
Grundsaetzlich definiere ich alle Klassen als final wenn sie nicht explizit fuer eine Vererbungshierachie designed sind. Das ist soweit auch best practice, siehe z.B. Effective Java von J. Bloch

Oder hab ich dein Porblem jetzt falsch verstanden?
Ja genau. Bisher habe ich nur Helper-/Utility-Klassen als final deklariert. Sollte wohl doch nochmal in Effective Java reinschauen. Die Stelle habe ich nicht mehr in Erinnerung. :) Best Practice geht über persönlichen Geschmack imho. Muss ich mich halt umgewöhnen. Von der Logik macht das final da ja auch Sinn.
 

tfa

Top Contributor
Wie geht ihr mit dieser Regel von Checkstyle um? Habt ihr sie ausgeschaltet oder ignoriert ihr sie einfach?
Ausschalten. Am besten Checkstyle ganz abschaffen. Das ist reine Zeitverschwendung. Nicht-wertschöpfendes Mikromanagement.

Die meisten Checks prüfen auf bloße Trivialitäten. Was ist schlimm daran, wenn eine Quelltextdatei nicht mit einem Zeilenvorschub endet oder Tabs enthält? Oder wenn man Leerzeichen vor oder hinter Typecasts oder Operatoren vergessen hat; nach dem letzten Arrayelement ein Komma kommt? Wird dadurch die Software besser?

Diese Stilfragen (Checkstyle eben) kann am einfachsten erschlagen, indem man in der IDE einheitliche Formatierungsrichtlinien festlegt und bei jedem Speichern ein Autoformat ausführt. Viele einfache Prüfungen kann mittlerweile auch Eclipse selbst erledigen.

Um Codemetriken zu untersuchen gibt es spezialisierte Tools, die man hin und wieder mal laufen lassen kann, wenn glaubt, damit Probleme zu haben. Aber ein routinemäßigen Test? Hier sollte es auch nur Richtilinien geben und keine harten Grenzen. Was, wenn eine (wunderbar geschriebene) Methode statt der erlaubten dreißig 31 Zeilen hat? Die Methode auseinander reißen oder das Limit erhöhen?

Die halbwegs sinnvollen Checks (und vieles mehr) leisten auch andere statische Analysetools wie Findbugs. Findbugs nimmt nicht die Quelltexte auseinander sondern arbeitet direkt mit Class-Files. Und was daran an Bugs automatisch gefunden wird, ist echt faszinierend. Wer es noch nicht kennt, sollte es unbedingt ausprobieren. Dann wandert Checkstyle schnell in die Tonne.
 

stareagle

Mitglied
Hallo,

meiner Meinung - andere mögen anderer Meinung sein - ist Checkstyle ein wenig zu kleinkariert. Persönlich verwende ich PMD und FindBugs. Mit den beiden Tools sind meiner Meinung nach die meisten möglichen Problemstellen gut abgedeckt.

Gruß

Stareagle
 
G

Gast2

Gast
Ausschalten. Am besten Checkstyle ganz abschaffen. Das ist reine Zeitverschwendung. Nicht-wertschöpfendes Mikromanagement.
[...]
Diese Stilfragen (Checkstyle eben) kann am einfachsten erschlagen, indem man in der IDE einheitliche Formatierungsrichtlinien festlegt und bei jedem Speichern ein Autoformat ausführt. Viele einfache Prüfungen kann mittlerweile auch Eclipse selbst erledigen.
[...]

Das sehe ich doch anders. An fuer sich hast du Recht. Solange du dich darauf verlassen kannst das da alle beteiligten Entwickler mitspielen. Was grade bei groeseren Firmen, Outsourcing oder Firmenuebergreifenden Projekten nicht immer gegeben ist.

Wenn man Checkstyle seinen Coding Conventions entsprechend angepasst hat und in einem Pre-Commit Trigger verwendet spart es echt eine Menge Aerger. Dann kommt halt nur das ins Repsoitory was den Coding Conventions entspricht. Das hat wenig mit Findbugs zu tun. Hier geht es einzig und allein um den wie du schon schoen gehighlighted hast - den Stil.

Was machst du wenn 3 Firmen mit 3 IDEs und je 20 Entwicklern an einem Projekt arbeiten. Die dann ale ihre eigenen Sets an Formatierungsrichtlinien haben? Das kannst du nur zentral glatt ziehen und b ei sowas ist Checkstyle sehr hilfreich.
 

tfa

Top Contributor
Wenn man Checkstyle seinen Coding Conventions entsprechend angepasst hat und in einem Pre-Commit Trigger verwendet spart es echt eine Menge Aerger. Dann kommt halt nur das ins Repsoitory was den Coding Conventions entspricht.

Aber wie weit soll das führen? Wird hier nur auf einfache Formatierungsregeln geprüft (also sind die Leerzeichen/Klammern an der richtigen Stelle)? Das kann man eh nur durch Autoformatter lösen, warum sollte man das nochmal prüfen? Wenn sich jemand nicht dran hält, fällt das früh genug auf (spätestens beim Einchecken ins Repository), und man kann das Problem mit dem betreffenden individuell lösen.

Oder hast du auch tiefer gehende Checks? Was soll dann also passieren, wenn eine Methode, die ansich ideal geschrieben ist, genau eine Zeile zu lang ist? Dann darf ich die nicht einchecken! Soll ich sie nur deswegen in zwei Methoden aufspalten und den Code dadurch weiter aufzublähen und ggf. unleserlicher und schwerer wartbar zu machen?
Vielleicht braucht eine Methode mal 6 Parameter, statt der maximal erlaubten 5. Wenn das nicht überhand nimmt ist auch nichts dagegen einzuwenden.

Oder das Beispiel des TS. Ich darf in einer erweiterbaren Basisklasse kein toString() implementieren, weil sonst der "Design for Extension"-Checker meckert. Das sollte doch lieber der Entwickler entscheiden und nicht ein dummes Quelltextanalysetool.

Design- und Programmierregeln sind gut. Aber man darf sie nicht zum Gesetz erheben. Und genau das tust du, wenn du Checkstyle zum Torwächter über dein Repository machst. Es gibt immer wieder Ausnahmesituationen, wo man die Regeln übertreten können muss.

Was machst du wenn 3 Firmen mit 3 IDEs und je 20 Entwicklern an einem Projekt arbeiten. Die dann ale ihre eigenen Sets an Formatierungsrichtlinien haben?
Dann hat man sicherlich ganz andere Probleme als sie sich mit Checkstyle beheben ließen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Plugins entwickeln für ein CMS welches unter der GPL V3 steht Softwareentwicklung 1
I Datenbankschema für Versionierung der Tabellen Softwareentwicklung 9
R Datenstruktur für einen rätselhaften Namen Softwareentwicklung 10
Rahim Post Conditions für InsertAt und remove Softwareentwicklung 1
P Thema für meine Projektarbeit die etwas mit Webautomatisierung zu tuen haben soll? Softwareentwicklung 1
H Entwurfsmuster für den Client der Rest API Softwareentwicklung 0
D Welche Technologien für App und web? Softwareentwicklung 3
Thallius oAuth2 und ClientCredentials für API sinnvoll? Softwareentwicklung 3
S Welche Programmiersprache für eine 3D-Software? Softwareentwicklung 6
N Technologie Grundlagen für eine "App" Softwareentwicklung 12
OnDemand Welches Tool für Planung Softwareentwicklung 2
B Sprache für 3D Physics Engine? Softwareentwicklung 3
K Maßnahmen für Softwarequalität Softwareentwicklung 2
N Graphenalgorithmen: Best Practice für Knoten-/Kanten-Attribute Softwareentwicklung 5
Z Analysemuster - Welches nehme ich für diese Problem? Softwareentwicklung 0
L Softwareentwicklung für Embedded Systems Softwareentwicklung 1
T Gibt es eine Software die Texte für Skype automartisch (automassage) sendet ? Softwareentwicklung 4
R Online-Plattform für Essensbestellungen mit der momentanen Bestellverfolgung Softwareentwicklung 1
S Suche: (Versionierungs)Tool für Klassenaustausch mit Kollegen, die auch an dem Projekt arbeiten Softwareentwicklung 5
R UML-Diagramm für mehrere JFrames Softwareentwicklung 0
S Algorithmus für perfekte Kombination Softwareentwicklung 2
U Individualsoftware - eine Gefahr für Kunden oder die günstigere Alternative? Softwareentwicklung 7
J Grafiken für eigene Apps ? Softwareentwicklung 2
V [Klassendesgin] Verhalten von Subklassen für Aufgabenteilung benutzen. Softwareentwicklung 2
KranzKrone Architektur für einfaches Gui Programm Softwareentwicklung 6
R freie Engine für IOS, Android, Blackberry Softwareentwicklung 11
T SMART für USB Sticks? Softwareentwicklung 9
BinaryLogic Software für Projektplanung und -Entwicklung Softwareentwicklung 19
A MVC & getter für GUI Komponenten Softwareentwicklung 5
S Abstractes/Schnittstellen für Objekte Softwareentwicklung 8
fastjack Welches Tool für Agile Softwareentwicklung? Softwareentwicklung 6
C Wiki für ein Uni - High Level Design Softwareentwicklung 5
S Design Pattern für zwei abhängige Klassen Softwareentwicklung 8
Mike90 Lizenz für eigene software Softwareentwicklung 9
V Welche Programmisprache für den Desktop? Softwareentwicklung 17
V Zeitplanung für JUnit-Tests? Softwareentwicklung 9
B Allgemeine Fragen für eigenes Projekt Softwareentwicklung 4
P Sensibilität für Codequalität fördern Softwareentwicklung 17
B Empfehlung für Datenbankschulung? Softwareentwicklung 2
D Beispiele für Patterns Softwareentwicklung 3
K Aufwandsabschätzung für User Stories Softwareentwicklung 8
Torres SDK für automatische Bildkorrektur Softwareentwicklung 3
martin82 Tool für IT-Requests Softwareentwicklung 5
Z Welche Software für Web Anwendungen/Spiel Softwareentwicklung 3
Quaxli Suche Tutorial für Jasper Report - speziell iReport Softwareentwicklung 8
Outsourcer Webservertechnologie für Objekterkennung Softwareentwicklung 7
Landei SSH für VMware GSX mit Windows? Softwareentwicklung 2
ARadauer jetzt wirds zeit für Delphi Softwareentwicklung 6
X JavaScript Plugin für Eclipse Softwareentwicklung 3
sparrow Welche Lizenz für ein offenes Programm Softwareentwicklung 2
ARadauer Code Konvention für Datenbanken Softwareentwicklung 5
G Suche Programm für Masken Design für Pflichtenheft Softwareentwicklung 5
S Wie weiter gehen und tutorial für MVC Softwareentwicklung 20
G Pattern für Datenbank Anwendung Softwareentwicklung 22
m@nu Anti-Spam-System für Blog bauen Softwareentwicklung 3
B Was ist besser für Grafiken? Java oder C#? Softwareentwicklung 9
N Brauche Hilfe für Onlineshop Aufgabe für OOP Grundlagen Softwareentwicklung 4
N Für und Wieder von Java und .NET (primär C#) | Performance Softwareentwicklung 6
G 1 Benutzeroberfläche für 3 einzelne Programme! Softwareentwicklung 9
D Programme für UML Softwareentwicklung 3
A Was ist die richtige Lizenz für mich? Softwareentwicklung 2
R Tool für Anforderungsermittlung, Bugtracking und Test Softwareentwicklung 4
V Antwort bewerten (Nur etwas für Experten!) Softwareentwicklung 15
D cheat für ein spiel fixen Softwareentwicklung 19
F IDE für VB Softwareentwicklung 4
K Design Pattern für einen simple Rechenmaschine Softwareentwicklung 18
S Beispiel für MVC gesucht Softwareentwicklung 53
F Kleines Programm für Windows Softwareentwicklung 2
K Buch oder Online-Tutorium für Programmentwicklung (Anfänge) Softwareentwicklung 5
G Bitte Hilfe für mySQL in einem Query Softwareentwicklung 7
J Beispiel für Besuchermuster Softwareentwicklung 6
M Übersetzer für Programmhilfe gesucht Softwareentwicklung 2
M Disclaimer für eigene Programme? Softwareentwicklung 3
U Geeignete Plattform für Projekt (JSP, PHP, Java-Anwendung) Softwareentwicklung 7
S Open Source Software für UML Softwareentwicklung 8
R Ein Thread für eine Methode Softwareentwicklung 2
S Hilfe für anfänger Softwareentwicklung 7
I regualar expression für Konstruktoren Softwareentwicklung 4
T Brauche für meinen Java-Code dringend Hilfe Softwareentwicklung 4
B Wo bekommt man fertige Java-Programme (z.B. für Lsg LGS) Softwareentwicklung 3

Ähnliche Java Themen

Neue Themen


Oben