Vra

My ontwikkelaars voer 'n burgeroorlog.In een kamp het hulle Hibernate en Spring omhels.In die ander kamp het hulle raamwerke aan die kaak gestel - hulle oorweeg egter hiberneer.

Die vraag is:Is daar enige nare verrassings, swakhede of slaggate waaroor nuweling Hibernate-Spring-bekeerlinge waarskynlik sal struikel?


PS:Ons het 'n DAO-biblioteek wat nie baie gesofistikeerd is nie.Ek twyfel of dit Hibernate se rykdom het, maar dit bereik 'n soort volwassenheid (d.w.s.dit is nie verander in die laaste paar projekte wat dit ingesluit is nie).

Was dit nuttig?

Oplossing

Ek het Hibernate 'n aantal keer in die verlede gebruik.Elke keer het ek randgevalle raakgeloop waar die bepaling van die sintaksis ontaard het in 'n aasdierjag deur die dokumentasie, Google en ou weergawes.Dit is 'n kragtige instrument maar swak gedokumenteer (laas wat ek gekyk het).

Wat Spring betref, byna elke werk waarvoor ek onderhoude gevoer het of waarna ek die afgelope paar jaar gekyk het, het Lente behels, dit het werklik die de-facto-standaard vir Java/web geword.Deur dit te gebruik, sal jou ontwikkelaars in die toekoms meer bemarkbaar wees, en dit sal jou help aangesien jy 'n groot poel mense sal hê wat jou toepassing sal verstaan.

Om jou eie raamwerk te skryf is aanloklik, opvoedkundig en pret.Nie so goed op resultate nie.

Ander wenke

Hulle het aan die kaak gestel raamwerke?

Dis moer.As jy nie 'n raamwerk van die rak gebruik nie, skep jy jou eie.Dit is steeds 'n raamwerk.

Hibernate het vir seker eienaardighede, maar dit is omdat die probleem wat dit probeer oplos kompleks is.Elke keer as iemand oor Hibernate kla, herinner ek hulle aan al die vervelige DAO-kode wat hulle sal moet onderhou as hulle dit nie gebruik nie.

'n Paar wenke:

  • Hibernate is geen plaasvervanger vir 'n goeie databasisontwerp nie.Hiberneer-skemas is in orde, maar jy sal hulle af en toe moet aanpas
  • Uiteindelik sal jy moet verstaan ​​hoe Hibernate lui klasse laai en hoe dit dinge raak.Hibernate wysig die Java-greepkode en jy sal vroeër of later in die dieptes moet delf al is dit net om te verduidelik hoekom objekskakels nul is.
  • Gebruik aantekeninge as jy kan.
  • Neem die tyd om die Hibernate-verrigtingstemtegnieke te leer, dit sal jou op die lang termyn red.

As jy 'n redelik komplekse databasis het, is Hibernate dalk nie vir jou nie.By die werk het ons 'n redelik komplekse databasis met baie data, en Hibernate werk nie regtig vir ons nie.Ons het eerder iBATIS begin gebruik.Ek ken egter baie ontwikkelingswinkels wat Hibernate suksesvol gebruik - en dit doen wel baie knorwerk vir jou - so dit is die moeite werd om te oorweeg.

Lente is 'n goeie hulpmiddel as jy weet hoe om dit reg te gebruik.

Ek sou sê dat raamwerke beslis 'n goeie ding is - soos ander uitgewys het, wil jy nie die wiel weer uitvind nie.Lente bevat baie modules wat sal beteken dat jy nie soveel kode hoef te skryf nie.Moenie swig voor die "Not Invented Here"-sindroom nie!

Lui laai is die groot probleem in MVC-toepassings wat Hibernate gebruik vir hul volhardingsraamwerk.Jy laai die voorwerp in die kontroleerder en gee dit na die JSP-aansig.Sommige of al die lede van die klas word gevolmagtig en alles blaas op omdat jou Hibernate-sessie gesluit was toe die kontroleerder voltooi het.

Jy sal die Maak Sessie in Aansig oop artikel om die probleem te verstaan ​​en 'n oplossing te kry.As jy Spring gebruik, is hierdie blog artikel beskryf die Lente-oplossing vir die oop sessie in sig-kwessie.

Dit is een ding (ek kon onthou) waarin ek geval het toe ek in my Hibernate dae was.Wanneer jy (verskeie) kinderobjekte uit 'n versameling (in 'n ouer-entiteit) uitvee en dan nuwe entiteite by dieselfde versameling in een transaksie voeg sonder om in die middel te spoel, sal Hibernate "insert" doen voor "delete".As die kindertabel 'n unieke beperking in een van sy kolomme het, en jy verwag dat jy dit nie sal oortree nie, aangesien jy reeds sekere data voorheen uitgevee het (net soos ek was), maak dan gereed om gefrustreerd te wees.Hibernate forum stel voor:

  1. Dit was 'n DB-ontwerpfout, herontwerp;
  2. spoel (of commit as jy wil) tussen die deletes en invoegings;

