AntonioGanci

Il blog di Antonio Ganci
posts - 201, comments - 420, trackbacks - 31

Un approccio per ottenere una architettura malleabile

Ho visto un certo interesse sul post sull'architettura malleabile proverò a fare qualche esempio su cosa ha funzionato nei progetti su cui ho lavorato o sto lavorando.

L'approccio con cui mi trovo meglio è quello di usare gli oggeti per creare un DSL interno che descriva il comportamento del sistema; questo rende la manutenzione molto più efficace perchè tendenzialmente viene modificata la descrizione del sistema e a nuove feature corrispondono di solito nuovi oggetti.

Proviamo a fare un esempio pratico. Devo realizzare il classico data entry. La prima cosa che viene in mente è quella di creare un nuovo progetto, creare una nuova form, piazzare i controlli, ecc.

La prima cosa che viene in mente solitamente è la meno efficace conviene quindi riflettere un po' di più su come arrivare al risultato.

Il designer è uno strumento molto comodo e potente con uno svantaggio: genera del codice su cui non abbiamo controllo e ne genera parecchio. Proviamo invece a descrivere cosa fa il sistema con il codice:

EditorControl.Label().Text("Cognome").PlaceOn(parent);

updateControl.TextWith(

    user => user.Name,

    (user, text) => user.Name = text)

    .On(EditorControl.TextBox().PlaceOn(parent));

In questo caso abbiamo definito come viene editata la property Name della classe User.

L'implementazione è più semplice di quello che possa sembrare. Ad esempio:

  public class EditorControl

  {

    public static TextEditorControl TextBox()

    {

      return new TextEditorControl(new TextBox());

    }

  }

Il layout dei controlli è gestito da un oggetto piuttosto semplice cosi' come lo scambio dei dati.

Con un approccio centralizzato cambiare il TextBox con un altro per tutte le form risulta un'operazione semplicissima.

Per raggiungere questo risultato i test scritti sono quasi esclusivamente acceptance test cioè test end-to-end, uno per ogni singolo scenario di ogni caso d'uso procedendo in maniera incrementale.

Print | posted on lunedì 19 aprile 2010 21:49 |

Feedback

Gravatar

# re: Un approccio per ottenere una architettura malleabile

Ho visto due approcci diversi in progetti su cui ho lavorato. Uno prevedeva una versione di sql server (msde) con una copia della struttura del database e la sincronizzazione veniva gestita dal servizio di repliche di sql server.
Un altra si basa su una serializzazione dei dati in xml in locale.
Comunque sono d'accordo che non è una cosa banale, ma il grosso del lavoro in questo caso è di analisi per capire i vari scenari di utilizzo della modalità offline.
20/04/2010 19:24 | Antonio Ganci
Gravatar

# re: Un approccio per ottenere una architettura malleabile

Ok, grazie per aver condiviso questo approccio!
21/04/2010 00:36 | Stefano
Gravatar

# re: Un approccio per ottenere una architettura malleabile

L'efficacia l'ho sperimentata quando ho sviluppato un'applicazione che sostanzialmente era una macchina a stati. Non riuscivo ad ottenere un design soddisfacente: nel senso che se dovendo modificare la macchina a stati facevo fatica e non mi sentivo confidente al 100%.
Ho provato alcune alternative, ma alla fine l'unica con cui mi sono sentito a mio agio era un DSL.
Un'altra cosa molto efficace è di scrivere test per ogni scenario e sviluppare in modo incrementale per scenari e non per "classi". Inizialmente pensavo che il TDD facesse in modo di "costringerti" ad un buon design nella realtà ho verificato che non basta.
21/04/2010 12:40 | Antonio Ganci
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET