Microsoft’s Smart Client Software Factory

 
30 juli 2008

Wat wil een software ontwikkelaar eigenlijk weten van de Smart Client Software Factory (SCSF) van Microsoft? Dit is de vraag die mij de afgelopen weken van tijd tot tijd heeft beziggehouden. Een niet geheel onbelangrijke vraag, want het is me opgevallen dat wat er al over de SCSF is geschreven er niet in slaagt om direct een helder beeld te scheppen. In ieder geval niet bij mij en gezien de vele vragen die er over gesteld worden, ook bij heleboel anderen niet.

Dit is de poging van Microsoft tot een “Overview” van de SCSF:
“This software factory provides proven solutions to common challenges found while building and operating composite smart client applications. It helps architects and developers build modular systems that can be built and deployed by independent teams. Applications built with the software factory use proven practices for operations, such as centralized exception logging.   

The software factory contains a collection of reusable components and libraries, Visual Studio 2008 solution templates, wizards and extensions, How-to topics, automated tests, extensive architecture documentation, patterns, and a reference implementation. The software factory uses Windows Forms, Windows Presentation Foundation, Windows Communication Foundation, and the Enterprise Library 3.1 – May 2007 release. With this release, the Composite UI Application Block is included in the software factory.”

Een samenvatting is geen opsomming
Het bovenstaande doet mij denken aan een belangrijke stelregel uit de debatwereld: “Een samenvatting is geen opsomming!”. Deze stelregel is zo bekend omdat beginnende debaters vrijwel altijd de fout maken om juist het tegenovergestelde te doen: hun laatste, samenvattende betoog van vijf minuten gebruiken om nog eens alles op te noemen wat ze al hebben gezegd.

Waarom werkt een opsomming niet als samenvatting? Dit is een leuke vraag, waar al veel over is geschreven, dus ik zal me hier tot de hoofdzaak beperken: een samenvatting moet juist de essentie van een verhaal abstraheren, of anders gezegd, een model ervan zijn. Het leuke hiervan is natuurlijk dat wij als software ontwikkelaars dit fenomeen kennen en ook regelmatig gebruiken: 3de generatie talen abstraheren de belangrijke concepten (in 80% van de gevallen) van 2de generatietalen, een domeinmodel modelleert een probleemdomein en laat daarbij juist ook onbelangrijke details weg.

De edele kunst van het weglaten. De bekende quote “Ik heb deze brief wat lang moeten maken, omdat ik niet de tijd had om hem in te korten.” [1] slaat de spijker op zijn kop. Alles wat een tekst of broncode meer bevat dan de essentie, leidt af en maakt het overbodig complex en zodoende minder effectief. Uiteraard zijn er hier natuurlijk nog legio verbanden te leggen, met name met bekende agile technieken zoals  refactoring [2] en de metafoor [3].  Maar… je had hem al door.. ik dwaal af.

En dan nu ter zake.. wat is dat dan, die SCSF?
Laten we ons weer richten op de originele vraag over de SCSF, want ik kan er nu wel een antwoord op geven. Ik denk dat de meeste software ontwikkelaars gebaat zijn bij een bondige omschrijving die blijft hangen. Gelukkig maar, want deze post begint al vrij lang te worden. Bovendien zijn de details allemaal wel te vinden in de beschrijving door Microsoft en een aantal andere pogingen. 

Eerst een kleine uitleg over een Composite Smart Client Application. Dit is een smart client die in één shell enkele losjes gekoppelde modules combineert. Ze delen bijvoorbeeld wel een menu, statusbalk en enkele services, maar zijn verder afgescheiden. Een smart client is de naam die met name door Microsoft [4] gebruikt wordt voor een client die de rich GUI van de aloude windows applicaties, bijvoorbeeld Word (de rich client) combineert met de connectedness van een browserapplicatie (de thin client).

De Smart Client Software Factory, die een dergelijke smart client als eindresultaat heeft, bestaat uit:
1)      Een aantal libraries die je de mogelijkheid bieden om een smart client met een samengestelde GUI te maken. Deze bevatten tevens oplossingen voor vaker voorkomende problemen als logging, caching, etc.
2)      De mogelijkheid om deze standaardelementen configurabel en volgens een vast patroon tot een applicatie te vormen, door middel van wizards in Visual Studio.

