Automatické generování entitních tříd z databáze

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Tharos
Člen | 1030
+
0
-

Ubastlil jsem si před pár dny skromný nástroj pro automatické generování entitních tříd z databázových tabulek. Napadlo mě, že by se to možná mohlo hodit i někomu dalšímu, ale než si dám tu práci s dokumentací a nahráním někam, radši se ptám :). Dost možná jsem totiž exot a podobný nástroj nikomu jinému k ničemu není, protože: (používá ORM, kde tohle vůbec nemusí řešit|má už podobný nástroj dávno napsaný|rád to píše ručně|atd|atd).

O co přesně jde… Pokud je váš model typu Entity-Repository-Mapper a nepoužíváte žádné sofistikované ORM, musíte si toho poměrně dost psát ručně. Nejukecanější bývají entity. Je k nezaplacení, pokud jsou entity konzistentní a nedají se zvenku (samozřejmě omylem) nijak nabourat. Docílit této konzistence znamená učinit jejich atributy striktně privátní a zejména v setterech validovat vše, co jen validovat lze a má smysl (nebývá toho málo). Což znamená napsat tuny kódu – anebo nastavit generátor a stisknout v prohlížeči F5.

takovéto tabulky se vygeneruje takováto třída. Celé udělátko je snadno modifikovatelné, rozšiřitelné a už v současné verzi konfigurovatelné přes INI soubor, ve kterém se momentálně nastavuje:

  • připojení k databázi a název tabulky, která se má zpracovávat
  • zda generovat konstruktor
  • zda generovat gettery
  • zda generovat settery
  • zda generovat nejdříve všechny gettery a pak všechny settery, anebo zda zachovávat páry u sebe
  • zda striktně kontrolovat typy (pokud je setteru předán špatný typ, vyhodí se výjimka), anebo dodanou hodnotu pouze přetypovávat
  • zda přetypovávat u getterů

Co na to říkáte, mám to někam dát? Jinak mě napadlo, že dalším krokem by mohlo být ono automatické generování formulářů. Vzhledem k tomu, jak je to navržené, by to nebylo až tak složité k dodělání.

Tharos
Člen | 1030
+
0
-

Jeden člověk tu projevil zájem, a tak jsem sepsal alespoň minimální dokumentaci (viz readme.txt) a umístil verzi 0.9 nouzově sem.

Filip Procházka
Moderator | 4668
+
0
-

Ty vážně parsuješ ini, nebo jsem to špatně pochopil? :D parse_ini

Tharos
Člen | 1030
+
0
-

Parsuju, protože já nesnáším, že pro nativní parser je všechno string :) (vadí mi v podstatě tohle). Jestli mám v PHP opravdu něco problém přijmout za své, tak je to ta typová benevolence. Úplně nejradši bych v PHP 5.4 jako hlavní novinku viděl striktní typovost jako v C#/Javě a spol. :) Prostě pořádek musí být. :)

Edit: Ten regulár ale není z mojí hlavy, vlastně bylo napsání celého toho parseru otázkou pár minut a chtěl jsem vyzkoušet, jak to bude fungovat. Výkonem na tom bude výrazně hůře než nativní parser.

Editoval Tharos (9. 5. 2011 16:44)

Martin
Člen | 171
+
0
-

Ten zájemce, to jsem byl asi já. Pak jsem post smazal, neboť nestíhám vyrobit vše v něm uvedené. Tvůj kód už mám stažený, vypadá to dobře, jen nevím, kdy se k jeho využití dostanu.