Convertirea codului vechi in ceva nou, modern, fara sa rescrii tot

Concret, as vrea sa trec de la cod scris in CI, fara unit test, fara design patterns implementate, de la modele si controllere de dimensiuni uriase, cu metode care au sute de linii, la un cod curat.
Daca as rescrie in Laravel, as sti cum sa fac. numai ca rescrierea iese din calcul. E prea mult cod.
S-a utilizat Codeigniter 1.7 la creare. Din ce-am citit, nu prea am gasit o metoda civilizata de a implementa PHPUnit sau PHPspec in variantele noi de CI. Sa nu mai zic pe ce versiune de PHP merge toata treaba…
Vazusem o conferinta a unui individ despre implementarea ideilor din Laravel in proiecte vechi, cu legacy code. Scriere de teste, refactoring, utilizare de pachete Laravel… dar nimic concret.
Partea de client, si ea este mult ramasa in urma. E scrisa in EXTjs 2 sau in unele cazuri 3. Principiile SOLID au fost incalcate in mod constant, iar conceptele noi, ca MVVM si ce mai e cool in extjs5 pur si simplu nu exista.
La unele aplicatii, daca vreau sa schmb ceva, trebuie sa citesc enorm de mult cod, si am oricum frica de a nu strica ceva ce mergea deja.
Credeti ca exista vreo solutie la o astfel de problema?

1 Like

Cu legătură:

DRY? :sunglasses:


Altfel, comentariul meu rămâne valabil.

Am gasit ceva interesant pe subiect. Am de citit, o vreme…

Da… la momentul actual, sunt limitat la refactoring low level. Fara chestii periculoase. Fara teste… e destul de enervant.
As vrea sa incerc ceva ce a recomandat un ins la o conferinta. Adica sa am o aplicatie in CI, iar alaturi, un framework Laravel. In timp, sa migrez cat mai multe responsabilitati in Larave. Problema e ca nu am habar cum as putea sa fac asta.
I-am intrebat si pe aia de pe Laracast, dar tot nelamurit sunt… Partea nasoala e ca sunt si in situatia sa nu pot experimenta cu ce vreau eu, ca nu am voie sa instalez softuri la munca. Mi-ar prinde tare bine o masina virtuala…
Problema mea e ca as avea pe server doua aplicatii complet diferite. M-ar tenta sa import practic tot CI-ul in Laravel, si sa-l tratez ca pe un singleton urias, din care sa-mi scot cate ceva de-a lungul timpului. Extrem de frustrant…

Aș zice că ai de rezolvat alte probleme, înainte de a rezolva aplicația CI.

Poate că ar trebui să-i convingi să-ți instaleze un vbox + vagrant…

Michael Feathers definește legacy code ca fiind orice cod ce nu are teste, indiferent de momentul în care l-ai scris. Chiar vrei să scrii un legacy app într-un alt legacy app?

1 Like

Banuiesc ca backbone-ul aplicatiei e o baza de date, nu? In cazul asta nu te opreste nimic sa pornesti o a doua aplicatie care sa lucreze cu acelasi db si macar chestiile noi sa le faci in aia daca nu preiei module intregi.

Spre exemplu, daca ai o parte a aplicatiei (sa zicem ca e dezvoltata in 50 de ore) si o sa ai de lucru la ea inca vreo 200 sau “fara numar”, probabil ca merita sa o refaci in aplicatia in care esti comfortabil si in care o poti controla mai usor/repede/eficient.

Eu am preluat o aplicație dezvoltată în perioada '95-96 în VB, ce trebuie să devină un SPA mobile-friendly. Singura soluție a fost cea care a menționat-o și @AdrianBasalic - dezvoltarea unei noi aplicații in paralel, folosind aceasi bază de date. Din păcate, este cam singura soluție de a scăpa cu adevărat de legacy code, pentru că în orice alt scenariu ajungi la:

Adica? Nu inteleg.

Un lucru e clar. Testele sunt esentiale. Prioritatea mea e acum sa invat sa implementez un test framework pe Codeigniter. Sper sa reusesc sa conving pe cine trebuie sa ma lase sa folosesc o masina virtuala pe care sa pot sa lucrez in linie de comanda.
Am reusit intr-un final sa-mi platesc subscriptia pe Tutsplus. Dupa ce am mai sapat pe-acolo, imi este clar ca mi-as dori sa reusesc sa implementez BDD cu codeception. Dar din ce-am citit pana acum, nu-mi e clar cum sa fac asta in Codeigniter. Speram sa existe o solutie o solutie deja la aceasta problema, dar faptul ca CI e scris fara namespace, si e scris pentru PHP5.2, ingreuneaza mult lucrurile. Trist e ca nici nu-si doresc sa treaca la PSR intr-un viitor apropiat.
Eram destul de chitit sa nu mai studiez chiar in detaliu mațele CI-ului, dar se pare că o să fiu nevoit să o fac. Iar asta mă enervează, că mă încetinește în studiul chestiilor care mă interesează cu adevărat… dar nu pot să le folosesc la muncă. Gen TDD, Laravel, Design Patterns…
Anyway… dacă aveți idee de cum să fac să integrez Codeception, sau măcar PHPUnit în Codeigniter, m-ar ajuta mult. Am găsit ceva link-uri, dar mai am de citit.

1 Like