Do Not Learn Frameworks. Learn the Architecture

via @alessioalex

mirror

8 Likes

Elitism…

Nu spun că pe alocuri nu are dreptate (a se vedea programatorii de WordPress), dar să reinventezi roata de fiecare dată mi se pare foarte contraproductiv. Nu știu cum e cu framework-urile de pe frontend, dar pe back-end nu văd cum te-ar putea limita, e totuși PHP. Nu știe ce ai tu nevoie te apuci frumos și-l modifici…

1 Like

Într-un fel are dreptate: ca programator, ar trebui să poți (re)scrie fără probleme orice funcționalitate dintr-un framework. Ar trebui să o faci? Da. Ar trebui să o faci pe un proiect public? Mmmm… Aș zice că nu.

Și nu pentru că n-ai scrie cod bun (sau rău), ci pentru că nu doar tu vei întreține acel cod. Pentru tine, codul tău are sens și este de cea mai înaltă calitate. Dar dacă vine un alt programator după ce ai abandonat tu proiectul, cum se va descurca fără o documentație solidă? Fără resurse sau discuții pe seama diverselor probleme (e.g. StackOverflow)?

Asta cu modificatul (nu extinsul) unui framework mi se pare o imprudență, pentru că te limitează la versiunea folosită în acel moment.

2 Likes

@iamntz De aia avem un dependenency container, care ar trebui sa se bazeze pe contracte, si nu pe clase reale :smiley:

1 Like

Corect, dar modul în care pune el problema nu către asta îndeamnă, ci e ca un băiat disperat de pe grupul FB PHP România care e în stare să rescrie și jQuery, că sigur îl face mai bine.

Orice framework cât de cât cunoscut îți oferă posibilitatea de extinderea a funcționalităților, deci nu văd unde e problema aici :smiley:

1 Like

Eu cred ca articolul se referea la faptul ca nu ai tot timpul nevoie de un framework si daca ajungi sa folosesti un framework ar fi bine sa intelegi ce se intampla in el si nu la “high level” ci cat de cat in detaliu si poate sa fi in stare sa il si reproduci cu putin “research”.

Sau poate ca sunt singurul care a intalnit persoane care lucrau cu un framework dar nu aveau mare idee de limbajul in care a fost scris?

Ex: jQuery vs Javascript, Orice framework de dificultate medie vs PHP …

Consider ca are dreptate daca vrei sa ramai programator pe termen lung pentru ca framework-urile vin si pleaca …

7 Likes

Clar! Dacă nu ai măcar un proiect mare în care să te lovești de spagetti code și să înțelegi ce porcării ai făcut la momentul scrierii, atunci nu ești programator :smiley: (eventual limbaj vanilla)

2 Likes

Mesajul principal cred ca se adreseaza novicilor, care confunda arhitectura cu framework-urile.

Arhitectura o faci in cod care nu foloseste niciun framework.

In acel cod se ascunde business value.

3 Likes

Arhitectura este doar un set de abstractii on top of each other or side by side; un framework este o colectie de astfel abstractii dar nu te opreste nimeni sa mai adaugi peste on a higher level

Same as @tachyean insa este imperativ sa citesti codul sursa al framework-ului pe care il folosesti.

1 Like

Adica sa ai framework folosit in business logic?

what?

please explain.

Eu unul am inteles ca pentru a avea o arhitectura nu trebuie sa folosesti un framework iar in acel cod pur se regaseste the mythical business value

1 Like

Ai inteles bine. Orice altceva e mocirla, nu arhitectura.

1 Like

You’re joking or being sarcastic right, right? :smile: :sunny:

Nu.

(post must be at least 10 characters)

Deci nu folosesti frameworks? for the sake of architectural purity.

Folosesc frameworks, dar nu in application domain. For the sake of not being locked-in by any vendor.

Asta se traduce in lots of extra abstraction to decouple the app. domain from the framework i.e.

Cred ca se refera la faptul ca si cu si fara framework, codul scris de tine este pentru ce esti platit si, deci, el este cel pe care sa ne axam si cel mai putin probabil sa nu il intelegi (cum trebuie), ori in folosirea unui framework, noi ne limitam, oarecum, la modul in care framework-ul poate fi implementat… cred…

explica-mi si mie cum vine asta cu “locked in”. ca tot aud si nu inteleg. sau inteleg si mi se pare de o stupizenie iesita din comun.

Uite incerc eu un exemplu, sper sa fie suficient de clar. Orice aplicatie are nevoie de un mod de a raporta executia, adica de logare. Este bine sa putem configura nivelul de verbozitate, adica in productie sa notam doar acele evenimente critice, in timp ce mediul de dezvoltare are nevoie de o fluenta mai ridicata, pentru a verifica si functionalitatea.

Sa zicem ca brusc aplicatia scrisa de noi are o mare afluenta de vizitatori si se mica asa mai in reluare. Facem un profiling si descoperim ca se petrece mult timp logand diverse lucruri, de care noi chiar avem nevoie. Pentru moment, ridicam nivelul de logare sa nu se mai scrie decat erori si critice, dar nu putem ramane asa la nesfarsit, sysadminii sunt pe capul nostru ca ei sunt blind fara acele date.

Cei de la Heroku au scris un articol in knowledge base-ul lor in care fac o comparatie intre cum se petrece logarea in diverse frameworkuri, iar noi il vom folosi pentru a face comparatia de exemplificare. Discutia se poate extinde, fireste, eu vreau doar sa ilustrez vendor lock-in fara sa fac prea multe diagrame.

  1. Codeigniter
    Ne obliga sa ne scriem propria clasa de logare. Nu exista un vendor lock-in pentru ca trebuie sa ne facem propriile arme. Partea proasta este ca sunt deja o tona de librarii de logare, de ce as vrea sa reinventez roata?

  2. CakePHP
    Ne obliga sa folosim CakeLog. Aici nu putem ocoli aceasta alegere, e facuta de ei. Ne “incuie” sa mergem pe ceea ce au ales ei, fara sa putem cu usurinta schimba.

  3. Symfony
    Folosesc Monolog. Probabil din configuratie se poate merge pe altceva, sincer nu am avut nevoie.

  4. Silex
    Ofera posibilitatea legarii unui MonologServiceProvider. Dar daca avem un alt provider favorit, il putem folosi pe acela. Nu suntem restrictionati in nici un fel, se ofera doar o recomandare.

Ce e de facut? Ales o librarie care sa implementeze AbstractLogger.php si atunci cand trebuie sa o schimbam avem la dispozitie aceleasi metode, nu trebuie sa umblam la cod. Dar daca noi decidem ca loggerul nostru trebuie sa fie restful ca sa nu asteptam pana a terminat de scris in fisier/baza de date, atunci putem, pur si simplu scrie un adaptor la monolog sau folosi o cu totul alta librarie (“blackbox”) si gata! No vendor lock-in.

2 Likes