Ho bisogno di rifattorizzare un'applicazione Java EE perché il design attuale non è molto modulare, in effetti è piuttosto un disastro. C'è una facciata aziendale, ma l'applicazione è stata sviluppata da più persone e quindi il design originale è stato ignorato più volte. L'applicazione è attualmente in esecuzione su tomcat con JSF ma verrà presto trasferita su websphere. Ho già fatto alcune ricerche sui diversi modelli di progettazione per incapsulare la logica aziendale dalla vista e anche come rendere l'applicazione modulare in modo che sia facile aggiungervi più funzionalità perché l'applicazione verrà migliorata in futuro. Ho letto su OSGI ma penso che sarebbe un eccesso.Applicazione java ee modulare
L'applicazione è già suddivisa in livelli. Ma sono molto lontano dalla definizione delle API. Ho già ripulito l'applicazione un po '. Ora tutti i bean accedono alla logica del business attraverso i metodi della facciata aziendale. Ma la facciata aziendale è composta da circa 40 metodi che ritengo non siano molto belli.
3rd party modificare
Per esempio io ho queste classi del modello
ManageLdap
con metodi comecreateAccount
edeleteAccount
GroupManager
che gestisce i gruppi LDAP
Nel facciata commerciale ho un incontro hod createAccount
che
- chiama la classe
ManagerLdap
di creare un account LDAP e - fa un po 'di registrazione e anche
- chiamate
GroupManager
Questo pseudo codice
package Model.ManageLdap
public class ManageLdap
{
public ldapAccount createAccount() { }
public ldapAccount deleteAccount() { }
}
public class GroupManager
{
public bool addAccountToGroup(var account) { }
}
E in la facciata aziendale
package BusinessFacade.Foo
public class SomeFoo
{
public ldapAccount createAccount()
{
var ldapAccount = new ManageLdap.createAccount();
Logger.log("Account created");
var accountWasAdded = GroupManager.addAccountToGroup(ldapAccount);
}
}
Ora, se voglio mettere funzionalità aggiuntive per l'applicazione, come la possibilità di creare un repository subversion per un utente
- devo implementare una classe del modello per creare i pronti contro termine,
- mettere un po ' metodi nella facciata aziendale e
- creare un bean aggiuntivo a cui accedere dalla vista.
Ciò rende la facciata ancora più grande e confusa, ma a parte questo, questo non è quello che chiamo un design modulare.
Quindi, come posso separare la logica di business dalla vista senza avere una facciata aziendale enorme?
Questo è stato discusso molte volte su SO. Dai un'occhiata a [questo] (http://stackoverflow.com/questions/647922/java-application-architecture-guide?rq=1) e [this] (http://stackoverflow.com/questions/286846/describe -the-architecture-you-use-for-java-web-applications? rq = 1) e molti altri. – techuser
Questo potrebbe essere un buon argomento per [enterprise-architect] (http://stackoverflow.com/documentation/enterprise-architect) o [architettura per iniziare] (http://stackoverflow.com/documentation/architecture/7435/) . – surfmuggle
@techuser [Guida all'architettura dell'applicazione Java] (http://stackoverflow.com/questions/647922/) o [Descrivi l'architettura per le applicazioni web java] (http://stackoverflow.com/questions/286846/) sembra essere per ampliare la domanda sulle opzioni. Dopo aver letto [miglior carrello di acquisto aziendale] (http://stackoverflow.com/a/6303154/) ho pensato che guardando il codice open source, ad es. [BroadleafCommerce] (https://github.com/BroadleafCommerce) potrebbe essere un buon inizio per ottenere idee su come organizzare il codice. – surfmuggle