Ek kon nie albei doen nie, en uiteindelik die Hibernate-bron aanpas en weer saamgestel.Dit was net 1 reël kode.Maar die poging om daardie een lyn te vind was gelyk aan ongeveer 27 koppies koffie en 3 slapelose nagte.

Dit is net een voorbeeld van probleme en eienaardighede wat jy dalk kan beland as jy Hibernate gebruik sonder enige ware kundige op jou span (kenner:iemand met voldoende kennis oor die filosofie en interne werking van Hibernate).Jou probleem, oplossing, liter koffie en slapelose nagte kan verskil.Maar jy kry die idee.

Ek het nie veel met Java gewerk nie, maar ek het wel in groot groepe Java-ontwikkelaars gewerk.Die indruk wat ek gekry het, was dat die lente OK is.Maar almal was ontsteld oor Hibernate.Die helfte van die span is gevra: "As u een ding kan verander, wat sou u verander?" En hulle sou sê: "Raak ontslae van Hibernate.".Toe ek Hibernate begin leer het, het dit my ongelooflik kompleks opgeval, maar ek het nie genoeg geleer nie (gelukkig het ek aanbeweeg) om te weet of die kompleksiteit geregverdig was of nie (miskien was dit nodig om 'n paar komplekse probleme op te los).

Die span het van Spring ontslae geraak ten gunste van Guice, maar dit was meer soos 'n politieke verandering, ten minste uit my oogpunt en ander ontwikkelaars met wie ek gepraat het.

Ek het nog altyd gevind Hibernate is 'n bietjie kompleks en moeilik om te leer.Maar as JPA (Java Persistence API) en EJB (Enterprise Java Beans) 3.0 bestaan ​​al 'n rukkie dinge het baie makliker geword, ek verkies baie om my klasse te annoteer om kartering via JavaDoc of XML te skep.Kyk na die ondersteuning in Hibernate.Die bykomende bonus is dat dit moontlik is (maar nie moeiteloos nie) om die databasisraamwerk later te verander indien nodig.Ek het gebruik OpenJPA met goeie resultate.

Die afgelope tyd het ek gebruik JCR (Java Content Repository) meer en meer.Ek hou van die manier waarop my modules 'n enkele databerging kan deel en dat ek die struktuur en eienskappe kan laat ontwikkel.Ek vind dit baie makliker om met nodusse en eienskappe te werk eerder as om my voorwerpe na 'n databasis te karteer.'n Goeie implementering is Jackrabbit.

Wat die lente betref, het dit baie kenmerke waarvan ek hou, maar die hoeveelheid XML wat nodig is om te konfigureer, beteken dat ek dit nooit sal gebruik nie.In plaas daarvan gebruik ek Guice en is absoluut mal daaroor.

Om saam te vat, sal ek jou twyfelende ontwikkelaars wys hoe Hibernate hul lewe makliker sal maak.Wat Lente betref, sal ek ernstig kyk of Guice 'n lewensvatbare alternatief is en dan probeer wys hoe Lente/Guice ontwikkeling beter en makliker maak.

Ek het baie Lente/Hibernate-ontwikkeling gedoen.Met verloop van tyd het die manier waarop mense beide in kombinasie gebruik het 'n bietjie verander.Die oorspronklike HibernateTemplate-benadering was moeilik om te ontfout aangesien dit andersins nuttige uitsonderings insluk en omvou;praat direk met die Hiberante API!

Hou asseblief aan om na die gegenereerde SQL te kyk (konfigureer jou ontwikkelingslogboek om SQL te wys).Om 'n abstraksielaag na die databasis te hê, beteken nie dat jy nie meer in SQL hoef te dink nie;jy sal nie goeie prestasie kry as jy anders nie.

Oorweeg die projek.Ek het iBatis bo Hibernate by verskeie geleenthede gekies waar ons streng prestasievereistes, komplekse nalatenskapskemas of goeie DBa's gehad het wat uitstekende SQL kon skryf.

Wat Hibernate betref:'n baie goeie hulpmiddel vir toepassing wat handel oor 'n vinnig veranderende databasisskema, 'n groot hoeveelheid tabelle, doen baie eenvoudige CRUD-bewerkings.Verslae met ingewikkelde navrae word eerder minder goed hanteer.Maar in hierdie geval verkies ek om JDBC of inheemse navrae in te meng.Dus, vir 'n kort antwoord:Ek dink wel tyd wat spandeer word om Hibernate aan te leer is 'n goeie belegging (hulle sê dit voldoen ook aan EJB3.0 en JPA standaarde, maar dit het nie in die vergelyking gekom toe ek dit vir my persoonlike gebruik geëvalueer het nie).

Wat die lente betref...sien Die Gal Blog :)

Onthou:raamwerke is nie silwer koeëls, maar jy moet nie vind die wiel weer uit óf.

Ek vind dit help regtig om bekende raamwerke soos Hibernate te gebruik, want dit pas jou kode in 'n spesifieke vorm, of 'n manier van dink.Dit beteken, aangesien jy Hibernate gebruik, skryf jy kode op 'n sekere manier, en die meeste indien nie alle ontwikkelaars wat Hibernate ken nie, sal jou denkrigting redelik maklik kan volg.

