Exista un subiect ce ma intereseaza un pic mai mult decit altele - RAD si generatoarele de cod pt. aplicatii web.
Exista destule aplicatii mici pt. care prioritatea mi se pare ca este rapiditatea cu care sint dezvoltate (si in final costurile asociate) mai mult decit limbajul folosit, tehnici de programare sau cine stie ce alte lucruri. Ideea e de folosit cele mai bune scule pt. dezvoltat cit mai rapid aceste aplicatii, ce nu impun de multe ori probleme complicate, la care la multe din ele se repeta deseori aceleasi lucruri.
Sigur exista IDE-uri si librarii / framework-uri ce se pot folosit, si in general modul de lucru "bound", controale legate la o baza de date (ASP.NET). Nu-mi prea place stilul asta pt. ca daca vedeti o aplicatie cit de cit micuta si care sa faca ceva are destul cod scris de mina, de multe ori tratind tot felul de evenimente pt. validare si autorizare.
De fapt multe framework-uri (web) pun accentul pe routing (legatura intre URL/parametri si clasele folosite) sau pe modele obiectuale (folosind OR/M sau generatoare). Routing e clar o problema ca acum toti vor URL-uri simple, logice si SEO, nu nu '?' si parametri vizibili, insa de multe ori e supralicitata, ca sint altele mai importante. De exemplu generarea modelelor claselor de lucru cu baza de date care de multe ori ori cad in capcana necesitatii scrierii unor lungi XML-uri ori sint generate 'orbeste' pt. toate cimpurile + toate tabelele din baza de date. De multe ori codul generat este foare tlung si oricum nu acopera decit operatiuni simple, CRUD. Tot mai ramin multe situatii cind ai de scris de mina cod pt. modelul obiectual (BLL / "business objects" sau cum le spuneti).
Insa ce te faci apoi cu 'view'-urile (paginile propriu-zise) in care sa folsoesti acele modele (mutle framework-uri sint MVC). Tot ramine mult cod de scris de mina sau in putine cazuri cum e la on Rails (si altele) de folosit generatoare. Nu ma pricep la 'Ruby on Rails', am vazut doar video-tutoriale si altele, sau framework-uri similare cu alte limbaje, insa felul cum genereaza acele view-uri nu imi prea place. As vrea de exemplu ca in momentul generarii unui tabel sau unui form de editare sa pot selecta ce cimpuri sa fie incluse, care sa aiba validare sau ce tip de controale sa fie folosite sau formatarea datelor. Iar asta nu tastind tone de parametri de tinut minte ci cit mai mult din mouse, cit mai vizual.
De exemplu mi se pare ca se pune prea mult accentul pe modele, doar ca de multe ori la aplicatii web relativ simple mi se pare ca se poate lucra foarte bine direct cu cimpul din baza de date, nu cu o proprietate dintr-o clasa. Acel cimp din DB poate tine mai multe info de exemplu, cum ar fi tipul si lungimea lui. Un varchar(50) contine mai multa informatie decit un simplu tip 'string' cum ar fi proprietatea.
Insa oricum multe framework-uri sar peste o parte foarte importanta in toate aplicatiile web si nu numai: autorizarea, sau cine poate sa faca ce in anume pagini. Problema aici e ca pot fi prea multe scenarii si exista de exemplu unele ce au parte de ACL / RBAC cum ar fi de exemplu Zend_ACL sau ASP.NET, insa ma interesa cum poti avea asta in contetextul unui generator de cod, mai simplu (sa nu mergem la phpGACL). In majoritatea cazurilor problemele de genul pt. userul curent vine afisat butonul de 'Add'/'Edit' in modulul/pagina X, sint destul de complicat de rezolvat pt. ca implica destul cod de scris manual. Sau apoi la salvarea unor date, userul curent poate / are dreptul sa scrie in cimpul Y din DB? Cum s-ar putea simplifica asta? Greu
Apoi sint interesat si de alt lucru: cum se poate genera structura bazei de date in acelsi moment cu generarea paginilor / view-urilor folosind o modelare oarecare? Adica scrii undeva - tabela X are cimpurile x1, x2, x3 din care vreau o pagina de afisare tabelara a cimpurilor x1 si x2 cu anume descriere (caption / label / header) si alta pagina de editare a unui record in care editez doar x2 si x3 cu validare pt. x2. Iar pt. asta sa-ti genereze cod ce apoi sa-l poti modifica sau completa manual daca vrei alte detalii.
Sa dau niste exemple de generatoare la care m-am uitat la un moment dat cu probleme ale lor (PHP). CodeCrafter de la CodeIgniter, a ramas vechi + nu vine in pachetul standard CI. As prefera scule ce sa vina oficial, nu doar sustinute de cineva, temporar cit are timp si chef. Am impresia ca exista si altele, insa n um-am uitat la ele.
QCodo este un framework cu generator, la care clasele generate ramin nemodificate insa le poti extinde cu cod propriu folosind mostenirea. Interesant si util, doar ca tot ramine apoi destul cod de scris de mina, avind un model bazat pe evenimente, oarecum ca in ASP.NET.
Aici macar tot framework-ul e in jurul idei de generare de cod, doar ca in final nu a fost ce as fi vrut. In Zend Framework 1.9 au introdus (cred) Zend Tool, o scula de generat aplicatii / modele / controller / altele, dupa acelasi tipic (cred) cu alte framework-uri. Insa asta presupune folosirea Zend de care inca nu m-am convins, desi are multe librarii bune si utile (ce simplifica viata programatorului). O sa vedem cit prinde asta.
Bake de la CakePHP nu a prins la mine nu stiu de ce. A lipsit lipiciul initial iar apoi nu m-am mai apropiat de Cake. Cit de util o fi nu stiu, poate imi dati voi niste indicii. Cam tot pe-acolo mi se pare si symphony si folosit in mod clasic Propel / Doctrine (OR/M) cu acele XML-uri editate manual (desi exista si ep acolo niste generatoare cred pt. aceel modele). Nu m-a atras.
M-am uitat ieri la un framework nou Recess! dar care pune accentul pe routing (ce e rezolvat interesant) si care are niste scule de generare de modele si controlere din browser, inclusiv cu structura bazei de date, dar care sint minimale. De exemplu nu poti modifica apoi un model existent si oricum e inca la inceput. Nu cred ca are nimic gata scris pt. autorizarea userilor si grupurilor, totul ar trebui scris de mina.
Exista un model dat de OnRails care insa am impresia ca se poate face altfel pt. aplicatii mici web. Am incercat niste variante proprii (minimale) la care la una din ele continui sa mai lucrez si s-o imbuntatatesc ca model de generare de cod pt. aplicatii mici cu baze de date. Fara OR/M, fara clase si modele, fara controlere si routing ci direct chemind pagina proprie (nu e index.php?module=x, ci simplu x.php) si alte citeva lucruri de-astea ce mi se par mie utile.
De ce discutia asta? Nu stiu. Poate mai sint si altii interesati si continuam discutia in forum despre diverse solutii RAD si generatoare de cod ce sa simplifice scrierea aplicatiilor mici, inclusiv cu masurile lor de autorizare pe grupuri / roluri si resurse (module / pagini). Sugestii? Comentarii?