Meerdere libraries
De SCSF maakt gebruik van de Composite UI Application Block (CAB), die uitgaat van het inrichten van van de GUI van je smart client als een shell met daarin wisselende modules die onderling en met de shell los gekoppeld zijn. Zie figuur 1 voor een voorbeeld van een standaard configuratie van zo’n GUI. De koppeling tussen shell en modules en de modules onderling wordt gemaakt door events met een (string-based) url, standaard command objecten die runtime geladen worden en services die werken op basis van interfaces. Al deze koppelingen worden runtime gelegd door CAB als een module geladen wordt. Hierbij wordt ervan uitgegaan dat de modules en services in sterk wisselende samenstelling aanwezig kunnen zijn, vanwege voorkeuren, rollen en rechten van gebruikers en beschikbaar komen van nieuwe modules voor productie.

Basis opzet van een Composite Smart Client GUI
Figuur 1: Basis opzet van een Composite Smart Client GUI

Naast deze CAB wordt het gebruik van de Enterprise library aangeraden. Deze library bestaat uit een aantal andere Application Blocks met door microsoft voor .NET aangeraden patronen voor een aantal veel voorkomende technische probleemdomeinen. Onder andere logging, caching, security, maar kijk vooral op de website van microsoft wat betreft de Enterprise Library voor de volledige opsomming.

Code generatie voor de samenhang
De ontwikkelaars van het Patterns & Practices team van Microsoft heben bij het ontwikkelen van de CAB en de Enterprise libary een bepaalde manier van gebruik op het oog gehad (de door microsoft aangeraden patterns & practices). Deze manier van gebruik is in een aantal templates vastgelegd. Deze templates kunnen met een extensie van Visual Studio door middel van wizards en code-generatie geconfigureerd en toegevoegd worden aan de applicatie die je aan het ontwikkelen bent. Hiervoor wordt de Guidance Automation Extensie gebruikt. Deze genereerde code is vervolgens verder te configureren en uit te breiden.

Automation Guidance in Visual Studio  

Figuur 2 a en b: Gebruik van guidance automation voor wizards in Visual Studio

Is dit dan een software factory? Had dat niet iets met een ontwikkelstraat te maken?
Uiteraard is de naam “software factory”, net als veel termen in de IT, aan vele interpretaties onderhevig. Microsoft kiest ervoor om de hierboven beschreven oplossing en een aantal soortgelijke, (voor web services en mobile en web clients) software factories te noemen. Ontwikkelaars krijg je er van hen echter niet bij en ook andere vaak met software factories geassocieerde zaken als bijvoorbeeld version control systems, bug tracking systems en continuous integration servers zul je toch echt nog zelf in moeten richten.

Dat is nog geen antwoord, dus nogmaals de vraag: waarom dan de naam software factory?

De volgende argumenten pleiten voor het gebruik van de naam software factory:
Het eindresultaat van een software factory is normaal gesproken een composite (smart/web/mobile) application. Zo ook dat van de SCSF.
De SCSF bevat qua libraries en templates een groot deel van wat de meeste composite smart clients nodig hebben.
Het maakt het mogelijk voor één team om de templates aan te passen, toe te voegen en te verwijderen, zodat bepaalde bedrijfsbrede beslissingen en oplossingen voor alle individuele ontwikkelteams (van de modules) als basis om op te bouwen gebruikt kunnen worden. Hiervoor dient men de Guidance Automation toolkit te installeren, een soort SDK voor de Guidance Automation.

De invloed van software factories op software ontwikkeling
Gaat software ontwikkeling een industrieel proces worden en draagt deze Software Factory daaraan bij?

Uiteraard geldt hier dat “de beste moge winnen” en als het succes van Ordina [5] met haar ontwikkelstraat er iedereen uiteindelijk toe aanzet om ook een software factory te gaan gebruiken of het bijltje erbij neer te gooien, dan zal de tijd het ons leren. Maar tot nu toe blijkt de software werkelijkheid altijd weer net wat anders te zijn dan de “echte” wereld van de massaproductie en zijn fabrieken. De software factory sluit dan ook aan op een reeds lange traditie van pogingen om software ontwikkeling te automatiseren [6]. Overigens opvallend vaak met een focus op het sneller bouwen van software, niet op het onderhoud gedurende de levensduur.

