La migliore strategia per CRUD multiplo con jsf [chiuso]
Domanda
nella mia azienda stiamo sviluppando un'app simile a ERP usando java e jsf, finora il team di progettazione ha identificato circa 20 entità, ognuna con proprietà diverse, di solito costruiremo 20 pagine di CRUD, c'è di meglio modo di fare questo ?, stiamo usando l'ibernazione come accesso db, quindi abbiamo avuto l'idea di un singolo DAO per questa parte del sistema, hai affrontato una situazione simile? cosa ne pensi?
Soluzione
Potresti considerare la codegenerazione di quei 20 schermi, proprio come fanno le impalcature in Ruby. Per quanto riguarda DAO, è possibile eseguire operazioni CUD su alcuni IBusinessObjectDao generici, lasciando operazioni R specifiche (interrogazione con vari parametri) su implementazioni DAO concrete.
Altri suggerimenti
Dovresti davvero esaminare Seam. Ha una funzione chiamata Seam-Gen che eseguirà il reverse engineering di tutte le pagine CRUD dell'applicazione dal database. È possibile modificare i modelli Seam-Gen (basati su Freemarker) per personalizzare le pagine che verranno generate a proprio piacimento.
Uso il plug-in Eclipse Azzurri Clay per modellare il mio database e generare il DDL. Quindi eseguo Seam-Gen e in pochi secondi hai un'applicazione in esecuzione. È una combinazione molto utile.
So che è tardi, ma penso che il mio piccolo quadro si adatterebbe perfettamente a questa situazione. Scopri http://code.google.com/p/happyfacescrud/ . Ha una ricerca pronta per l'uso, componenti personalizzati che riconoscono il tipo di dati dell'entità, il modello di dati pigro e la flessibilità che i generatori di codice non possono offrire. Ecco un piccolo esempio di come apparirebbe una pagina con dati pigri e ricerca:
<hf:searchPanel columns="4" backingBean="#{accountBean}">
<hf:searchField label="#{messages['account.accountNumber']}" field="accountNumber" />
<hf:searchField label="#{messages['account.active']}" field="active" isMessage="true" />
<hf:searchEntityField label="#{messages['account.customer']}" field="customer" childField="name" popup="true" />
<hf:searchField label="#{messages['account.openingDate']}" field="openingDate" rangeSearch="false" />
</hf:searchPanel>
<hf:dataList label="#{messages['account.search.results']}" backingBean="#{accountBean}">
<hf:column label="#{messages['account.accountNumber']}" field="accountNumber" />
<hf:column label="#{messages['account.active']}" field="active" isMessage="true" />
<hf:column label="#{messages['account.customer']}" field="customer" childField="name" entityView="/pages/customerEdit.xhtml" popupFields="email,phone,address" />
<hf:column label="#{messages['account.openingDate']}" field="openingDate" isDate="true" />
<hf:actionsColumn />
</hf:dataList>