Dat ik hier niet eerder op gekomen ben… Jarenlang heb ik maatwerksoftware geschreven, waarbij sommige stukken gemakkelijk te genereren zijn: Entiteiten, de datalaag en de database zelf. Maar je kunt nog veel verder gaan.
Stel: Je beschrijft alles met metadata. Dus of je velden op schermen wilt hebben, hoe dat eruit moet zien, wat voor validaties er zijn. Op basis hiervan hoef je weinig of geen maatwerk code meer te schrijven. Hierdoor voorkom je, dat je fouten maakt. Bovendien vergeet je nooit meer om bij wijziging in het model velden toe te voegen op plaatsen waar dit gebruikt wordt.
Deze metadata kun je op verschillende momenten uitlezen: Tijdens compilatie van C# code (bijvoorbeeld uit attributen), of tijdens generatie van sourcecode. Dit laatste gaat sneller, omdat je geen reflectie hoeft toe te passen.
Ik ben nu een aardig eindje met mijn Excel Code Generator. Hierin kun je niet alleen C# code genereren uit een model (met classes, members, properties, methods, constructors en attributen), maar ook in-place templates gebruiken. De C# compiler is blijkbaar zelf zo slim niet, maar met wat kleine ingrepen kan ik dat vanuit VBA wel. Ik laad dus C# code in uit bestanden die je refereert, en hierin kun je placeholders opnemen waar ik dan uitvoer van templates in plak. Het voordeel is, dat je heel gemakkelijk repeterende code kunt voorkomen. En bij aanpassingen vergeet je code niet aan te passen, want dat gebeurt vanzelf.
Neem bijvoorbeeld alle properties van een entiteit: Die wil je niet alleen initialiseren in de constructor, maar bijvoorbeeld ook heen en weer kopiëren van en naar het scherm. Of andere dingen mee doen. Wat ik nu heb bedacht, is dat je template sets kunt maken. Een template set bevat een lijst met velden, en een lijst met templates. Zo kun je dezelfde set gegevens meerdere malen gebruiken.
Ik ben er van overtuigd, dat dit veel voordelen oplevert. Minder fouten, beter onderhoudbare code, en een beter overzicht van de structuur. In het model zie je namelijk de structuur van de classes, en ook waar bepaalde onderdelen (zoals properties) weer gebruikt worden. Zo zie je niet gauw over het hoofd, dat bij het wijzigen van properties ook op andere plaatsen iets moet gebeuren.
De Excel Code Generator is al behoorlijk goed, maar het is nog niet perfect. Ik hed bedacht dat ik ook automatisch code wil uitlijnen. Dit is nodig, omdat ik zelf de complete structuur van de C# files schrijf. En ik laad ook bestanden in waarnaar gerefereerd wordt (de implementaties van de methoden, constructors en custom properties), en hierin ga ik placeholders vervangen met code. Hierbij zou je automatisch willen uitlijnen. Maar dit lukt me nog niet 100%.
Hoe dan ook: Ik denk dat dit toekomst heeft, en dat dit me veel voordelen biedt. Wie weet ga ik dit product nog eens promoten, op het moment dat er vraag naar is…
Happy coding!