wie sollte man sinnvoll seinen Code aufteilen

jCoder1984

Aktives Mitglied
hallo zusammen

ich bin gerade dabei ein Tool mit Gui, Datenbankanbindung, Import und Export - Funktion zu schreiben. Wie ihr euch sicher denken könnt, wächst das Tool und auch der Code langsam. Ich habe mich zu Begin entschieden mit Maven die einzelen Teile (Importer, Exporter, Datenbank usw) in seperate Module zu verlagern. Nun bin ich mir aber nicht mehr sicher ob dieser Schritt richtig war bzw ob es einen besseren geben würde. Das Tool ist noch nicht fertig und es gäbe auch noch die Möglichkeit alles über den Haufen zu werfen. Daher meine Frage wie ein richtiger Weg wäre und was eure Erfharungen sind ?!

VIelen Dank für eure Unterstützung
 

TomTank

Mitglied
Wenn ich dich richtig verstehe suchst du das folgende:

Hier hat sich das sogenannte SOLID (S.O.L.I.D) - Prinzip von Robert Martin 1995 durchgesetzt.

(S)ingle Responsibility Principle / Prinzip der einfachen Verantwortung

• Jede Klasse sollte eine einzige Verantwortung haben.
• Es sollte nie mehr als einen Grund für eine Klasse geben.
• Klassen sollten klein sein. Nicht mehr als ein Bildschirm voller Code.
• Vermeiden Sie "Gott" -Klassen.
• Teilen Sie große Klassen in kleinere Klassen.

(O)pen/Close Prinzip / Offen/Geschlossen-Prinzip

• Ihre Klassen sollten zur Erweiterung geöffnet sein
• Aber für Änderungen geschlossen
• Sie sollten in der Lage sein, ein Klassenverhalten ohne es erweitern zu müssen zu modifizieren.
• Verwenden Sie private Variablen mit Getter und Setter - nur wenn du sie brauchst
• Verwenden Sie abstrakte Basisklassen

(L)iskov Subsitution Principle / Liskov-Subsidienprinzip

• Von Barbara Liskov, im Jahr 1998
• Objekte in einem Programm könnten durch Instanzen ersetzt werden ihrer Subtypen OHNE Änderung der Korrektheit der Programm.
• Verstöße scheitern oft am "ist ein" Test.
• Ein Quadrat "ist ein" Rechteck
• Allerdings ist ein Rechteck "Ist nicht" ein Quadrat

(I)nterface Segregation Principle / Trennprinzip der Schnittstelle

• Erstellen Sie feinkörnige Schnittstellen, die kundenspezifisch sind
• Viele kundenspezifische Schnittstellen sind besser als eine "allgemeine" Zweck "Schnittstelle
• Halten Sie Ihre Komponenten fokussiert und minimieren Sie sie Abhängigkeiten zwischen ihnen
• Beziehung zum Prinzip der einheitlichen Verantwortung beachten?
• Vermeiden Sie zB allwissende -Schnittstellen

(D)ependency Inversion Principle / Abhängigkeitsinversions-Prinzip
• Abstraktionen sollten nicht von Details abhängen
• Details sollten nicht von Abstraktionen abhängen
• Wichtig, dass Objekte auf höherer und unterer Ebene von derselben abstrakten Interaktion abhängen
 

mrBrown

Super-Moderator
Mitarbeiter
* Ein Quadrat "ist ein" Rechteck
* Allerdings ist ein Rechteck "Ist nicht" ein Quadrat
Wo stammt dies denn her?
Ich wüsste nicht, wo eine Sub-Typ-Beziehung in beide Richtungen ein "ist ein" erfüllt - das wäre dann ja die selbe Klasse.

Daher meine Frage wie ein richtiger Weg wäre und was eure Erfharungen sind ?!
Ganz einfach formuliert: Zusammengehörende Dinge näher zusammen bringen und nicht zusammen gehörendes weiter trennen ;)

Eigene Maven-Module machen dann Sinn, wenn die Dinge weit auseinander liegen und auch im wesentlichen unabhängig sind.
Ich würde besonders dann trennen, wenn es verschiedene Implementationen für einzelne Module geben kann oder wenn es sinnvoll ist, einzelne Dinge getrennt zu entwickeln, u.a. weil man dann getrennte Versionssprünge machen kann.
 

TomTank

Mitglied
Hi MrBrown,

dieses stammt aus Amerika, wie bereits geschrieben von Robert Martin 1995. Kurzversion ist auch im deutschen Wikipedia beschrieben. (Persönliche Meinung: Ich glaub, weil in Deutschland sowieso keine ernsthafte Softwareentwicklung betrieben wird, ist es wohl auf der deutschen Seite auch nur sehr rudimentär beschrieben). Auf der englischen Wikipedia https://en.wikipedia.org/wiki/SOLID ist es etwas besser beschrieben.

Zu
Wo stammt dies denn her?
Ich wüsste nicht, wo eine Sub-Typ-Beziehung in beide Richtungen ein "ist ein" erfüllt - das wäre dann ja die selbe Klasse.
s. https://en.wikipedia.org/wiki/Liskov_substitution_principle
 
Zuletzt bearbeitet:

httpdigest

Top Contributor
(L)iskov Subsitution Principle / Liskov-Subsidienprinzip
Ein Quadrat "ist ein" Rechteck
• Allerdings ist ein Rechteck "Ist nicht" ein Quadrat

Das Liskov Substitution Principle wird von Uncle Bob in seinen Vorträgen gerade dazu verwendet, zu zeigen, dass ein Quadrat eben KEIN Rechteck ist (was man aber leider intuitiverweise annehmen würde), weil das gerade gegen das beobachtbare Verhalten (bzw. die beobachtbare Eigenschaft) verstößt, dass man width und height unabhängig voneinander an einem Rechteck setzen könnte. Beispiel:
Java:
Rechteck r = new Quadrat();
// ...
// weiter unten Code, der nur Rechteck verwendet:
r.setWidth(20);
r.setHeight(30); // <- was nun?! Exception oder automatisch width auch auf 30 setzen, oder was?

Das LSP bezieht sich gerade eben auf die beweisbaren/beobachtbaren Eigenschaften/Verhalten einer Klasse und dieses Verhalten darf von Unterklassen NICHT verletzt/verändert werden, weil sie sonst nicht mehr semantische (im Gegenzug zu syntaktischen) Subtypen wären.

Und dieses Problem ist tatsächlich auf der Deutschen Wikipedia Seite sehr viel besser beschrieben, bzw. überhaupt erst erwähnt: https://de.wikipedia.org/wiki/Liskovsches_Substitutionsprinzip#Das_Problem
 

mrBrown

Super-Moderator
Mitarbeiter
dieses stammt aus Amerika, wie bereits geschrieben von Robert Martin 1995. Kurzversion ist auch im deutschen Wikipedia beschrieben. (Persönliche Meinung: Ich glaub, weil in Deutschland sowieso keine ernsthafte Softwareentwicklung betrieben wird, ist es wohl auf der deutschen Seite auch nur sehr rudimentär beschrieben). Auf der englischen Wikipedia https://en.wikipedia.org/wiki/SOLID ist es etwas besser beschrieben.

Zu
s. https://en.wikipedia.org/wiki/Liskov_substitution_principle
Ich meinte nur die beiden von mir zitierte Beispiel. Das kommt eben ziemlich sicher so nicht von Uncle Bob, sondern ist ein ziemlich gutes Beispiel, wie LSP gebrochen wird ;)

Auf den englischen Wikipedia-Seiten wird es, wie schon erwähnt, auch erst gar nicht erwähnt, sondern nur auf der (deutlich besseren) deutschen - da aber auch als Beispiel für Verletzung von LSP. Deshalb interessierte mich, wo dieses eine Beispiel her kommt.

