Managementului dependințelor și alte bune practici în utilizarea unui framework

Am sa incerc sa ma explic, dar o sa iasa probabil mai mult text decat mi-as dori, sper sa se inteleaga. De asemenea, doresc sa intaresc faptul ca parerile exprimate mai jos sunt ale mele, probabil veti gasi alti seniori care va vor recomanda calduros Laravel. Aici se deschide deja alta discutie.

Laravel este scris peste componente Symfony, la care s-au adaugat niste moduri mai putin ortodoxe de a scrie cod (apelari de metode statice). Acest lucru il face foarte usor de folosit de incepatori, dar e impotriva principiilor de programare curata. Practic te incurajeaza sa scrii cod prost. Cam asta e principala mea problema cu el.

Al doilea motiv este faptul ca Laravel are propriul ORM, nici macar nu foloseste Doctrine care e mai bine testat in aplicatiile serioase. Deschidem manualul Laravel sa ne uitam cum se recomanda folosirea ORMului si vedem direct un foarte tight coupling intre model si sursa de date:

class User extends Model {
    protected $table = 'my_users';
}

Aceasta abordare incalca din nou extrem de multe principii de programare clean, pentru care ar fi nevoie de o carte intreaga sa le explicam pe indelete. E suficient sa amintim faptul ca modelarea conceptelor aplicatiei trebuie sa fie complet decuplata de sursa de date, tocmai ca sa poti aduce modificari oricareia dintre acestea fara sa ti se sparga totul in brate.

Tot la partea de ORM din Laravel (daca ne calcam pe inima si o folosim) observam ca ofera, f convenabil pt rapiditatea codarii functionalitatii, many-to-many. Cand am vazut prima data “Polymorphic Many To Many Relation” marturisesc… am inchis pagina de la browser. Am vazut astfel de lucruri scapate de sub control de multe ori, si se datoreaza in primul rand comoditatii dobandite in urma faptului ca lasam pe altii (ORMul) sa scrie interogarile pt noi. Se ajunge la (1) interogari f lungi si greu de debuggerit; (2) extragerea mult prea multor date din DB fara sa fie necesar acest lucru.

Mersi @redecs pentru clarificarea legata de ownershipul Laravel, e foarte importanta in economica scrierii unor aplicatii care vrem sa “ne țină” cat mai mult. Sa nu uitam ca Symfony a primit bani (si nu putini) sa stabilizeze un produs deja bun, si-au facut echipa cu oameni reductabili din toata Europa, etc. Pe de alta parte, daca pica in Atlantic avionul in care e Taylor Otwell…

Ar mai fi un argument de luat in seama. Laravel face upgrade-uri furioase de versiuni majore. Asta inseamna ca nu poti beneficia de “latest and greatest” fara sa ai breakward compatibility issues. Mai sunt si altii ingrijorati, https://gist.github.com/anonymous/8565929 e doar un exemplu. De aceea trebuie ca acel cod al aplicatiei noastre sa aiba o dependinta minimala de frameworkul folosit, ca sa ne putem replia usor, si nu rescriind tot.

4 Likes