Destruction-driven development

Jeg har kodet en del før jeg begynte på informatikk, men før stuiene var mønster (patterns) et ukjent begrep for meg. Siden PHP i lang tid var det foretrukne språket ble det gjerne gjort nyvinninger nettopp i dette språket (IRC-bot kan nevnes).

For en tid tilbake nevnte jeg en av mine “gode” idéer fra den gang for noen med-studenter, og øyeblikkelig kom navnet “destruction-driven development” opp. Konseptet er i og for seg ikke noe jeg har sett igjen i løpet av årene på Gløshaugen, samt at gjennomføringen er bundet mot utvikling på nett, fortrinnsvis i skripingspråk.

Av og til er det greit å hente inn noen standard-filer som blir til over tid (av litt for mange asiater på Aardvark kalt “custom framework”) for å lage til en demo, simpel to-siders løsning eller lignende, og i den forbindelse fant jeg at jeg ofte glemte å kjøre metoden som skulle vise resultatet til en bruker (mye “feilretting”). Med dette knyttet opp mot Smarty endte jeg opp med å ønske å lage sider slik:

<?php

require_once("autoload.php");
Template::setTemplate("page.tpl");

$t = Template::getInstance();
$t->assign("title", "Forside");
$t->assign("text", "Lorem ipsum...");

?>

Konseptet er å la presentasjon foregår på et punkt hvor man er sikker på at all logikk er kjørt, og hvilket bedre punkt enn ved kjøring av  Garbage Collector (GC) finnes? Ved å la destruction-metoden til template-objektet, som er en subklasse av Smarty, til å kjøre display()-metoden trenger ikke kodesnutten over å gjøre det, samt at jeg slipper å duplisere kode for å vise vise innhold. Se gjerne det vedlagte eksempelprosjekt som benytter Smarty.

Jeg ser i utgangspunktet to problemer med overstående kode, hvilket er grunnen til at jeg ikke vil bruke dette konseptet i prosjekter:

  1. Det vil gjøre prosjektet vanskeligere å feilrette.
  2. Implementasjonen av GC kan endre seg, og ved å oppdatere PHP kan man oppleve at alle sider er blanke. (Les: flere ting som potensielt kan gå galt)

# #

2 kommentarer til “Destruction-driven development”

  1. dvj skriver:

    Ser for meg værre ting som en GC kunne funnet på.

    Tekt deg at:
    1) Prosessen gjenbrukes til flere sidevisninger å få bedre ytelse.
    2) GC-en velger å ikke kjøre ved slutten av hver pageviews for å spare deallokering av minne.
    3) Plutselig ved en pageview blir det kraftig opprydding.

    Boom! Der fikk tilfeldig bruker servert innhold til flere andre brukere :) .

    Eneste språket jeg kanskje ville turt å (mis)bruke destruktorer slik ville kanskje vært C++, hvor det er opp til programmereren å sørge for destruering av objekter.

    • Erlend skriver:

      Du har helt rett i at misbruk av GC kan gi mange utilsiktede opplevelser, hvilket er grunnen til at jeg ikke anbefaler noen å bruke det.

      Uavhengig av hvor smart det er så er det et artig konsept, men om man som utvikler begynner å nærme seg en slik løsning på eget prosjekt bør man kanskje tenke seg om en ekstra gang.

      Kvalifiserer det til å være et anti-pattern?

Legg igjen en kommentar