Deci pentru cazul tau concret:
Constientizezi unde te afli, si vrei sa faci refactoring, dar vrei sa il faci “corect” (TDD de exemplu).
Eu as merge pe doua paliere in paralel in cazul tau, care la un moment dat vor converge, si intre care si exista un oarecare interplay.
Palierul 1: masarea codului
Cand faci un refactoring, te apuci de lucrurile marunte, care pot fi usor facute - si asta indiferent de cate stii sau nu stii. De exemplu, poti incepe prin a extrage valorile constante in constante simbolice - si a le pune in clase.
Daca ai avea experienta, ai avea o sansa mai mare sa construiesti acele clase intr-un mod in care nu va fi nevoie de atat de mult refactoring la ele in viitor. Insa cum nu ai experienta necesara, refactoringul va fi cel mai probabil necesar. DAR asta nu este o problema, imbratiseaza ideea de refactoring continuu (iterative development)
Si aici ne legam de palierul 2: analiza domeniului aplicatiei (si mai tarziu si designul)
Invata despre UML si analiza unui domeniu de business (analiza, nu designul). UML in sinea lui nu este ceva magic, dar este un mijloc bun de comunicare: atunci cand tu vei veni cu diagramele la mine, eu voi intelege din priviri ce idei vrei sa exprimi, deoarece e un limbaj standardizat, mereu consistent.
UML (de fapt, orice limbaj de diagramming, chiar si unul propriu, nu conteaza, atata timp cat e consistent) te va ajuta sa iti aduni si sa-ti sintetizezi gandurile, si sa vezi mai bine cum poti imbunatati acea structura de clase.
Cat despre analiza vs. design: in analiza descrii elemente de business, concepte “de zi cu zi”, nu clase, chiar daca in multe programe de desenat UML va scrie in capul unei diagrame “class diagram”, si in fata chenarelor va scrie “class Foo”.
Acum, ce ma intereseaza pe mine de la tine, si ce ar ajuta acest proiect:
- scrie tot ce iti trece prin minte in urma sfatului meu
- tine-ne la curent in legatura cu evolutia ta, venind cu feedback la puncte concrete din acest “ghid” care va apare, puncte de care te lovesti si tu in aventura ta
PS: palierul 1 suna a extrem de marunt, dar este de fapt o munca titanica de design, pentru ca tu in acel pas formalizezi conceptele din aplicatie. Critic in acest pas este sa numesti bine clasele si constantele. Modul de abordare, eleganta lui, ma face sa ma gandesc la baby step, giant step, pentru ca pe palierul 1 mergi in baby steps, dar pe palierul 2 in giant steps.