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.