Mendix is een model gestuurde snel ontwikkel platform.

De Mendix Desktop Modeler wordt gebruikt voor het ontwikkelen van Mendix applicaties. De desktop modeler is een C# applicatie voor Windows en is lange tijd de enige manier geweest om Mendix modellen te maken of aan te passen.

Het Mendix meta model voor de verschillende talen was embedded in de C# code, en herkenbaar door een aantal C# annotaties. De annotaties in de C# klasses waren onderdeel van het meta model en gaven specifieke aanwijzingen voor de wijze waarop een model opgeslagen diende te worden.

Toen Mendix besloot om een web modeler te ontwikkelen realiseerde men zich dat het noodzakelijk was om de garantie te hebben dat het meta model in C# en het meta model in de web modeler 100% consistent zou zijn.

Om dit te realiseren hebben we een custom mmeta model specificatie taal ontwikkeld (MxCore). Vervolgens hebben we het meta model voor zover mogelijk uit de C# geextraheerd en deit gebruikt als een eerste aanzet tot het meta model in MxCore.

Omdat de C# annotaties niet compleet waren, was het nodig om het meta model daarna met de jahand verder uit te werken.

Het resulterende meta model

The resulterende meta modelwordt moenteel gebuikt voor:

  • Het genereren van C# code, ter vervanging van de handgeschreven annotaties.
  • Het genereren van Scala code voor de Mendix runtime.
  • Het genereren van van documentatie referenties in de meta model documentatie..
  • Het generaren van meta model diagrammen voor het gebruik in gebruikers documentatie. Zie bijvoorbeeld de diagrammen in [https://docs.mendix.com/apidocs-mxsdk/mxsdk/domain-model-metamodel].
  • Het genereren van de Model SDK, een TypeScript/JavaScript SDK voor het lezen en aanpassen van Mendix modellen.
  • het genereren van het meta-model schema in JSON voor gebruik in de Model Server. Samen met de Model SDK, vormt dit het fundament van de Web Modeler.

Al deze gegenereerde zaken dienen aan te sluiten bij de al bestaande architectuur. Om dit te ondersteunen gebruiken we annotaties op het meta model per gegenereerde artefact type. Deze annotaties staan in aparte annotatie modellen.

Alles dat direct gegenereerd wordt voor de Web Modeler en de Model SDK heeft geen annotaties nodig, omdat er nog geen bestaande architectuur is.

Versionering

Het versioneren van modellen en meta modellen wordt vaak vergeten, of pas later(vaak te laat) toegevoegd als een extra feature. Het Mendix Meta Model verndared voortdurend, met als gevolg dat er bijna ieder maand een nieuwe versie is. Een van de requirements van de Model SDK is dan ook het ondersteunen van meerdere versies van het meta model met een versie van de SDK. Dit wordt ondersteund door zogenaamde versie-annotaties, waarmee een ontwikkelaar in een meta model kan aangeven voor welke versie(s) een specifiek onderdeel geldig is. Op basis hiervan wordt een Model SDK gegenereerd die alle versies van het meta model ondersteund.

Model Units en schaalbaarheid

In de desktop modeler, een windows applicatie, was het altijd mogelijk om'het hele model in het geheugen te houden. Voor de Web Modeler is het essentieel dat een onderdeel van een model gewijzigd kunnen worden zonder dat het hele model in de browser gedownload wordt. Hoe groter het model, des te belangrijker dit wordt.

Omk dit te faciliteren kent MxCore het concept van Model Unit. Het idee achhter een Model Unit is dat een model wordt opgeslitst in verschillende model units, waarbij iedere model unit een publiek en een prive deel kent. Het publieke deel heet ook wel de Model Unit Interface. Binnen een Model Unit kan dan alleen gerefereerd worden naar de publieke delen van andere model units. Op deze wijze is de web modeler schaalbaar, onafhankelijk van de grootte van het model.

Dit concept is eerder al beschreven onder de naam Partial Models op de ECMDA-FA 2007 conference in Building a Flexible Software Factory Using Partial Domain Specific Models.