Hoeveel laagjes heb je nodig om een gloeilamp te vervangen

Toen de Goden de multi-tier architectuur bedachten, hebben ze de wereld een prachtig model geschapen om software te ontwikkelen.  Programmeurs overal ter lande begonnen hun applicatie in meerdere lagen op te delen. Het opdelen in drie lagen werd algauw het meest populair. Eén laag voor de gegevens, genesteld in een databank. Eén laag voor het bewerken van die data, zoals beschreven in het domein. En één laag voor het tonen van die data, over het web of lokaal.

Deze scheiding werd expliciet gemaakt: elke laag kreeg zijn eigen project in Visual Studio, zijn eigen unittesten en zijn eigen interfaces. Want de heilige Scheiding der Lagen mocht enkel doorbroken worden door de Interface. De priesters van IoC, DI en Service Location zorgden ervoor dat we gemakkelijk de weg vonden naar deze bruggen over de Scheiding der Lagen.

Alles was goed in software land. Projecten werden op tijd opgeleverd, programmeurs waren gelukkig en vonden tijd om aan sport te doen, helpdesktelefoons waren stil… Maar was alles echt wel zoals het leek? Was er niet hier en daar een gemorrel van een ontevreden programmeur? Zou het kunnen dat de Scheiding Der Lagen dan toch niet het einde betekende van de eeuwenlange zoektocht van de mensheid naar een goed model van softwareontwikkeling? Wat lezen we plots op twitter?

“Als je 1 veldje al op bijna 7 lagen moeten toevoegen hebt, weet je dat een applicatie "slightly" overengineered is...”

Heiligschennis! Of niet? Wat schrijft die raaskallende Israëliet daar op zijn blog?

…the interfaces that it has reveal a common problem, namely, interface explosion, or over abstraction. (…) The problem is that the way this application is structured, it is highly procedural and had to maintain.

Zou er misschien een andere manier mogelijk zijn? Zou het werkbaar zijn om een degelijke applicatie te maken zonder onze Drie (of meer) Lagen expliciet te gaan definiëren?

Alle gekheid op een stokje: Ik was gefascineerd door het alternatief dat Ayende op zijn blog omschreef. Zijn voorbeelden bleven beperkt tot wat pseudo-code, maar ik wilde dit toch eens wat concreter bekijken. Een goed idee voor een reeks blogposts dus. Ik ga mezelf wel een aantal beperkingen opleggen:

  • Het wordt een WebForms applicatie
  • We gebruiken NHibernate
  • Alles moet onder testen staan
  • Alle code zal in een publieke github repository staan
  • We nemen .net 4.5 als framework

Op die manier kan ik een aantal extra dingen meenemen die niet direct te maken hebben met het onderwerp. Als er iemand een goed idee heeft voor een applicatie die ik zou ontwikkelen, laat me dan maar weten.