Proiect web personal ( pareri / idei )

Ca si un raspuns in acest post utilizatorului tekkie am decis sa deschid un nou subiect.

Pe scurt imi place programarea, ca si hobby… din acest motiv pana acum un an cand am citit Clean Code (nu tot ce-i drept) nici nu auzisem de OOP.

Momentan citesc OOAD \w Applications de G. Booch pentru introducerea in OOP, diagrams etc… si DDD de Eric E. ( pentru building blocks etc…, in exemple intalnesc tot felul de termeni din diferse domenii pe care nu-i inteleg, despre finante etc… asa ca imi e putin mai greu sa le urmaresc )
Ma gandeam sa ma apuc sa lucrez la un proiect web in PHP sa aplic tot ce am aflat mai nou, pentru ca in capul meu lucrurile sunt destul de clare… pana cand incerc sa pun in aplicare.

Sunt extrem de constient ca nu o sa fac nimic notabil din prima, nici din a doua, poate nici a trei-a incercare, nu de alta dar cu cat aflu ceva nou, mai apar inca alte 4 chestii.

Sincer nu vreau sa incerc sa invat inca un framework precum Laravel momentan, mai degraba mi-as face eu framework-ul meu , daca il pot numii asa, in spiritul Clean Architecture si DDD; de la Routing pana la View… nu va imaginati ceva maret…
Ca si aplicatie: un forum precum phpBB sau Invision Community, evident ceva foarte simplu…

Sumar

Ideea nu e noua, ci persista de cativa ani, chiar am avut doua incercari, ambele in PHP, prima incercare a fost acum 4 ani, pe vremea aia scriam PHP-ul si HTML-ul intr-un singur fisier, dar m-am convins de problemele unei astfel de abordari asa ca am abandonat ideea pentru mult timp, a doua incercare a fost in decembrie cand am aflat si aplicat MVC, lucru care m-a dus muult mai departe fata de incercarea anterioara, dar si aici am gasit limitarile implementarii mele duplication, SQL in modele, am cuplat URL-ul de modele etc… care toate au dus la o avansare din ce in ce mai ingreunata asa ca am decis sa iau ce am invatat de acolo si sa ma opresc fara sa mai fac o incercare de rework sau macar un mic refactoring.

Acum, am foarte multe intrebari despre cum pot face aplicatia, dar o luam pe layer-uri

Sumar

In primul rand pe partea de routing / HTMLrequest ma pot inspira de la framework-uri; la partea de Presenter si View probabil am sa trimit DO-urile din domain layer in presenter si prin getters sa pot extrage text-ul pentru a-l afisa in view ( nu stiu daca se practica dar momentan nu reprezinta o problema cat timp nu cuplez domeniul de view ); Pe partea de persistence, cu " Repository pattern " pot implementa o strategie care salveaza aggregate-urile intr-un fisier text, precum a facut Bob cu FitNesse, pentru ca m-as complica enorm sa invat un ORM momentan ( si aici atat timp cat interfata repository-urilor e bine definita nu exista o problema de a schimba strategia pe viitor );

Cand vine vorba de application/domain layer sincer nu prea am inteles care-i diferenta intre un serviciu’ din application layer si unul din domain… o diferenta ar fi ca doar serviciile din domain se folosesc de interfete pentru a comunica vre-un modul din layer-ul de infrastructura; de SMTP spre exemplu, dar in rest totul este in ceata; O alta intrebare este legata de invariants, nu imi pot imagina cum ajunge din domeniu pana in view faptul ca eu am incercat sa setez un value object cu mai mult de 25 de caractere spre exemplu…; Dat fiind ca eu sunt singurul dev / utilizator / “domain expert” etc… sper sa nu existe probleme prea mari de comunicare :slight_smile: :slight_smile: singurele probleme ar fi sa gasesc cateva requirements cheie ( nu de alta dar nici eu nu stiu ce vreau… si nici ce fac ), UI-ul si cum aceste cerinte se incatreaza in UI si cea mai importanta cum o sa modelez domeni-ul… dar aici am sa descopar singur

