DDD en DSL: een mooie combinatie!

Werken met een domeingedreven applicatie architectuur is mooi. Daarnaast zien we nu veel gesproken worden over DSL. Zeker in de Microsoft wereld is dit een hot topic. In dit artikel hebben we kort beschreven hoe DSL’s gebruikt kunnen worden in een domeingedreven ontwikkelomgeving. Het artikel:
DDD en DSL.

Overigens binnen Sogyo hebben een DSL ontwikkeld om NHibernate mappings en configuraties bestanden te genereren. Een goed voorbeeld van een horizontale DSL die vooral veel herhalend werk uit handen neemt. Mocht je hiermee aan de slag willen stuur dan ff een mailtje.

Gepubliceerd op
Gecategoriseerd als Publicatie

SDC presentatie

Afgelopen dinsdag heb ik op de SDC een korte presentatie over DDD en DSL gegeven. Tijdens deze sessie heb ik laten zien hoe je met een horizontale DSL ondersteuning kan leveren voor NHibernate persisitentie in een domein gedreven architectuur. We hebben met name discussie gevoerd en demo’s bekeken. De ondersteunende slides voor de sessie vind je hier: DDD en DSL een mooie combinatie!.

Vanuit Sogyo overwegen we de DSL voor NHibernate open source te gaan maken. Er moet dan nog eerst een aantal uitbreidingen doorgevoerd worden die we op onze wensen lijst hebben staan. Interessante van deze DSL is dat je geen zorgen meer hoeft te maken over het maken van de mapping en configuratie files. Dit levert op dat bijvoorbeeld front-end ontwikkelaars hun werk kunnen persisiteren zonder diepgaande kennis over NHibernate te hebben. Het verbergt dus een deel van de complexiteit. Dit is wat mij betreft ook de grootste toegevoegde waarde van DSL. Interessant genoeg om er verder mee aan de slag te gaan.

Mocht je er meer over willen lezen. Samen met Andre Boonzaaijer ben ik een artikel aan het schrijven voor Software Release Magazine hierover. Wil je meer tijd vrij maken dan is het boek van Steve Cook echt het aanraden waar: Domain-Specific Languages with Visual Studio Tools een aanrader.

Gepubliceerd op
Gecategoriseerd als Blog

Ontmoeting Eric Evans

5 juli was er een besloten bijeenkomst waarin Eric Evans een korte introductie gaf in zijn werk rondom Domain Driven Design. Een zeer interessante dag. We hebben discussies gevoerd over modeleerstijlen. Wat me het meeste opviel is dat Evans vrij vroeg in het design proces rekening houd met techniek. Op zichzelf voelt dat goed, omdat je dan ook pragmatisch te werk gaat. Wat minder goed aanvoelt is dat wat mij betreft het domein altijd los staat van techniek. Hij heeft ruime tijd stil gestaan bij het concept van Ubiquitous Language. Dit is ook een van de punten die mij het meeste trekt in zijn werk. Het idee is dat je opzoek gaat naar de taal van het business domein. Samen met domeinexpert probeer je de termen boven water te krijgen die voor de business waardevol zijn. Daarbij gaf hij zeer bruikbare tips hoe dit verder uit te voeren.
 
Eigenlijk was een dag te kort. Juist als het echt interessant wordt is de dag voorbij. Een van de belangrijkste punten die nog openstaan is de relatie van de ambiguous language met OO ontwerpregels. In onze praktijk streven we namelijk zoveel mogelijk na om de termen uit de business rechtstreeks in een domeinmodel te modeleren. Echter naast de termen gaat het ook om verantwoordelijkheden die in een domeinmodel belegd moeten worden. De verantwoordelijkheden moeten dusdanig ingevuld worden dat het domeinmodel volledig op zichzelf de scenario’s van de use cases kan vervullen. Dan gelden dus ook de OO ontwerpregels voor een domeinmodel.
 
