Januari 2011 tot april 2012 - Dit is een eigen project dat ik in mijn vrije tijd ontwikkel. Het gaat om een bibliotheek die in staat is een gebruikers interface te genereren op basis van object interfaces (model) en gedragsdefinities. Dit gedrag kan gemanipuleerd worden door middel van attributen, XML configuratie of door code. Initieel heb ik een implementatie ontwikkeld voor WinForms, momenteel ben ik bezig met een implementatie voor WPF en een implementatie voor ASP.NET volgt daarna. Dit is een project dat ik voor mijzelf heb ontwikkeld en in de praktijk heb toegepast.

Tags:
C#.NET - Generic - Reflection - WinForms

Situatie

Op het project waar ik eind 2010 aan werkte moesten vele data entry schermen in WinForms gebouwd worden. Daarbij werd gebruik gemaakt van een controls library van een derde partij. Mede doordat er door meerdere ontwikkelaars aan verschillende schermen werd gewerkt, bleek het lastig een eenduidige gebruikerservaring te realiseren en werd er veelvuldig tegen dezelfde werkzaamheden en problemen aan gelopen.

Taken

Om dit in de toekomst te vermijden heb ik besloten een bibliotheek te bouwen, waarin op basis van gedrag, dat gedefinieerd wordt op de onderdelen van een model, een gebruikers interface wordt opgebouwd. Het doel was, om met een minimale inspanning een maximaal resultaat te bereiken, waarbij de programmeur zich alleen bezig houdt met de uitzonderingen, zoals specifieke validaties of acties bij het toevoegen aan of verwijderen uit verzamelingen.

Aanpak

Ik ben begonnen met het definiëren van een aantal standaard gedragsspecificaties (behaviors) voor de meest gangbare datatypes. Daarnaast heb ik interfaces en base classes gebouwd voor de implementatie van de te gebruiken controls, control providers en behavior providers. Door middel van de behavior providers kan op een generieke manier worden ingegrepen op het standaard gedrag van elementen in het model. Tot slot heb ik een implementatie gebouwd voor WinForms om toe te passen in het project waar ik op dat moment mee bezig was. De werkwijze bij het opbouwen van de schermen blijkt sterke overeenkomsten te vertonen met de layout containers in WPF.

Resultaat

Voor enkele schermen in het betreffende project is AutoGui toegepast, met goed resultaat. De schermen vergen nauwelijks ontwikkeltijd; bij uitbreiding van het model is doorgaans nauwelijks tot geen tijd gemoeid bij het uitbreiden van de gebruikers interface.