Wie kann man eine Desktop-Anwendung modular gestalten?

7

Wie machen Sie eine Java-Desktop-Anwendung modular? Wie sollten die Module klassifiziert werden?

    
Joset 06.05.2009, 08:28
quelle

7 Antworten

5

Modularität bedeutet als Designziel, dass Sie eine Anwendung haben möchten, die aus einzelnen Teilen (Modulen) besteht, wobei jeder Teil seinen Zuständigkeitsbereich hat und alle Klassen enthält, die mit diesem Bereich in Beziehung stehen (hoch cohesion ), und die Kommunikation zwischen diesen Teilen erfolgt über enge, gut definierte und -dokumentierte Schnittstellen ( lose Kopplung ).

Sie erreichen dies, indem Sie Ihr Design im Voraus planen und diese Planungen anpassen und den Code während der Implementierung ständig neu gestalten.

Es ist nützlich, zwischen technischen Modulen wie GUI, Netzwerkkommunikation oder DB-Zugriff (die oft Schichten bilden, obwohl diese in mehrere Module unterteilt sein können) und Domänenmodulen, die die anwendungsspezifische Logik und die Logik enthalten, zu unterscheiden oft keine Schichten bilden.

    
Michael Borgwardt 06.05.2009, 08:39
quelle
5

Sehen Sie sich OSGi-Technologien an. Jedes Modul Ihrer Anwendung (Bündel genannt) ist ein separates Jar, und OSGi kümmert sich um die Auflösung von Abhängigkeiten und das dynamische Laden von Paketklassenpfaden usw.

Für Desktop-Anwendungen empfehle ich dringend, DA-Launcher von www.dynamicjava.org zu betrachten. Es macht die Bereitstellung Ihrer App SOOO viel einfacher. Sie haben auch ein paar Dinge wie dynamische JPA, die für jede OSGi-App nützlich sind.

    
Cogsy 06.05.2009 08:37
quelle
4

Sie meinen, modular wie Eclipse?

Wenn Sie Ihre Java-Desktop-Anwendung auf Eclipse RCP oder NetBeans RCP basieren, erhalten Sie Modularität "kostenlos" (fast; -))

    
Peter Štibraný 06.05.2009 08:36
quelle
3

Die Antwort auf Ihre Frage hängt wirklich davon ab, was Sie unter "modular" verstanden haben.

Es gibt verschiedene Ebenen von Bedenken, die Sie beachten müssen, wenn Sie Ihre Anwendung modular gestalten.

Zuerst müssen Sie überlegen, ob die von Ihnen angestrebte "Modularität" Architekturmodalität , Bereitstellungszeitmodularität oder Laufzeitmodularität ist.

In jedem Fall impliziert jede aufeinanderfolgende Ebene alle vorherigen Ebenen.

Für den Anfang - um Ihre Anwendung modular zu machen, müssen Sie von der Architektur ausgehen. Trennen Sie Ihre Bedenken in gut definierte saubere Teile, die gut definierte Schnittstellen zur "Außenwelt" haben. Verwendung von guten Entwurfsmustern und Dependency Injection und Design für Unit Testability gehen hier einen langen Weg hin zu einer guten Trennung von Bedenken ist das Fundament des modularen Designs.

Fangen Sie von klein an an, aber denken Sie an das große Bild. Wenn Sie ein bisschen größere Blöcke (oder Module) Ihres Systems entwerfen, stellen Sie sicher, dass sie so wenig überlappende Bereiche wie möglich haben. Jedes Modul sollte fast keine Annahmen über die Umgebung machen, in der es betrieben wird, und nur einem einzelnen Anliegen dienen. Alle Dienste, die es von seinen Peers benötigt, sollten explizit durch externe Initialisierung bereitgestellt werden (vorzugsweise durch Verwendung der Abhängigkeitsinjektion , um die Module in einer funktionierenden App zusammen zu kleben).

Wenn Ihre Architektur modular ist, ist es eine einfache Aufgabe, die Probleme in ihre eigenen Deployment Units aufzuteilen (in Form von Projekten , jars , Bundles <) / em>, Plug-Ins , Erweiterungen oder was auch immer) und Sie können leicht verschiedene Module während der Bereitstellung mischen und abgleichen, um genau die Funktionen zu erhalten, die Sie für das jeweilige Feature benötigen Anwendungsinstanz. Das ist, was ich mit Bereitstellungszeit-Modularität meine.

Die Implementierung der Modularität der Implementierungszeit ist sehr weit fortgeschritten. Dependency Injection Frameworks wie Guice , Frühling framefork und andere.

Runtime-Modularität Die Art und Weise, wie ich das sehe, ähnelt der Modularität von Eclipse- und NetBeans-Plugins oder Mozilla-Erweiterungen, bei denen Sie die Konfiguration und den Satz Ihrer Anwendungsmodule nach der Bereitstellung / Installation ändern können.

Dies impliziert eine Art von Architektur und Infrastruktur, die neue Plugins / Erweiterungen entweder zur Laufzeit der Anwendungsinitialisierung oder dynamisch zur Laufzeit erkennt.

Letztere bedeutet auch, dass alle Ihre Module mit impliziter Annahme erstellt werden müssen, dass jeder Dienst, den ein Modul verwendet, zu jedem Zeitpunkt leicht verschwinden kann und zusätzliche Anstrengungen unternehmen, um die Robustheit des Codes in dieser unbeständigen Welt sicherzustellen. p>     

Roland Tepp 08.05.2009 13:29
quelle
1

Ich würde auch Eclipse RCP empfehlen oder einen Blick auf Netbeans RCP werfen. Die beiden sind sehr ähnlich. Eine Sache, die sie trennt, ist, dass Eclipse RCP native GUI-Bibliotheken anstelle von Swing verwendet, die Netbeans verwendet.

Pro und Contra ist, dass Elcipse vielleicht ein bisschen schneller ist, obwohl Sie mehr auf die Art von Steuerelementen beschränkt sind, die das Betriebssystem bietet. Netbeans verwendet Swing, was den meisten Java-Entwicklern vertrauter ist, und die Fähigkeit, benutzerdefinierte Steuerelemente zu entwickeln, ist endlos.

Es ist eine Weile her, seit ich mit Eclipse RCP gearbeitet habe, daher liegt es wahrscheinlich falsch, benutzerdefinierte Steuerelemente in Eclipse RCP zu entwickeln.

Allen gemeinsam ist, dass die Entwicklung intelligenter und modularer Desktop-Apps Spaß macht und Sie in weniger Zeit professionell aussehende Apps erhalten!

Viel Glück!

    
Riddler777 06.05.2009 09:39
quelle
1

Sie können sich auch das Java Plug-in Framework ansehen,

Ссылка

  

JPF kann die Modularität erheblich verbessern   und Erweiterbarkeit Ihrer Java-Systeme   und Minimierung von Support und Wartung   Kosten.

    
fivemile 06.05.2009 12:07
quelle
0

versuchen Sie es mit Frühling RCP

Ссылка

wenn Sie Ihren GUI-Teil der Anwendung organisieren ...

    
ante.sabo 06.05.2009 12:54
quelle