In ieder geval een leuke dag. Zeker de moeite waard om met hem verder te gaan mailen.. Wie weet komt er weer een vervolg. Een interessante man om verder mee te praten.
 
Gepubliceerd op
Gecategoriseerd als Blog, DDD

Waar ligt de essentie van jouw software?

Hierboven staat een vraag die je niet dagelijks zult krijgen. Toch is het in de software ontwikkeling wel één van de belangrijkste dingen om bij stil te staan. Waar draait het nu eigenlijk om in je software? Draait je software om de database? Draait het om de User Interface?

Het zou kunnen dat je veel gegevens opslaat en muteert. Dan is de database belangrijk, maar in dat geval betekent dat, dat je veel CRUD-activiteiten uitvoert. Daar ligt immers de kracht van onze relationele databases.

Als het om de UI draait, zijn vanzelfsprekend de schermen die onze gebruikers te zien krijgen van belang. De schermen zijn vaak het aanknopingspunt met de gebruikers van de software: door de functionaliteit te visualiseren, wordt immers voor de gebruiker duidelijk wat de software zou moeten doen.

Dit alles neemt niet weg, dat we de essentie van de meeste software niet terugvinden in de databases of de UI. Om de essentie van software vast te stellen is het handig een blik te werpen op het werk van Fredrik Brooks. In “No Silver Bullet” beschrijft hij het verschil tussen de essential complexity en accidental complexity. Vrij vertaald zegt hij daarin dat we in onze software onderscheid moeten maken tussen de delen die de kernproblematiek (essential) ondersteunen en alle faciliterende logica (accidental). Wanneer we dat relateren aan de software die we maken, dan gaat het in de kern om de logica die onze businessprocessen ondersteunen. De essentie van onze software vinden we dan dus niet terug in de database of UI. Daar willen we immers de businesslogica niet in plaatsen.

Dit maakt dat Domain Driven Design op dit moment zoveel aandacht geniet: alleen in een domeinmodel plaatsen we namelijk puur en alleen alle logica die onze businessprocessen representeert. Om deze kern van logica draait onze software. Dat is de essentie!

Als het domein (met daarin de businesslogica) de essentie is, dan is volgens het denken van Brooks de overige logica slechts faciliterend. Deze overige logica zorgt ervoor dat we in staat zijn ons domein in haar levencyclus te ondersteunen. Anders gezegd: het domein (dat de businessprocessen ondersteunt) maakt de software uniek.

De faciliterende onderdelen zijn niet uniek voor het domein. Daarom kunnen die onderdelen generiek gemaakt worden en makkelijk hergebruikt worden om verschillende domeinen te ondersteunen. Deze logica kan in frameworks belanden, of misschien zelfs in taal. Technieken als Domein Specific Languages maken het mogelijk om deze functionaliteit in tekstuele dan wel visuele talen te plaatsen. Vervolgens kan vanuit deze talen de concrete implementatie genereert worden.

Ondanks het feit dat het soms lijkt dat onze software draait om de database of de schermen, blijkt dat de businesslogica de uiteindelijke kern vormt. Door deze centraal te stellen en onafhankelijk te maken van alle andere code eromheen, leggen we daar de focus op in onze software. De overige onderdelen kunnen we daarna genereren of zoveel mogelijk in standaard frameworks plaatsen. Wanneer je frameworks als Spring of Seam toepast, is het goed om de essentie van je software in de gaten te houden. Zorg er dus voor dat deze frameworks je businessdomein faciliteren!

Gepubliceerd op
Gecategoriseerd als Publicatie

DDD in de praktijk

Dit artikel is verschenen in de New Stuff (het blad van de SDN) van April 2007. We (Andre Boonzaaijer en ik) zetten in het artikel een aantal implementatie strategieen uiteen. Goed om over na te denken om te zien welke oplossing het beste werkt in je eigen partijk. Download het artikel in PDF DDD in de praktijk.

Gepubliceerd op
Gecategoriseerd als Publicatie

Domain Driven Design and Lego Mindstorms NXT

Met Lego Mindstorms wil ik duidelijk maken hoe Domain Driven Design in de praktijk toegepast kan worden. In dit voorbeeld heb ik een implementatie gemaakt om een Robot aan te sturen.

De implementatie is gemaakt in Microsoft .NET 2.0. Je kunt hem hier downloaden. Om de applicatie te laten werken heb je de NXT nodig. Deze kan via bluetooth met  je PC communiceren. In de sources van de applicatie vindt je, in de services map, een class MindStormService. Deze class bevat een constante die de COM-port weergeeft voor de bluetooth communicatie.

Deze implementatie maakt overigens gebruik van NXT#. Dit is de LegoMindstorms Interface die te vinden is op: NXTsharp.fokke.net.

 

Gepubliceerd op
Gecategoriseerd als Demo

Spreken op SDC, onderwerp: DDD en DSL: een mooie combinatie!

17 september 2007: DDD en DSL: een mooie combinatie!. Op de SDC. Ja, ze beginnen beide met de D van Domain: Domain Driven Design en Domain Specific Languages. Toch zijn het heel verschillende dingen. DDD gaat met name over een manier van denken en ontwerpen. Dit resulteert in een applicatie architectuur. DSL’s kunnen we maken om domeinen mee te implementeren.

Er is duidelijk raakvlak tussen deze twee onderwerpen. We kunnen DSL’s maken om DDD eenvoudiger toepasbaar te maken in de praktijk. Dan is het natuurlijk wel de vraag wat we van een DSL mogen verwachten.

In deze sessie staan we stil bij het ontwikkelen van DSL voor een specifiek business domein, het centrale punt in de DDD benadering. Daarnaast gaan we kijken hoe DSL’s ingezet kunnen worden om het toepassen van DDD laagdrempelig te maken.

Stel je voor: een DSL die het mogelijk maakt om je Domein (objecten) te persisteren. In deze sessie wordt duidelijk of het kan en hoe het kan.

Deze sessie zal ik samen met Andre Boonzaaijer verzorgen.

Gepubliceerd op
Gecategoriseerd als Agenda

Agenda tot 13 juni 2007

13 juni 2007: Functioneel prototyping met NakedObjects. NakedObjects is een applicatie ontwikkelframework voor zowel Java als .NET. In dit framework genereert alle infrastructuur voor POJO’s en POCO’s. Zo wordt de GUI automatische afgeleid en worden de objecten gepersisteert. Tijdens deze presentatie laten we zien hier je middels dit soort frameworks kunt prototypen.

1 juni 2007: DDD in de praktijk. Tijdens deze presentatie zal ik samen met Andre Boonzaaijer een domein uitbouwen en vervolgens ontsluiten naar een WPF GUI. Het domein wordt gepersisteert met NHibernate. De discussie met het publiek wordt gezocht om vast te stellen of deze methode ook in hun praktijk werkt.

12 mei 2007: DDD in de praktijk. Op de eerste Code Camp van de SDN, DotNED en VB.NET stichting zal ik samen met Andre Boonzaaijer een presentatie/discussie houden over DDD in praktijk. Tijdens deze sessie komen de praktische ontwerp vraagstukken aanbod voor DDD implementaties. Zie de site van Code Camp

3 mei 2007: Domain Driven Design. Sioux Embedded Systems geeft een reeks seminars. Op 3 mei zal deze reeks worden geopend. In de reeks spreken ook: Paolo Perrotta, Markus Völter en Ivar Jacobson.

23 maart 2007: Domain Driven Programming a Lego Mindstorms Robot op het Software Developer Event. Tijdens verschillende sessies georganiseerd in tracks die betrekking hebben op talen en platformen. Voor de C# track zal ik een presentatie verzorgen rondom Domain Driven Programming. De Lego Mindstroms Robot wordt gebruikt om dit te uit te leggen.