Daar is natuurlik 'n nadeel hieraan.Voordat jy 'n hot shot Hibernate-ontwikkelaar word, gaan jy vind dat jy probeer om 'n vierkant in 'n sirkelvormige gat te pas.Jy WEET wat jy wil doen, en hoe jy veronderstel was om dit te doen voordat Hibernate in die prentjie gekom het, maar om die Hibernate-manier te vind om dit te doen, kan dalk...nogal 'n bietjie tyd.

Tog, vir maatskappye wat gereeld konsultante huur (wat baie bronkode in 'n kort tydjie moet verstaan) of waar die ontwikkelaars gereeld aanmeld en ophou, of waar jy net nie wil wed dat jou sleutelontwikkelaars bly vir ewig en verander nooit van werk nie -- Hiberneer en ander standaardraamwerke is 'n redelik goeie idee, dink ek.

/Aas

Lente en Hibernate is raamwerke wat moeilik is om te bemeester.Dit is dalk nie 'n goeie idee om dit te gebruik in projekte met streng sperdatums terwyl jy nog probeer om die raamwerke uit te vind nie.

Die voordele van die raamwerke is basies om te probeer om 'n platform te bied sodat konsekwente kodes produkte kan wees.Uit ondervinding sal jy goed aangeraai word om ontwikkelaars ondervinding te hê met die raamwerke wat beste praktyke in plek stel.

Afhangende van die ontwerp van jou toepassing en/of databasis, is daar ook eienaardighede wat jy sal moet omseil om te verseker dat die raamwerke nie prestasie belemmer nie.

Na my mening is die grootste voordeel van Lente dat dit beter ontwikkelingspraktyke aanmoedig en moontlik maak, in die besonder loskoppeling, toetsing en meer koppelvlakke.Hiberneer sonder lente kan baie pynlik wees, maar die twee saam is baie nuttig.

Om 'n bestaande projek aan enige raamwerk terug te pas, gaan pynlik wees, maar die herfaktoreringsproses hou dikwels ernstige voordele in vir langtermyn-onderhoudbaarheid.

Ek moet saamstem met baie plasings oor hierdie een.Ek het albei, breedvoerig, in 'n verskeidenheid instellings gebruik.As ek 'n ontwerpbesluit kon ongedaan maak, sou dit wees om Hibernate te gebruik.Ons het eintlik 'n vrystelling in een van ons produkte begroot om Hibernate vir iBatis en Spring-JDBC te verruil vir 'n beste-van-alle-wêreld-benadering.Ek kan 'n nuwe ontwikkelaar vinniger laat opstaan ​​met Spring-JDBC, Spring-MVC, Spring-Ioc en iBatis as wanneer ek hulle net met Hibernate opdrag gegee het.

Hibernate is net te ingewikkeld vir hierdie KISS-ontwikkelaar.En die hemel help jou met hiberneer as jou DBA die gegenereerde SQL sien wat die databasis sien en jou terugstuur met geoptimaliseerde weergawes.

Die boonste antwoord noem dat Hibernate swak gedokumenteer is.Ek stem saam dat die aanlyn verwysingshandleiding meer volledig kan wees.'n Boek geskryf deur Hibernate se skrywers, 'Java volharding met Hibernate' is 'n moet-lees vir elke Hibernate-gebruiker en baie volledig.

@slim - ek is vanoggend weer by jou.

Dit klink soos 'n klassieke geval van Nie hier uitgevind sindroom nie.As hulle nie lus is vir lente nie, moet hulle ander opsies oorweeg eerder as om hul eie raamwerk te ontwikkel (of hulle erken dat hulle dit doen of nie). Guice opkom as 'n moontlikheid.Ook pikohouer.Daar is ander daar buite, afhangende van wat jy nodig het.

Lente en Hibernate maak die lewe beslis makliker.Om met hulle te begin, kan aan die begin 'n bietjie tydrowend wees, maar jy sal beslis later daarby baat.Nou word die XML deur annotasies vervang, jy hoef ook nie honderde reëls XML te tik nie.

Jy sal dalk wil oorweeg AppFuse om jou leerkurwe te verminder:genereer 'n toepassing, bestudeer en pas dit aan, en jy gaan.

Raamwerke is nie boos nie.selfs die Java SDK is 'n raamwerk.

Wat hulle waarskynlik baklei is raamwerk verspreiding.Jy moet nie 'n raamwerk na 'n projek bring net vir die skop daarvan nie, dit moet konsekwente waarde in 'n redelike tyd bring.Elke raamwerk vereis 'n leerkurwe, maar behoort jou later met verhoogde produktiwiteit en kenmerke te beloon.

As jy sukkel met kode wat moeilik is om te ontfout as gevolg van inkonsekwente databasisgebruik, ingewikkelde kasmeganismes of 'n magdom ander redes.Hiberneer sal groot waarde toevoeg.behalwe vir die leerkurwe (wat vir my ongeveer 1 maand se praktiese werk geneem het) was daar geen slaggate nie, mits jy iemand in die buurt het om die basiese beginsels vir jou te verduidelik.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top