MENU

Begin de sprint met een nieuwe oplevering

Reply

Bij MetaFactory ontwikkelen we aan twee verschillende projecten met dezelfde architectuur: AngularJS en Java met o.a. Spring. Na iedere sprint van 2 weken wisselen we met ons kleine team van project 1 naar project 2 en weer terug. Doordat we in beide projecten gebruik maken van dezelfde MetaFactory patterns kunnen we iedere sprint beginnen met een oplevering en eindigen met een oplevering.

Working on 2 projects with MetaFactory

Gelijktijdig werken aan 2 projecten met MetaFactory

Twee projecten tegelijk

Bij MetaFactory doen we momenteel 2 projecten tegelijk. Na elke sprint van 2 weken wisselen we van project en gaan we weer met het andere project verder. Beide klanten willen namelijk zo snel mogelijk hun applicatie hebben, dus met ons redelijk kleine team hebben we een uitdaging. Wij maken gebruik van SDA (Software Development Automation), waarvoor we gebruik maken van onze eigen tool genaamd MetaFactory.

Software Development Automation

Bij SDA typt de ontwikkelaar niet zelf meer alle code in, maar maakt hij een model (het datamodel met alle entiteiten) en een pattern (de vastlegging van de volledige architectuur). Voor meer informatie over SDA bekijk bijvoorbeeld deze blog https://www.metafactory.nl/software-development-automation/.

Handmatig schrijven zoekfunctionaliteit

In onze sprint voor het ene project wilden we zoekfunctionaliteit toevoegen. Deze zoekfunctionaliteit wordt toegevoegd aan het scherm met de tabel met alle records voor een bepaald scherm. We begonnen met de lijst van personen. Boven de tabel komt een panel met zoekcriteria om te zoeken naar personen: zoek op voornaam, achternaam en geboortedatum. Deze zoekfunctionaliteit wordt eerst handmatig uitgecodeerd in AngularJS en in Java.

Het maken van een pattern en model

Als deze zoekfunctionaliteit werkt voor de lijst met personen, dan maken we hier een pattern van. In dit pattern wordt vastgelegd hoe de zoekfunctionaliteit gebouwd moet worden, maar dan in termen van het model.

Model en metadata

Via metadata wordt in de persoon entiteit allereerst aangegeven dat deze tabel zoekfunctionaliteit heeft middels de metadata search=true. Bij de velden van de persoon entiteit waarop gezocht moet worden wordt via metadata searchField=true aangegeven dat dit de doorzoekbare velden zijn: firstname, lastname en birthdate. Vervolgens wordt in het pattern aangegeven dat er voor alle entiteiten waar de metadata search=true staat er een search panel moet komen in het scherm met de tabel met alle entiteiten en dat er gezocht kan worden op alle velden met searchField=true. Ook in het pattern van de controllers en in het pattern van de repositories (de dao’s) wordt deze metadata gebruikt om onder andere een extra methode toe te voegen. Metadata type op de velden van de entiteit wordt gebruikt om vast te leggen hoe gezocht moet worden. Bij firstname en lastname is type=string, bij birthdate is type=date.

Een pattern voor zoekfunctionaliteit

Omdat we de broncode voor de zoekfunctionaliteit voor het eerste object met de hand hebben geschreven weten we precies wat we moeten doen . Tijdens het maken van een pattern op basis van de handgeschreven broncode wordt de broncode volledig vastgelegd in termen van het model. Person wordt nu dus entityName, firstName wordt attributeName et cetera. Voor het vastleggen van dit pattern wordt veel gebruik gemaakt van de template engine Freemarker. Hierin kunnen we makkelijk via if-then-else constructies vastleggen dat voor ieder veld type (string, date, boolean, long et cetera) aparte zoekcode moet komen. Als we alle stappen om tot onze zoekfunctionaliteit te komen hebben vastgelegd, dan produceren we met MetaFactory de bestaande code voor het zoeken naar personen opnieuw. Als alles goed is, dan zien we precies dezelfde code (of hoogstens kleine verschillen of zelfs verbeteringen). Harstikke mooi, we hebben nu hetzelfde stukje code nog een keer gemaakt, maar dan via MetaFactory op de SDA manier. Het grote voordeel is dat we nu in ons datamodel bij andere entiteiten ook de metadata search=true kunnen toevoegen. Als we dit bijvoorbeeld bij de Company en bij de Address entiteit doen en we voegen ook aan hun zoekvelden de metadata toe om er naar te kunnen zoeken, dan krijgen we direct de volledige zoekfunctionaliteit voor het zoeken naar Companies en naar Adresses. Ideaal! We hebben het fenomeen “meer van hetzelfde” programmeren teruggebracht door het toevoegen van metadata aan objecten en het maken van een pattern voor het zoeken.

Sorting, paging, validations et cetera

Op deze manier hebben we de afgelopen maanden veel functionaliteit in onze applicaties toegevoegd, zoals sortering, paginering, filtering, validaties in dialoog schermen et cetera.

Twee projecten met dezelfde architectuur

Zoals ik al schreef werken we volgens de hierboven beschreven SDA methode aan 2 projecten tegelijk. Deze projecten zijn heel verschillend, maar hebben wel een vergelijkbare architectuur: spring boot, spring data, spring rest, JPA, spring security en AngularJS. Tevens gebruiken we dezelfde patterns om de applicaties te bouwen met MetaFactory.

Begin de sprint met een oplevering

Gevolg is dat verbeteringen in de ene applicatie direct bruikbaar zijn in de andere applicatie, immers alle verbeteringen zijn vastgelegd in patterns en op een abstracte manier beschreven in termen van het model. Tegenwoordig beginnen wij elke sprint met een oplevering waarin alle verbeteringen uit de vorige sprint (van het vorige project) zijn toegepast, door alleen maar metadata toe te voegen aan de modellen. Zonder dat we een regel code hoeven te schrijven! Uiteraard eindigen we de sprint ook met een oplevering. Hier worden wij blij van en de klant is ook tevreden.



Laat een reactie achter