22 februari 2007: Domain Driven Design and Developement with LegoMindstorms voor DotNed.
In deze avond sessie wordt het basis concept achter Domain Driven Design and Development aan de hand van LegoMindstroms getoond. Dit vindt plaatst in het .NET platform. Gedurende de sessie zal gediscusseerd worden over de toepasbaarheid en de voor- en nadelen van deze aanpak.

4 december 2006: Architectuur van Web 2.0 applicaties. Tijdens deze bijeenkomst die opgezet is door Economische Zaken worden meerdere parallelsessies gehouden. In deze sessie wordt de relatie gelegd tussen Web 2.0 en (applicatie) architectuur. Zie blogEvents voor een korte impressie van de sessie.

27 november 2006: XML en Web Services Essentials bij CIBIT. Tijdens deze eendagstraining wordt de basis rondom XML en Web Services besproken. Toepassingen en voor- en nadelen van deze standarden worden behandeld. Zie de CIBIT website voor meer informatie.

24 oktober 2006: Trends in Systeemontwikkeling voor Be-value
Tijdens dit mini seminar komen onderwerpen aan bod als:

  • De rol van modeleren, Microsoft DSL en Domain Driven Design
  • Nieuwe talen (Ruby met on rails) en vernieuwing in talen (LINQ)
  • Ideeen achter een Software Ontwikkelstraat

16 oktorber en 3 november 2006: Workshop “Anedia: van COBOL naar een architectuur voor de toekomst.” Deze workshop is verspreid over twee dagdelen verzorgd derde en vierde jaars Informatica studenten van de Hogeschool Leiden.

11 oktober 2006: Presentatie op de J-Fall. De presentatie gaat over domain driven programming in praktijk. Samen met mijn collega Ferry van den Berg zal ik een presentatie geven over domain driven programming. Hierbij zal een voorbeeld gegeven worden met LegoMindstroms. Zie hier onder voor meer informatie over deze presentatie. Het gehele programma van de J-Fall vindt je op de site van de NLJUG.

19 september 2006: SOA Essentials bij CIBIT. Deze cursus geeft een introductie op service oriented architectures. Vragen waarom een SOA in te richten? Wat services zijn? Welke rol de ESB speelt? staan deze dag centraal. Zie de CIBIT website voor meer informatie.

3 juli 2006: Youngwood relatie en medewerker event  Tijdens dit event heeft Edwin een presentatie verzorgd over trends in software ontwikkeling.

23 mei 2006: Mobile Desgin seminar bij Mediaplaza. Als keynote is de presentatie “Mobile design: technisch makkelijk?” verzorgd. Deze kun je bij Mediaplaza bekijken.

18 mei en 23 mei 2006: Workshop “Anedia: van COBOL naar een architectuur voor de toekomst.” Deze workshop is verspreid over twee dagdelen verzorgd derde en vierde jaars Informatica studenten van de Hogeschool Utrecht

15 maart 2006: Saxion Hogeschool “SOA: IT Architectuur met toekomst?Voor derde en vierde jaars Informatica studenten is een presentatie verzorgd over SOA en de toepassingsmogelijkheden.

Gepubliceerd op
Gecategoriseerd als Agenda

Text mining for portals: Giving words a meaning

Parallel aan mijn werk in praktijk heb ik een Master of Science gevolgd bij CIBIT. Om deze studie af te ronden heb ik onderzocht hoe Text Mining technologie toegepast kon worden voor een organisatie als CIBIT. Vanuit de literatuur heb ik uiteengezet wat Text Mining behelst en vervolgens aan de hand van tools van Autonomy vastgesteld wat deze voor CIBIT konden betekenen. Download de thesis hier in PDF: Text mining for portals: Giving words a meaning.

Gepubliceerd op
Gecategoriseerd als Publicatie