Ti általában hogyan oldjátok meg a következő gyakori feladatot a használt platformotokon?
Prezentálnod kell egy relációs adatbázis tábláját, táblázatos formában. Az esetek 99%-ban az attribútumoknak (oszlopoknak) más neve van az adatbázis rendszerben ("index", "name", "registrationDate" stb.), mint ahogy megjelenítéskor a táblázatban az oszlopfejlécekben látni szeretné az ember ("Kulcs", "Név", "Regisztráció dátuma").
Ezt a megfeleltetést hogyan realizáljátok?
Igazából azon gondolkozom, hogy a rengeteg lehetőség közül szerintetek melyik hatékony, egyszerű és újrafelhasználható? (Éppen most Java+MySQL-ben fogom használni, de a kérdés környezetfüggetlen.)
Arra gondoltam, hogy például az esetemben a JDBC lekérdezés-ből kapott ResultSet.ResultSetMetaData.getMetaData()-ból kinyerem az oszlopneveket. És a táblázat fejlécében megjelenítendő friendly nevet honnan veszitek ez alapján? (Esetleg többnyelvűségre is gondolva.) Lokalizációs libet használtok, és ez lesz a "hx0r" nyelv, és így lesz index => Kulcs ill. index => Index ? Vagy ezeket is táblában tároljátok, külön lekérdezés csinál hozzá egy függvény minden tábla minden oszlopához megjelenítéskor?. Vagy a tábla spéci metaadatában tároljátok (esetleg SQL "AS" label?), és onnan nyeritek ki közvetlenül a friendly nevet? Vagy van valami trükkös XML transzformációtok a metaadatokra?
Megint máshogy megfogalmazva, az MVC patternt alkalmazva a view-ban honnan jön és hogyan jelenítődnek meg a friendly oszlopnevek, mi ennek a metaadatnak az útja ebben a modellben?
ps. IMHO hiányzik ez "programtervezés" vagy hasonló fórum. Az ilyen típusú kérdések más absztrakciók, mint az "algoritmusok", még sincs jobb helyük.
- 4017 megtekintés
Hozzászólások
Esetleg van olyan JDBC driver/wrapper/proxy ami olyan ResultSet-et ad tovább, ami annotálva van ennek megfelelően?
Tudom, hogy ez Java Persistance, de valami hasonló szép lenne, mert metaadatként adná tovább a metaadatot.
--
The Net is indeed vast and infinite...
http://gablog.eu
- A hozzászóláshoz be kell jelentkezni
Szótár táblában tárolnám :)
- A hozzászóláshoz be kell jelentkezni
És pl. MVC esetében ezt a lekérdezést mikor jobb megejteni, hol érdemes tárolni?
--
The Net is indeed vast and infinite...
http://gablog.eu
- A hozzászóláshoz be kell jelentkezni
Praktikusnak a model inicializalasa tunik. Ugyan szigoruan veve ez megjelenitesi reteg, de egy masik szempontbol kozelitve viszont a model property-jeinek human neve - marpedig ezt a tombot ki lehet a lekerdezheto, am custom (szamitott, vagy egyeb) propertyk leirasaval is egesziteni - erre viszont csak a model kepes.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
En maradnek annal, hogy ez a view-hoz tartozik. Szerintem felesleges ezt a model-be tenni.
IMHO ha nem hasznalsz valamilyen frameworkot, akkor sima properties file-ok, amiben lehet mondjuk <oszlopnev>.label=lathato oszlopnev es view-ban szepen 'feloldod' a metadata oszlopneveit.
- A hozzászóláshoz be kell jelentkezni
Java-ban peldaul a column headerek a TableModel resze. Azt hiszem maradok annal, h amikor ezt implementalom, itt fogom a lekerdezes metaadataibol kinyerni az eredeti nevet, majd internationalization-nal fogom leforditani human/friendly-ve.
--
The Net is indeed vast and infinite...
http://gablog.eu
- A hozzászóláshoz be kell jelentkezni
gettext
Gondolom MVC modellt akarod követni, ugye ekkor az adatmegjelenítéstől független a modell.
Fogod, visszaadod a resultsetet, szt view rétegben mondjuk gettext-tel lekérdezed a hozzávaló oszlopnév-fordítást.
_(row->column_name), valahogy így. A gettext-nek megvan az a jó tulajdonsága, hogyha nincs fordítás az adott msgid-hez, akkor visszaadja azt. Így fordítatlan nyelv esetén visszakapod az oszlop nevét.
Ha csak gányolsz, akkor meg külön táblából kiolvasod az oszlopnév fordítását, s úgy állítod össze a kverit. és akkor lesz a
SELECT `Answer`.`vb_start` AS `Érvényesség kezdete` FROM Answer -ből
SELECT `Answer`.`vb_start` AS `TRANSLATE(Érvényesség kezdete)` FROM Answer
Ugye itt a translate queryn kívülről jön. így már az oszlopra viszont vagy az ismert fordítással ,vagy index alapján hivatkozol :D
Úgyhogy gettext plz. Pláne, hogy a legtöbb MVC alapú cucc alapból támogatja (RoR, CakePHP, ...) - értsd: a framework-be be van építve a támogatása, nem kell külön gányolni.
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
ps. IMHO hiányzik ez "programtervezés" vagy hasonló fórum.
IMHO vesd fel treynek, ha esszerunek talalja, megcsinalja. Igy szuletett a Virtualizacio kategoria is.
- A hozzászóláshoz be kell jelentkezni
done
--
The Net is indeed vast and infinite...
http://gablog.eu
- A hozzászóláshoz be kell jelentkezni