Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich habe derzeit mit einem Projekt in Java (genauer gesagt Maven) zu tun, dass aus drei verschiedenen Maven Projekten besteht, wobei eines davon eine Art Anwendungskern darstellt, eines ist speziell für GUI Seiten (JSF) und das letzte händelt so ein bisschen das Zusammenspiel zwischen GUIs und den Klassen, die direkt hinter diesen GUIs stehen (JSF Beans).
Nun ist es leider so, dass die einzelnen Klassen dieser Projekt sich fast vollständig gegenseitig kennen und somit harte Abhängigkeiten (Projektübergreifend und auch Paketübergreifend) vorhanden sind.
Meine Frage an euch (auh wenn es eine sehr allgemeine Frage ist): Ist diese Art von Projektaufteilung schon im Vorraus irgendwann zum Scheitern verurteilt? Sind solche gegenseitigen "Bekanntschaften" von Klassen aus unterschiedlichen Paketen und Maven Projekten bereits schon eine Art Bad Smell und wenn ja, wie kann man so etwas versuchen zu entkoppeln? Evtl. nur über die Definition von Schnittstellen?
Ich kenne deinen Code nun natürlich nicht - mit Maven hab' ich auch noch nichts zu tun gehabt - aber ich hatte dasselbe Problem bei einem anderen Projekt. Ich denke, deine Idee, mit Interfaces zu arbeiten, ist gut.
1. Frage: ja warum kennen sich denn fast alle Klassen gegenseitig ? Ich meine, warum hast du das überhaupt so gebaut ? Wenn das notwendig ist, wären ganz klar Zuständigkeiten vermischt, die bei einzelnen Klassen klarer aufgeteilt sein sollten.
Also Assoziationen sind standard und ohne gibt es kein größeres Projekt, aber das klingt so, als hättest du eine Art eingetretenen Weg, allen Klassen erstmal alle anderen mitzugeben... muss das sein ?
So viele Möglichkeiten gibt es da nicht, eine wäre z.B. sich auf OSGI zu stützen aber wenn man begriffen hat was dort eigentlich passiert kann man das auch mit Selbstbeherrschung und dependency injection Frameworks hinbekommen.
Die Aufteilung klingt wie eine Schichtenarchitektur. Wenn dessen Prinzipen eingehalten werden ist die Architektur in einem guten Zustand. Es sollten auf keinen Fall eine zyklischen Abhängigkeit zwischen den Projekten vorhanden sein.
Bei Interfaces gibt es verschiedene Strategien. In deinem Fall würde ich vorschlagen, dass alles so bleibt wie es ist. Eine Implementierung == Kein Interface. Wenn das Projekt wächst, kann man die Klasse kopieren und den Namen ändern. Zum Beispiel von "User" in "StandardUser". Die Klasse "User" wird zum neuen Interface. Dann kannst du mit suchen und ersetzen jede Stelle im Quellcode von "new User()" auf "new StandardUser()" ändern. Anschließend erstellst du dir deine neue Klasse "PrivilegedUser" und implementierst diese ...
Wie man das aufteilt ist vom Prinzip her egal. Ich habe auch schon Software gesehen, wo jede Schicht in einem eigenen Projekt abgelegt wurde. Ob das nun ein Package oder Projekt ist spielt i.d.R. kaum eine Rolle. Der Hintergedanke ist, dass man das GUI-Projekt irgendwann wegwerfen könnte, um von SWT auf XYZ zu wechseln. D.h. die anderen Projekte dürfen zwar aktuell auf die Daten des GUI-Projekts zugreifen, aber keine SWT spezifischen Dinge implementieren / nutzen. Wenn du jetzt sagst, dass ihr ein Projekt "speziell für GUI Seiten" habt, dann darf im Anwendungskern keine Abhängigkeit zu JFace bestehen.