Voi aveti vre-o poveste interesanta / vreo informatie? La voi cum a decurs tot procesul de invatare?

JavaScript cu TypeScript e mai valoros ca PHP, după ce îl știi bine și ai avut ceva proiecte te apuci de altceva. (sau nu) E bun pentru absolut tot ce îți imaginezi. Bonus nu e orientat doar pe obiecte fixe.

Pe back-end golang sau Kotlin sunt ușor de învățat, dar uita de ele până nu stăpânești TypeScript. PHP în opinia mea nu prea are sens dacă nu te plătește cineva, layerele de care zici se rezolva cu microservicii în ziua de azi. Dacă vrei să înveți OOP și pattern-uri Kotlin e foarte frumos și ai IntelliJ gratuit. Față de Java poți avea funcții fără clase. Cu golang nu ai nevoie de teoria cu OOP, ai doar funcții și type-uri. Programare procedurala la sange.

OOP-ul din cărți nu se mai recomandă în viața reală, inheritance-ul care se duce la dumnezeire în cărți e o problema, nu o soluție. (Dar trebuie să înțelegi de ce - prefer composition over inheritance) Clean Architecture e foarte opinionat si are exemple din Java, Java e un limbaj oribil pentru a arăta cum trebuie să arate cod bine scris. E singurul limbaj cu o unealtă care generează ce se cere structural cu OOP pentru getter/setter… (Lombok)

Abstractizarea înainte de a ști ce faci e iarăși o problemă…

Ai dat ca exemplu phpbb, e mult mai complex decât pare, e probabil cel mai complex lucru scris în php după Wordpress și eventual Magento.

2 Likes

Abstractizarea de care citesti in carti e buna doar cand esti stapan pe baza sau ai rezolvat deja problema respectiva prin metode proprii (si babesti). Atfel imi pare ca “te sui la volan si vrei sa pleci cu masina doar pentru ca ai vazut pe cineva facand asta”.

Nu prea am inteles de la ce nivel de cunostinte pleci dar as recomanda sa rezolvi fiecare situatia evaluandu-o cu cunostintele pe care le ai deja, fara a cauta tot timpul cea mai eficienta varianta pentru nu vei mai termina niciodata sau vei da de situatii care te vor face sa spui “asta nu-i de mine”.

Cu timpul vei ajunge sa-ti dai seama ce ai gresit in trecut si vei evolua dar sa incerci in 6 luni sa ajungi la cunostintele cuiva cu 5 ani de experienta doar aplicand direct metodele lui nu mi se pare realizabil.

2 Likes

Well, eu cred ca te apuci de framework-uri, sdk-uri, etc cand stapanesti foarte bine domeniul si chiar ai identificat o nisa unde tool-urile existente nu te multumesc. Un framework se presupune ca poate fi reutilizat in mai multe situatii si trebuie sa ai o experienta vasta ca sa faci unul bun. Nu iti recomand sa incepi direct cu asta. In. plus daca pe viitor vrei sa dezvolti ceva comercial nu te va lua multa lume in serios pentru ca aplicatiile tale vor fi mentenabile doar de tine (parca s-a mai discutat asta pe aici) .

pe de alta parte… poate fi o experienta excelenta de invatare (in opinia mea)

1 Like

Poate fi un toy project, dar sfatul meu ar fi ca propriul framework sa nu fie pus pe github. Un potential angajator il va citi si va cataliga autorul in mid incorect.

Mai e un aspect, oamenii tin la codul scris de ei si tind sa isi foloseasca acest toy project si in viitor, ori asta e gresit.

In trecut (acum multi ani) recomandam inceperea cu un framework subtirel dar f bine documentat (codeigniter pt php, flask pt python).

1 Like