Eigenlijk is elke keer dat een stuk software opnieuw gemaakt wordt, er één teveel. Dit betekent dat een sofware factory die zich bij zijn leest houdt, uiteindelijk niet veel om het lijf heeft: het zou ervoor moeten zorgen dat software ontwikkeling beperkt blijft tot het configureren en koppelen van een serie standaard componenten.

Persoonlijk vind ik software ontwikkeling in de “harde/echte” wereld nog het meeste vergelijkbaar met de architectuur en de engineering. In de engineering zijn wel vergelijkbare intiatieven te herkennen, maar is er bij mijn weten nog geen standaard waar iedereen mee werkt. En een architect die tegen een klant zegt: hoe wilt u uw droomhuis geconfigureerd hebben krijgt misschien hier en daar nog wel eens een vinex-wijk als kruimel toegeworpen, maar telt als architect toch niet echt mee. Voor de architectuur is de esthetiek de reden van het afwijzen van standaard ontwerpen, in de enterprise software de wens om concurrentievoordeel te halen uit de nieuwe software.

Men heeft er bij het bedenken van de structuur van een software factory rekening mee gehouden dat niet alles in een standaard mal van configuraties en koppelingen tussen standaard componenten is op te lossen, dus voorziet het in de configuratie en het herschrijven van modules op code niveau. In die zin lijkt het wat op SAP: je koopt het standaard pakket SAP, maar aan het einde van de bouw is elke SAP applicatie zo versleuteld, dat geen enkel SAPje hetzelfde smaakt. De vraag is dan wel weer welke voordelen nog overblijven van het ooit zo als ‘standaard’ gekochte pakket in onderhoud en uitbreidbaarheid.

Kortom, ik vermoed dat er ten eerste nog voldoende werk overblijft in en rond de fabriek. En ten tweede, belangrijker zelfs: écht vernieuwende applicaties, gui’s en architecturen ga je er niet vinden. Dat zijn de leuke projecten die overblijven. De krenten in de pap. En zolang er nog genoeg geklaagd wordt op onze huidige applicaties, is er nog voldoende behoefte aan die nieuwe mogelijkheden die nu nog niet bestaan. Ik vermoed dat software factories maar voor een deel van de markt een oplossing zijn: software huizen die veel van ongeveer hetzelfde opleveren. Je moet je volgens mij dus afvragen of je daartoe behoort voordat je ermee begint.


  1. Origineel in het Frans, toegeschreven aan de Franse filosoof Blaise Pascal, hoewel Cicero hier ook mee in verband wordt gebracht. Leuke achtergrond-informatie voor software ontwikkelaars is, dat Pascal één van de eerste rekenmachines heeft gemaakt en dat hij inderdaad de persoon is naar wie de bekende programmeertaal is vernoemd.
  2. Voor refactoring geldt bij uitstek dat meer tijd over het algemeen minder code betekent. Zie de WikiWikiWeb voor meer achtergrondinformatie over Refactoring
  3. Abstractie van een systeem ter verbetering van de communicatie in een ontwikkelteam. Zie de WikiWikiWeb voor meer uitleg over Metaphor
  4. De marketing afdeling van Microsoft wil je natuurlijk graag laten weten dat je slim bezig bent als je een dergelijke applicatie maakt, dat zal vast ook meegespeeld hebben.
  5. Ordina maakt gebruik van de software factory van Microsoft voor hun Ordina Software Factory. Zie: http://www.ordinasoftwarefactory.nl/~
  6. Denk aan de 4GL talen “grafisch programmeren”, CASE tools “met UML de software top-down ontwerpen”, de 5GL talen “beschrijf het eindresultaat en de rest komt vanzelf”.

Werken met ?
Kijk dan bij onze mogelijkheden voor zowel starters als ervaren engineers.


Categorieën: Architectuur, Development

Tags: , ,


Reacties (2)

  • Rick schreef:

    Hmmm.. heb ik eindelijk reactie op dit bericht… is het spam en een reactie daarop! :-)

    Geplaatst op 05 februari 2009 om 17:36 Permalink

  • Simon Klees schreef:

    Since you DO know how to linkspam, I figure you could easily find out how to click on that big orange ‘RSS’ tab on the top of the page.

    (Moderator, get over here please!)

    Geplaatst op 05 februari 2009 om 15:20 Permalink