<flame>Jasne, rad se podelim o zkusenosti-ja pouzivam Ruby on Rails a jejich validace. Tam to zmenim jen na 1 miste </flame>.
Ted vazne - nemyslim, ze by bylo nutne delat constrainty primo v databazi a jejim schematu treba na tu platnost data narozeni. To jen zdrzuje a projekt je prevalidovan. Do databaze davam omezeni jen na unikatni indexy a cizi klice, to staci. Zbytek kontroluju v aplikacni logice. Uz si moc nevzpominam, jak se resily constrainty v JPA a pripadne do ktere vrstvy to narvat, ale rozhodne by validace mela byt soucasi modelu (objektu). Univerzalnost a externi definice treba v XML je na pytel, protoze pak clovek hodinu premysli, kde mu to jeste vazne a novacek umira, kdyz ma neco zmenit. Varuji taky pred prevalidaci. Rozhodne bych hned na zacatku nedaval omezeni jako "datum narozeni musi byt v budoucnu", IC musi mit 8 znaku, atd. To jsou tresnicky, ktere muzete resit, az vam bude aplikace bezet. Setkal jsem se s hafo projekty a programatory, kteri radeji resili regularni vyrazy na platnost RC a porad jim nejelo ulozeni osoby do databaze. Cili za me - reste nejdriv naprosto minimalni constrainty (PK, FK, unikatni indexy), dokoncete aplikaci a dalsi validace dejte jako rozsireni. Jak to nejlip udelat v jave pri vsem tom balastu kolem (JPA+Spring+Anotace+Hibernate) uz nevim, protoze jsem to zapomnel. Coz je asi dukaz toho, ze to bylo tak blbe resene, ze mi to mozek smazal :). Hezky den, Jirka Hradil 2011/5/23 Libor Jelinek <ljeli...@virtage.com>: > Dobrý den! > Chtěl bych trochu "společně" zauvažovat nad tématem z předmětu. V každém > projektu se vyskytují nějaké objekty. V první části mapujeme většinou pomocí > UML tzv. business objekty (faktura, zboží, osoba apod.). > > Tyto objektové třídy a vztahy poté mapujeme ručně nebo knihovnami jako JPA > na databázové tabulky. V méně případech mapovat nemusíme, protože používáme > objektové databáze (Bože, děkuji ti za ně :-)). > > V prezentační vrstvě (ať webové či swingové) máme nějaké formuláře nebo > obecně GUI, které business objekty zobrazují, umožňuje vytvářet, editovat a > rušit (zkrátka CRUD operace). > > Naprosto běžné jsou nějaké omezení na vlastnosti objektů - IČ firmy nesmí > být text, RČ nesmí být prázdné, email musí obsahovat znak zavináč atd. atd. > Ač jsou tyto ověření stejné pro jakoukoli vrstvu aplikace, tak se v každé až > příliš často duplikují (v databázi jako SQL constrains, v aplikační vrstvě > kódem v Javě, v prezentační v JavaScriptu). > > Všechny vrstvy tak nějak opakují totéž. Sice se všechny techniky a > frameworky stačí, aby to tak nebylo, ale i tak.... Když se při testech > zjistí, že je možné zadat jako narození datum v budoucnu, pak se obvykle > přesto musí sáhnout do kódu databáze, Java classů a i podpůrných validací ve > webové vrstvě (když nemáme framework, tak zvlášť v webové server-side i > client-side v JavaScriptu). > > Je nedostižným snem, aby se při takové situaci skutečně změnilo jen jediné > místo (jedno XML, anotace tříd, cokoli)? Chci se Vás proto zeptat, jak k > tomu přistupujete Vy, aby jste z jediného místa: > > - vygenerovat/změnit DB s příslušnými constrains (not null, délky varcharů > apod.) > - když ještě budu u DB, tak aby by technologie dokázala provádět jen delta > změny v DB (tj. nevymazala tabulku a data, ale jen přidala/odebrala sloupce) > - vygenerovali/změnit Java classy > - vygenerovat/změnit formuláře vč. kódu k validování vstupu uživatele > > Důraz kladu na nejen vygenerování, ale zejm. následné změny. > > Jako nejbližší tomuto ideálu se mi zdá následující kombinací technologií > (podotýkám, že mám jen teoretické zkušenosti) > - mít model jako obyčejné POJO Java classy > - olepit je JPA anotace entit, které vygenerují DB > - do getterů/setter přidat business logiku (pravidla) > - přidat ještě k fieldům/properties anotace z javax.validation (JavaBeans > Validations) pro ověřovací pravidla. > > Jedinou definicí modelu by byly Java classy ze kterých by se vygenerovali > databázové tabulky. Když je webovová vrstva v JSF, tak JSF umí využít > JavaBeans Validations takéž. Když by byla prezentační vrstva Swing, tak by > asi bylo třeba něco dopsat. > > Ještě jako varianta mě napadá mít jako definici modelu pomocí XML schémat, > ale by mi připadalo jako příliš komplikované (à la EJB) oproti modelu s > POJO. > > Chtěl bych se zeptat těch, kteří se něčím takovým již potýkali/řešeli, zda > zmíněné technologie (nebo obdobné), považujete za vhodné (zda cesta s JPA a > JavaBeans Validation je ta správná). Jestli se můžete dělit se svými > zkušenostmi... > > Díky předem za všechny příspěvky. > > Libor >