Das "Allerdings" darin hab ich möglicherweise auch falsch verstanden...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zrebna Wieso sollte man Null-Prüfungen nicht mit Optional-Objekten nutzen? Allgemeine Java-Themen 13
MiMa Was sollte man ins JavaDoc implementieren?? Allgemeine Java-Themen 17
MiMa Wie sollte am besten ein Datum gespeichert werden? Allgemeine Java-Themen 8
R In der Ausgabe sollte anstelle des obersten Sterns ein "+" stehen nur scheitere ich bei der Implementierung Allgemeine Java-Themen 9
T Multithreading: Wie viele Threads sollte ich erstellen? Allgemeine Java-Themen 12
R Input/Output java.io.EOFException, obwohl sie abgefangen sein sollte? Allgemeine Java-Themen 3
DaniSahne96 Threads Code funktioniert nicht wie er sollte Allgemeine Java-Themen 9
D Wann sollte ich statische Methoden und Variablen benutzen? Allgemeine Java-Themen 44
R Syntax Error, der keiner sein sollte Allgemeine Java-Themen 12
V Fortbildungen oder Zertifikate in Java die man haben sollte? Allgemeine Java-Themen 17
André B. Was sollte eine Template Engine können? Allgemeine Java-Themen 3
A Warum gibts die Main und was sollte drin stehen? Allgemeine Java-Themen 31
B Was sollte ich benutzen Vektor oder ArrayList? Allgemeine Java-Themen 5
A Weshalb man Parameter auf Gültigkeit prüfen sollte Allgemeine Java-Themen 6
D NullPointerException wo keine sein sollte. Allgemeine Java-Themen 2
8u3631984 Bilder in Datenbank speichern - sinnvoll Allgemeine Java-Themen 5
G Methoden für die Zukunft sinnvoll? Allgemeine Java-Themen 4
W Wieviele Threads sind sinnvoll? Allgemeine Java-Themen 8
I Laden von Informationen aus Dateien: Austauschbarkeit: 2 Dateien sinnvoll? Allgemeine Java-Themen 2
M Welche Exceptionbehandlung ist sinnvoll? Allgemeine Java-Themen 3
perlenfischer1984 Wann ist ein Parameter Check sinnvoll Allgemeine Java-Themen 7
F Enums als innere Klasse sinnvoll? Allgemeine Java-Themen 3
C Best Practice [Arrays] Wie sinnvoll prüfen, ob Array primitive Datentypen enthält? Allgemeine Java-Themen 6
D Fehlgeschlagene Logins zählen... Was ist sinnvoll? Allgemeine Java-Themen 2
W JavaDoc Runtime-Exceptions: Wie sinnvoll anzeigen? Allgemeine Java-Themen 14
G Interface Laden der Konfiguration über Interfaces sinnvoll? Allgemeine Java-Themen 28
P Eclipse Java RCP mit Eclipse e4 - sinnvoll? Allgemeine Java-Themen 3
B Datentypen JMF: Player LinkedList sinnvoll? ca 30 kurze Sounddateien Allgemeine Java-Themen 3
S [THREADS] Thread sinnvoll beenden Allgemeine Java-Themen 2
S Welche Datenstruktur für verschiedene Sprachen sinnvoll? Allgemeine Java-Themen 2
O ist tiefes Kopieren sinnvoll? Allgemeine Java-Themen 14
M Geschützte Systemdateien sinnvoll umgehen bei listFiles() Allgemeine Java-Themen 7
A [gelöst] Dynamischen Webseitentest automatisieren mit Java sinnvoll? Allgemeine Java-Themen 6
V Empfangene Daten sinnvoll Puffern Allgemeine Java-Themen 3
H Extra-Thread sinnvoll für XML-Datei laden? Allgemeine Java-Themen 4
S Textfeld Parser sinnvoll? Allgemeine Java-Themen 3
M Wann ist MVC sinnvoll? Allgemeine Java-Themen 14
G Strings die Zahlen enthalten sinnvoll sortieren (A2 < A10 Allgemeine Java-Themen 4
T "Programming against the interface" sinnvoll? Allgemeine Java-Themen 18
F Viele generische Parameter sinnvoll? oder besser casten? Allgemeine Java-Themen 10
M wie sinnvoll parsen ? Allgemeine Java-Themen 4
M Wie parst man sinnvoll? Allgemeine Java-Themen 7
A Als FINAL deklarieren -> sinnvoll? Allgemeine Java-Themen 16
K Regex Versucher 2 *Update - sinnvoll und schön* :) Allgemeine Java-Themen 6
Redfrettchen Rückgabe nicht sinnvoll: Exception oder null zurück? Allgemeine Java-Themen 9
G klassendesign. aber wie (sinnvoll)? Allgemeine Java-Themen 8
I Buchstabe durch seinen Nachfolger ersetzen Allgemeine Java-Themen 29
T Objekt kontaktiert seinen "erzeuger" Allgemeine Java-Themen 5
T JXPanel mit seinen Komponenten auf PDF mit iText ausgeben Allgemeine Java-Themen 15
G hat jeder thread seinen eigenen stacktrace? Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben