Refactoring – hvordan man på meget kort tid kan få alt til at f**** op

Skrevet - Friday, June 13th, 2008 kl. 21:45 | Kategori - * Kodning

Jeg har en fast metode, når jeg skal have noget til at virke, jeg ikke har prøvet før:

  1. prototype /proof of concept
  2. udvidelse af prototype til at omfatte to+ scenarier
  3. tests
  4. refactoring
  5. flere tests
  6. finpudsning og opdatering af dokumentation

Og den vigtigste bestanddel – commit til repository efter hvert punkt – og som udgangspunkt, hver gang det compiler undervejs. Det er ikke noget jeg altid har gjort, men på det seneste er det simpelthen blevet en nødvendighed for at jeg kan holde mit forbrug af hardware nede…

Især når jeg beskæftiger mig med ny teknologi, har jeg en tendens til at min prototype virker bedre end min kode undervejs i forløbet. Jeg tror det er en intellektuel barriere – den der nagende “hvis nu man … så … understøtte alt… ny dyb tallerken…”. Når jeg efterhånden har afsøgt alle muligheder for forbedringer, går jeg som regel tilbage til sidst virkende prototype og kigger, hvad der egentlig var formålet – og så! bygger jeg min endelige kode inklusive refactoring.

For at give et eksempel – mit liv er for kort til selv at sætte kolonner op i grids – folk (læs: brugere) vil alligevel have en anden (og dårligere) opsætning end jeg vil. Derfor laver jeg sådan noget generisk og putter det i databasen, så folk selv kan sætte det op. Så har jeg også en standardopsætning, de kan få tilbage, når de har f***** det op. Samtidig kan jeg godt lide 3D grids (ja det kan man godt – bare tænk rækker og kolonner, og så rækker inde i hver celle). De kan give et enormt overblik over komplekse data på meget lidt plads. De fleste programmører laver en klassisk fejl ved at begrænse sig til 2D grids – der er alligevel ikke nogen, der kan overskue mere end 20 rækker i en grid.

Når nu dovenskaben lever så godt i mig, blev jeg på et tidspunkt irriteret over at jeg konstant glemte at putte nyoprettede properties i eksisterende grids, at jeg lavede en funktion (søg på EDGV her på siden) til at danne det hele automatisk. Nu er WPF jo så landet på mit bord – og ting virker ikke heeelt som det plejer. Så jeg startede forfra – ny prototype. Efter at have bokset med DataBinding i WPF i en uges tid, havde jeg en prototype, der virkede. Den var databundet, den tog alle properties med (opsætningen har jeg folk til at lave den her gang) og den fin og overskuelig.

Så lavede jeg den om, så den virkede både til grids og til detail-views (tekstbokse til tekstfelter, combobokse til enums osv.). Så testede jeg… og alt var fint – pånær en enkel ting. Referentiel integritet. Og det var efter at jeg havde refaktoreret (jeg havde bevidst udskudt den del, fordi jeg havde et par… lad os kalde det udfordringer… i den forbindelse) – fordi jeg var presset til at vise noget. Så jeg skulle lave grundlæggende om i min refaktorerede kode… og således krakelerede hele min kode… lige nu virker intet, og jeg er nået så langt omkring, at jeg er temmelig sikker på at den er i samme stadie som min bil – der hvor man overvejer, om man skal kaste flere reperationer efter den.

Så kan jeg lære det. Når man nu har fundet en metode, der virker – bør man holde sig til den. Også når chefen står og ligner en drueagurk, der har ligget for længe i lage. Nå, tilbage til tegnebrædtet (og prototypen).

Feed | Trackback |

Post a Comment