Domanda

Come si fa a modulare un'applicazione desktop Java? Come devono essere classificati i moduli?

È stato utile?

Soluzione

Come obiettivo di progettazione, la modularità significa che si desidera avere un'applicazione composta da parti separate (moduli) in cui ogni parte ha la propria area di responsabilità e contiene tutte le classi interessate a quell'area (alta coesione ) e la comunicazione tra queste parti avviene attraverso interfacce strette, ben definite e documentate ( accoppiamento libero ).

Puoi raggiungere questo obiettivo pianificando in anticipo il tuo progetto e modificando i piani e rifattorizzando costantemente il codice durante l'implementazione.

È utile fare la differenza tra moduli tecnici come GUI, comunicazione di rete o accesso al DB (che spesso formano livelli, sebbene questi possano essere suddivisi in più moduli) e moduli di dominio che contengono la logica specifica dell'applicazione e spesso non formano livelli.

Altri suggerimenti

Dai un'occhiata alle tecnologie OSGi. Ogni modulo della tua applicazione (chiamato bundle) è un jar separato e OSGi si occupa della risoluzione delle dipendenze e del caricamento dinamico dei percorsi di classe bundle ecc.

Per le applicazioni desktop, consiglio vivamente di consultare DA-Launcher da www.dynamicjava.org . Rende la distribuzione della tua app SOOO molto più semplice. Hanno anche alcune cose come JPA dinamico che sono utili per qualsiasi app OSGi.

Intendi modulare come Eclipse?

Se basi l'applicazione desktop java su Eclipse RCP o NetBeans RCP, otterrai la modularità "gratis" (quasi ;-))

La risposta alla tua domanda dipende davvero da cosa intendevi con "modulare" .

Esistono diversi livelli di preoccupazione che è necessario considerare per rendere modulare l'applicazione.

Prima di tutto devi considerare se la "modularità" si cerca modularità architettonica , modularità dei tempi di implementazione o modularità di runtime .

In ogni caso ogni livello consecutivo implica tutti i livelli precedenti.

Tanto per cominciare: per rendere la tua applicazione modulare devi partire dall'architettura. Separa le tue preoccupazioni in parti ben definite e pulite che hanno interfacce ben definite con il "mondo esterno". Uso di buoni modelli di progettazione e iniezione delle dipendenze e progettazione di unit testability fa molto per raggiungere una buona separazione delle preoccupazioni che è il fondamento del design modulare.

Inizia dal piccolo ma tieni a mente l'immagine grande. Quando si progettano blocchi (o moduli) un po 'più grandi del sistema, assicurarsi che abbiano il minor numero di aree sovrapposte possibili. Ogni modulo non dovrebbe fare quasi ipotesi sull'ambiente in cui è in esecuzione e servire solo una singola preoccupazione. Tutti i servizi richiesti dai suoi colleghi devono essere esplicitamente forniti dall'inizializzazione esterna (preferibilmente utilizzando iniezione di dipendenza per incollare i moduli in un'app funzionante).

Se la tua architettura è modulare, è facile separare le preoccupazioni nelle proprie unità di distribuzione (sotto forma di progetti , barattoli , bundle , plug-in , estensioni o altro) e puoi iniziare a mescolare e abbinare facilmente vari moduli durante l'implementazione per ottenere il set di funzionalità esatto necessario per il particolare istanza dell'applicazione. Questo è ciò che intendo per modularità dei tempi di implementazione .

Un passo avanti verso l'abilitazione della modularità dei tempi di implementazione sono Iniezioni di dipendenza come Guice , Spring framefork e altri.

Modularità di runtime il modo in cui lo vedo è qualcosa di simile alla modularità fornita dai plugin Eclipse e NetBeans o dalle estensioni Mozilla in cui è possibile modificare la configurazione e il set dei moduli dell'applicazione dopo l'implementazione / installazione.

Ciò implica una sorta di architettura e infrastruttura che riconosce i nuovi plug-in / estensioni al momento dell'inizializzazione dell'applicazione o dinamicamente in fase di esecuzione.

Ultimi significa anche che tutti i tuoi moduli devono essere costruiti con il presupposto implicito che qualsiasi servizio che un modulo utilizza può facilmente sparire in qualsiasi momento, facendo lo sforzo supplementare per garantire la solidità del codice in esecuzione in questo mondo instabile.

Vorrei anche raccomandare Eclipse RCP o dare un'occhiata a Netbeans RCP. I due sono molto simili. Una cosa che li separa è che Eclipse RCP utilizza librerie GUI native invece di Swing che Netbeans utilizza.

Pro e contro è che Elcipse potrebbe essere un po 'più veloce anche se sei più limitato al tipo di controlli offerti dal sistema operativo. Netbeans utilizza Swing che potrebbe essere più familiare alla maggior parte degli sviluppatori Java e la possibilità di sviluppare controlli personalizzati è infinita.

È da un po 'che non lavoro con Eclipse RCP, quindi probabilmente sbaglio sullo sviluppo di controlli personalizzati in Eclipse RCP.

La cosa che hanno in comune è che lo sviluppo di app desktop intelligenti e modulari è divertente e ottieni app dall'aspetto professionale in molto meno tempo!

Buona fortuna!

Puoi anche dare un'occhiata al Java Plug-in Framework,

http://jpf.sourceforge.net/

  

JPF può migliorare notevolmente la modularità   ed estensibilità dei tuoi sistemi Java   e minimizzare il supporto e la manutenzione   i costi.

provare con RCP di primavera

http://www.springsource.org/spring-rcp

quando organizzi la tua parte della GUI dell'applicazione ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top