PDA

View Full Version : [MVC] perche? (e soprattutto come separare i layers) - lunghetto


zakmckraken
12-05-2009, 08:14
Ciao a tutti, premetto che ho ripreso Java dopo anni di C/C++ embedded e C# e che ci lavoravo la bellezza di 6 anni fa, quindi -chiaramente- le mie opinioni sono totalmente opinabili e sicuramente non corrispondenti alla realta', proprio da questo ho deciso di scrivere questo post.
Da poco ho inziato a lavorare con Jsf/Spring/Hibernate, su un'applicazione che ha necessita di essere distribuita su n application servers, molto grande, molto modulare (almeno nei desideri dell'analista ma va beh...).
Ora, io ho sempre lavorato limitandomi a separare gui/logica/db come insegnato da millenni ormai, realizzando query sql piu'o meno complesse, elaborando i vari risultati, validando etc, tutto questo con servlet/JSP. Niente di eccezionale insomma. Si preparava l'analisi con use cases e uml si implementava la parte di business col db, si disegnava la gui e via andare.
Attualmente vedo (per esempio) Spring e Hibernate, belli, potenti flessibili, -strani-.
Ipotizzo una cosa banale, una semplice maschera CRUD con lista, schifosamente standard, (oggi) non voglio stare 2 ore a scrivere codice ridondante o molesto, -non voglio replicare le informazioni soprattutto-, per esempio le primary keys voglio che siano read-only in modifica e editabili per un nuovo record. Ma per questo devo conoscere i metadati del db, che sono gestiti var livelli sotto da Hibernate, ma sono dati che l'application server conosce, non vorrei dover riscrivere nella logica dell'interfaccia tutto questo comportamento (imho abbastanza comune). Con Spring (prendo questo perche'e'l'unico che conoscicchio, ma non credo sia molto diverso da altri) dovrei farmi un'altro bean che gestisce questi metadati con altri pojos, con altro xml, con altra logica, etc. etc.
Altra cosa, La logica di business, ho il mio pojo, ipotizzo un pattern stile Value Object, con il mio vo che rotola tra gui e persistenza, la logica non puo'essere messa sul lato gui, non puo'essere messa sul lato hibernate. Va messa sul pojo??? Si dovranno fare delle classi che dato il Pojo vi applichino delle operazioni, sto impazzendo??? (prob.si...) :confused:
Il Control di MVC, prendo Jsf perche'e quello che ho appena visto (male), qual'e' la sua ragion d'essere in una applicazione tipo gestionale? Capisco un sito web, ma...
Ripeto che non conosco assolutamente bene questo enorme mondo, e per questo che chiedo a chi gia'bazzica tutto questo, le mie idee attuali sono dovute banalmente al fatto che sono tornato su questi ambienti da poco piu'di un mese, quindi non mi trucidate ;)

PGI-Bis
12-05-2009, 11:47
Se la tuo opinione è che tutto il carrozzone enterprise fa schifo hai il mio voto.

zakmckraken
12-05-2009, 12:34
Mi sembra quantomeno strano di dover costruire tutto sto po'po' di roba per la minima cosa, ovvero, se aggiungo un campo al sistema devo andare a ritoccare:
1) Il file hbm di hibernate (se non uso le annotations di hib. )
2) La classe Entity di hibernate
3) La classe VO
4) La copia dei parametri da entity a vo e viceversa
5) Aggiungere il campo nei vari ed eventuali findBy
6) Modificare l'hsql delle ricerce di cui al punto 5 (si in effetti avere solo un dialetto sql per tutto male non e',anche se le join sono un tantino contorte rispetto ad un sano sql standard... rimpiango Oracle 8...)
7) La gui
In piu',sara'che sono pesantemente legato all'approccio C/C++ non amo molto la reflection...giusto per motivazioni prestazionali, non per altro..
Ripeto, probabilmente e'una mia impressione ma mi sembra un tantino eccessivo... attendo (e spero in) smentite

PGI-Bis
12-05-2009, 13:10
Guarda, sfondi una porta aperta. Potremmo star qui a darci pacche sulle spalle per delle giornate intere.

Vorrei darti un'opzione B ma non c'è. Sono "soluzioni" software che nell'ambiente enterprise devi usare quindi rassegnati e vai.

Va precisato però che Java e Java EE in comune hanno solo un pezzo del nome.

