martedì 29 maggio 2012

Introduzione a Flag Driven Development

Credo che ad ogni sviluppatore sia capitato di lavorare con questo approccio, dalle dinamiche molto interessanti. Generalmente un prodotto o una una logica in un software comincia con un algoritmo del tipo:

per ogni x tale che x appartiene all'insieme A
esegui l'operazione f(x)


Inizialmente va tutto bene e tutti sono entusiasti del prodotto. Inevitabilmente qualcuno fa notare che così com'è non va bene, e bisognerebbe distinguere una situazione in cui l'operazione su x non va fatta.

La soluzione a questo problema, secondo l'approccio Flag Driven Development è: aggiungere un flag su x. Il nostro algoritmo diventa:

per ogni x tale che x appartiene all'insieme A 
   se x.flag = falso
      esegui l'operazione f(x)

Qualche volta il flag indica che bisogna eseguire un'altra funzione:



per ogni x tale che x appartiene all'insieme A 
   se x.flag = falso
      esegui l'operazione f(x)
   altrimenti
      esegui l'operazione g(x)


Come si vede, l'approccio è incrementale perché è sempre possibile aggiungere il flag del flag e rendere il sistema più potente:


per ogni x tale che x appartiene all'insieme A 
   se x.flag1 = falso
      se x.flag2 = falso
         esegui l'operazione f(x)
      altrimenti
         esegui l'operazione h(x)
   altrimenti
Bandiera del Regno d'Italia Napoleonico
      esegui l'operazione g(x)


Si può evitare il flag? Sì, ma perché dovremmo? Questo approccio è un obbrobrio? Anche secondo me, ciò non toglie che è sempre molto usato.
Nei prossimi post forse ritornerò sull'argomento per esplicitare meglio certe dinamiche o forse no.

Nessun commento: