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