Taky zkousim Nette+Doctrine 1 a zatim jsem docela spokojeny.
Doctrine 2 se mi moc nelibi, podle mne je to z pohledu OOP a abstrakce krok zpatky, i kdyz samozrejme pokud nekomu chybi ten vykon navic a nebo naopak mu vadi ze domenovy model toho vi o ulozeni v DB vse, tak je Doctrine2 asi dobra volba.
Ja osobne se snazim o TDD a po serii experimentu jsem dospel k zaveru ze:
- nechci pracovat primo s DB, chci mit moznost kdykoli zmenit DB lusknutim prstu. Z toho mi vyslo ze chci definovat objekty jako PHP class a nechat kod at vygeneruje DB strukturu + stara se o komunikaci s DB (Doctrine1 zatim splnuje na jednicku, prepnuti unit testu ze sqlite:memory na MySQL je otazkou prepsani jedneho radku s definici pripojeni, to same teoreticky i pro jine DB, ale to jsem zatim netestoval)
- nechci v ramci unit testu „mockovat“ skoro vsechny tridy, proto bych chtel poustet testy nad opravdovou DB, ale klasicke „skutecne“ DB vykonove naprosto nevyhovuji. Sqlite:memory mne trochu zklamala, ale je to jeste pouzitelne (V prumeru 10 testu zvladne za 0.3s proti 5s nad MySQL).
- porad hledam rozumny kompromis jak testovat samotny vystup webove aplikace, vypada to ve spojeni s Nette docela slibne, v podstate mi staci korektne vyvolat dany presenter a otestovat na vystupu co pripravil sablone, pripadne klicove data dohledat v samotnem html vystupu (ale tohle mi prijde uz relativne nezajimave, jsem spokojenej jiz kdyz vim ze sablona dostava spravne data, mozna u opravdu komplexnich stranek kde muze dojit k nejake zamene udaju v ramci sablony nebo nejake copy/paste chybe budu testovat i vystup)
Kdyby sem nechtel odstrelit definovani struktury DB, tak bych zustal u dibi.
Premyslim ze nekdy napisu nejaky „how to“ co se tyce kombinace TDD + Nette + Doctrine 1, jen se jeste na to necitim pripraven, chci ziskat trochu vic praxe s testovanim presenteru a celkove aplikace, ted jsem velmi spokojeny jenom s testovanim modelu. A jeste jsem nezkousel migrace mezi ruznymi verzemi modelu, kdyz uz budou v DB nejake zive data, Doctrine by to melo pomoct resit, ale musim si to jeste vyzkouset.
Pokud by takovy clanek nekoho zajimal, dejte mi to tady vedet, at vim ze to ma smysl. :)