zakmckraken
12-05-2009, 13:43
Fantastico, quindi niente simpatiche soluzioni out-of-the box... a parte imporbabili tentativi di automatizzare la generazione della persistenza e quant'altro dal modello UML (si intende questo con MDA? si lo so, ma google usa troppa CO2 per ricerca :P ), ma... mai provato il mistico AndroMDA... che ti genera pure la gui, che pero'ha una lista di dipendenze un po, come dire 'inconsistente' (e se qualcuno e'riuscito a usarlo con Jsf mi dica come perche' io ho dichiarato la resa incondizionata...), fatta col caro dolce Maven, che pero'fa ingrandire i progetti in maniera brutale (basta aggiungere la dependency... mettiamoci questo plugin) mi sembra di vedere rotolare a valle la qualita'del codice... non delle librerie intendiamoci, saran fatte benissimo, ma di solito cerco sempre di minimizzare codice e dipendenze (anche per non spararmi ad ogni release), e ogni mattina, quando sbatto 50 Mb su JBoss (di librerie, piu' altri 15 di applicativo) insomma mi sento un po'come se fossi diventato un enrome ippopotamo sovrappeso con problemi di gotta...
Continuo a sottolineare che spero di trovare qualcuno che mi critichi...e mi dica che sto sbagliando tutto... e PGI-Bis, grazie per il supporto morale, almeno non mi sento piu'solo ;) ... mal comune mezzo gaudio!

RaouL_BennetH
13-05-2009, 14:49
Lungi da me essere scambiato per un esperto... :p

Anche io, ma solo per scopi 'didattici', stavo cercando di capirci qualcosa su questi design.

Credo di aver capito che fin quando un progetto dev'essere gestito e manutenuto da una sola persona, adottare questi design non ha molto senso.
Davvero è come prendere un lanciarazzi per sparare ad una mosca (citazione) :)


In un team abbastanza vasto dove ci sono competenze specifiche e comunicazione fra i vari componenti del progetto, credo possa semplificare le cose, almeno per progetti molto ampi.

banryu79
13-05-2009, 15:02
In un team abbastanza vasto dove ci sono competenze specifiche e comunicazione fra i vari componenti del progetto, credo possa semplificare le cose, almeno per progetti molto ampi.

Per progetti molto ampi oppure per teste molto diverse :)

shinya
13-05-2009, 15:29
JSF e Hibernate, nella mia modestissima opinione sono lammerda.
Se li devi usare perchè sei costretto dall'ambiente in cui lavori, posso risponderti solo con un "I feel your pain".
Se invece hai possibilità di movimento, ti dò un paio di framework alternativi che fanno le cose come devono essere fatte.

http://www.stripesframework.org/ (un web framework action-based, l'ho usato un pò, figo)
http://wicket.apache.org/ (un altro web framework, ma component-based. Mai usato, ma ne parlano tutti molto bene)
https://activeobjects.dev.java.net/ (un ORM fatto come dio comanda, non come hibernate...è moooolto più semplice)
http://code.google.com/p/google-guice/ (un framework per dependency injection senza quella merda di xml, se ti serve)

gokan
29-06-2009, 11:47
Ciao, rispolvero il thread che avevo seguito, e che avevo messo tra i sottoscritti per i vari framework segnalati da shinya :)
Come è andata a finire all'autore del thread con jsf/hibernate nel progetto in cui lavora?

Me lo sono chiesto perchè anch'io lavoro da un pò con jsf e sebbene lavori con le vecchia versione 1.0 devo dire che non sono così malaccio..per fare qualche form, mostrare tabelle di risultati e cosette "tipo gestionale" non sembra malaccio; tra le altre cose sono costretto ad utilizzare RAD di ibm come ide (una sorta di eclipse potenziato e più pesante) e devo dire che vi sono dei tag ibm abbastanza comodi.
Finora l'impressione non è negativa e leggendo in giro, le JSF 2.0 (al momento in versione RC) promettono molto bene.

JSF e Hibernate, nella mia modestissima opinione sono lammerda.
Se li devi usare perchè sei costretto dall'ambiente in cui lavori, posso risponderti solo con un "I feel your pain".
Se invece hai possibilità di movimento, ti dò un paio di framework alternativi che fanno le cose come devono essere fatte.

http://www.stripesframework.org/ (un web framework action-based, l'ho usato un pò, figo)
http://wicket.apache.org/ (un altro web framework, ma component-based. Mai usato, ma ne parlano tutti molto bene)
https://activeobjects.dev.java.net/ (un ORM fatto come dio comanda, non come hibernate...è moooolto più semplice)
http://code.google.com/p/google-guice/ (un framework per dependency injection senza quella merda di xml, se ti serve)
Per quanto riguarda questi link, sembra molto interessante wicket, però come tutti sappiamo alla fine usiamo sempre i framework che vanno in voga (e non sempre sono i migliori, ma molto supportati si).
Torniamo sempre ai soliti discorsi..lavorando come dipendenti di qualcuno è difficile imporre l'uso di alcune tecnologie piuttosto che altre.
Se lavorassi come libero professionista allora si potrebbe anche prendere in considerazione (fino ad un certo punto però) l'uso di framework alternativi.

ciao