Come progettare il meccanismo di estensione per l'app java

3

Ho un'applicazione in cui ho un set di funzionalità di base.

  1. L'applicazione stessa deve funzionare in modalità solo core.

  2. Vorrei anche rendere l'applicazione estendibile in modo tale che, quando alcuni file jar / plugin esistono nel percorso classpath / installazione, sarebbero disponibili funzionalità aggiuntive, le cose sarebbero semplicemente lì. Questo è FACOLTATIVO.

Il modo in cui lo farei è usare lo schema di fabbrica con una modifica. Nel pacchetto principale, ho un punto di estensione (implementato da una variabile statica pubblica o un singleton o un altro modello di punto di estensione dal mio framework - Eclipse RCP). I jar / plug-in dell'estensione ottengono questo punto di estensione e registrano l'oggetto factory su questo punto di estensione. (Questo è il modo migliore con il meccanismo di attivazione di plug-in / funzionalità RCP, oppure può essere qualsiasi cosa che causi un carico della classe di estensione jar / plug-in di fabbrica)

Quando l'applicazione è in esecuzione, il core factory produrrebbe oggetti dal factory di estensione se uno è stato registrato o altrimenti usa la sua core factory. Ecco come l'applicazione passa dalla modalità principale alla modalità estensione se esiste un jar estensione.

Mi chiedo se questo è un modo decente di fare ciò che volevo fare o questo è solo un hack, anti-pattern, ecc ... Per favore, proponi una soluzione migliore se puoi. Grazie.

    
posta InformedA 02.07.2014 - 19:50
fonte

1 risposta

2

Java ha un meccanismo standard proprio per questo, i fornitori di servizi java, pensa nel modo in cui usi un plugin JDBC, metti il driver JDBC nel tuo classpath e la tua applicazione ora può connettersi a questo fornitore di database concreto (oracle, mysql ). Infatti questo è usato in molti standard java che definiscono un'interfaccia e consentono implementazioni differenti.

Non è molto diverso dall'implementazione, ma è uno standard e ci sono alcune classi nel jdk per renderlo facile da implementare, per esempio dare un'occhiata a questo: link

    
risposta data 26.07.2014 - 00:03
fonte