Hallo liebe Entwickler Gemeinde,
ich programmiere seit einigen Jahren in Java und ich schlage mich eigentlich von Anfang an bis heute mit dem Problem herum, dass früher oder später immer mehr Abhängigkeiten zwischen meinen Klassen bestehen, die ich nicht lösen kann und ich somit keine modulare Software mehr habe.
Natürlich arbeite ich nach dem "DRY" Prinzip, versuche sinnvolle Klassenhierarchien aufzubauen, organisiere zusammengehörende Klassen in entsprechenden packages, definiere geeignete interfaces, um Teilfunktionalität dort zur Verfügung zu stellen, wo sie gebraucht wird. Bis zu einem gewissen Punkt gelingt es mir auch ganz gut, meine Programme "schön" aufzubauen. Oft komme ich dann aber in Situationen, wo eine Instanz einer ich nenne es mal "Hauptklasse" existiert, die eine Menge anderer Instanzen referenziert, meist auch noch mit Backreferenz, da ich von den referenzierten Instanzen aus auch die Funktionalität der "Hauptklasse" benötige.
Ich finde das äußerst unschön. Zum ersten habe ich dadurch immer aufgeblähtere Konstruktoren mit zig Parametern, zum zweiten eine sehr hohe Zahl an Instanzvariablen und zum dritten eine unerfreulich enge Verzahnung von Komponenten - all dies erschwert Wartbarkeit und Pflege.
Ich bin ratlos, wie man diese Problematik am geschicktesten löst. Selbstverständlich ist sowas sicherlich sehr anwendungsabhängig, aber das ist mir jetzt schon häufiger in verschiedenen Anwendungen passiert, z.B. letztens bei einer GUI:
ich habe eine Darstellungskomponente, ein "MainView extends JPanel", die eine Vielzahl von anderen Komponenten darstellen und verwalten soll, in verschiedene Zustände versetzt werden kann und je nach Zustand auf Nutzereingaben anders reagiert. Mit der Zeit füllte sich "MainView" mit zahlreichen Instanzvariablen: Component Listen, custom Filechoosern, Dialogfenstern, Key Mappings und MouseListeners. Für die Ereignisbehandlung brauchte ich Zugriff auf "MainView", da sich Komponenten gegenseitig beeinflussen können - ich habe es also so realisiert, dass diese über "MainView" miteinander kommunizieren.
Vielleicht habt ihr ja ganz allgemeine Tipps, Anregungen oder "best practices", wie man Modularität im Entwicklungsprozess gewährleistet und derlei Fallstricke vermeidet.
Grüße und danke fürs Lesen!
ich programmiere seit einigen Jahren in Java und ich schlage mich eigentlich von Anfang an bis heute mit dem Problem herum, dass früher oder später immer mehr Abhängigkeiten zwischen meinen Klassen bestehen, die ich nicht lösen kann und ich somit keine modulare Software mehr habe.
Natürlich arbeite ich nach dem "DRY" Prinzip, versuche sinnvolle Klassenhierarchien aufzubauen, organisiere zusammengehörende Klassen in entsprechenden packages, definiere geeignete interfaces, um Teilfunktionalität dort zur Verfügung zu stellen, wo sie gebraucht wird. Bis zu einem gewissen Punkt gelingt es mir auch ganz gut, meine Programme "schön" aufzubauen. Oft komme ich dann aber in Situationen, wo eine Instanz einer ich nenne es mal "Hauptklasse" existiert, die eine Menge anderer Instanzen referenziert, meist auch noch mit Backreferenz, da ich von den referenzierten Instanzen aus auch die Funktionalität der "Hauptklasse" benötige.
Ich finde das äußerst unschön. Zum ersten habe ich dadurch immer aufgeblähtere Konstruktoren mit zig Parametern, zum zweiten eine sehr hohe Zahl an Instanzvariablen und zum dritten eine unerfreulich enge Verzahnung von Komponenten - all dies erschwert Wartbarkeit und Pflege.
Ich bin ratlos, wie man diese Problematik am geschicktesten löst. Selbstverständlich ist sowas sicherlich sehr anwendungsabhängig, aber das ist mir jetzt schon häufiger in verschiedenen Anwendungen passiert, z.B. letztens bei einer GUI:
ich habe eine Darstellungskomponente, ein "MainView extends JPanel", die eine Vielzahl von anderen Komponenten darstellen und verwalten soll, in verschiedene Zustände versetzt werden kann und je nach Zustand auf Nutzereingaben anders reagiert. Mit der Zeit füllte sich "MainView" mit zahlreichen Instanzvariablen: Component Listen, custom Filechoosern, Dialogfenstern, Key Mappings und MouseListeners. Für die Ereignisbehandlung brauchte ich Zugriff auf "MainView", da sich Komponenten gegenseitig beeinflussen können - ich habe es also so realisiert, dass diese über "MainView" miteinander kommunizieren.
Vielleicht habt ihr ja ganz allgemeine Tipps, Anregungen oder "best practices", wie man Modularität im Entwicklungsprozess gewährleistet und derlei Fallstricke vermeidet.
Grüße und danke fürs Lesen!