Lovindu-ma de un nou proiect zilele trecute, ma pregateam sa deschid un topic pe tema titlului.
Am vazut ce s-a inceput aici Do Not Learn Frameworks. Learn the Architecture, dar am deschis, totusi, un topic nou, pentru ca mi-ar placea sa stiu ce concluzii ati tras din experienta voastra.
Eu am inceput prin a crea un framework, inspirandu-ma din CodeIgniter. Fiind abia la inceput cu OOP, am zis ca, facand un framework, o sa invat ce inseamna, ce trebuie urmarit, ce probleme se trateaza, ce solutii se gasesc. Am luat cam fiecare componenta CI si am incercat s-o reproduc dupa logica mea. Si m-a ajutat foarte mult, atat la a cunoaste arhitectura, OOP, cat si la a-mi imbunatati gandirea.
Am avut cateva proiecte unde am avut sansa sa folosesc respectivul framework si a ajuns in productie. La fiecare proiect am descoperit neajunsuri pe care, de multe ori, le-am rezolvat in graba, din motive de timp. Si nu eram multumit de asta.
Pe urma, am trecut la a folosi framework-uri existente (CI, Laravel, Symfony). Si am observat ca orice situatie impusa de proiect are o rezolvare eleganta, daca stai si studiezi cu rabdare problema.
Dezvoltand ceva dupa modalitati si standarde proprii, alti indivizi vor fi nevoiti sa inteleaga, in primul rand, cum ai gandit (aici ma refer mai mult la arhitectura si standarde, nu neaparat la implementarea unor solutii, desi gasim pattern-uri structurale comune si pentru astea).
In schimb, daca folosesti o unealta (corespunzator, dupa practicile indicate), cel care vine dupa tine are instant o privire de ansamblu.
Nu sunt impotriva framework-urilor custom, dar sunt destul de greu de intretinut in timp si pentru un numar mare de persoane si, cum ziceam, nu poti sa prevezi toate situatiile ce pot aparea. Dar, daca totusi se alege calea asta, e de preferat ca macar unele standarde sa fie folosite (cum ar fi PSR-ul pentru cod in sine).
Recomandarea mea, in general, e folosirea framework-urilor existente (da, pot exista situatii in care sa fie benefica o altfel de solutie), sunt destule incat sa avem de unde selecta, in functie de preferinte.
Insa nu recomand inflexibilitatea, un lucru nu “se face asa pentru ca asa se face, asa il face toata lumea”, ci e de preferat sa sapi adanc, sa intelegi cu adevarat logica fiecarui framework.
Inca ma mai gandesc uneori sa incep iar dezvoltarea unui framework pe placul meu, in stilul meu de a gandi si a rezolva problemele, dar cu siguranta as face asta cu gandul la cei ce ar putea lucra pe codul meu la un moment dat.
Nu, nu sunt un robot ce lucreaza strict dupa carte, ci am inteles si observat avantajele standardelor (nu a doctrinelor).
Voi?