<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Technisch ontwerp &#187; Patterns</title>
	<atom:link href="http://www.technischontwerp.nl/category/patterns/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.technischontwerp.nl</link>
	<description>alles over het maken technische ontwerpen</description>
	<lastBuildDate>Thu, 14 Jan 2010 13:00:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Pattern van de Week deel 5: Adapter – Design Pattern</title>
		<link>http://www.technischontwerp.nl/2010/01/pattern-van-de-week-deel-5-adapter-%e2%80%93-design-pattern/</link>
		<comments>http://www.technischontwerp.nl/2010/01/pattern-van-de-week-deel-5-adapter-%e2%80%93-design-pattern/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 13:00:13 +0000</pubDate>
		<dc:creator>Bert Willems</dc:creator>
				<category><![CDATA[Patterns]]></category>
		<category><![CDATA[Design Patterns]]></category>

		<guid isPermaLink="false">http://www.technischontwerp.nl/?p=153</guid>
		<description><![CDATA[Deze week bespreek ik een van mijn favoriete patterns: het Adapter pattern. Ik vond de volgende definitie van het woord adapter: Aanpassingseenheid tussen twee systemen, meestal waarmee een toestel dat op laagspanning werkt ook op het lichtnet kan worden aangesloten. Wat mij betreft is dit een prima definitie want het beschrijft exact wat dit patroon [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-thumbnail wp-image-155 alignright" title="adapter" src="http://www.technischontwerp.nl/wp-content/uploads/2010/01/adapter-150x150.jpg" alt="" width="150" height="150" />Deze week bespreek ik een van mijn favoriete patterns: het Adapter pattern. Ik vond de volgende definitie van het woord adapter:</p>
<blockquote><p>Aanpassingseenheid tussen twee systemen, meestal waarmee een toestel dat op laagspanning werkt ook op het lichtnet kan worden aangesloten.</p></blockquote>
<p>Wat mij betreft is dit een prima definitie want het beschrijft exact wat dit patroon is: Aanpassingseenheid tussen twee systemen.</p>
<p>Stel: ik heb interface A en klasse B. B implementeerd niet A en kan dus niet direct door clients van A gebruikt worden. Als dit wel wenselijk is dan kun je dit probleem oplossen met behulp van een Adapter: maak een nieuwe klasse C die interface A implementeerd en klasse B encapsuleerd. Implementeer de methods van interface A en map deze naar de geencapsuleerde instantie van B. Klaar! Je kunt nu op de plaatsen waar je interface A wilt hebben object B &#8216;adapten&#8217;.</p>
<p>Ik gebruik dit pattern in mijn eigen framework bijvoorbeeld om mijn applicatie context geschikt te maken voor gebruik in de Apache Velocity template engine.</p>
<p>Kort en krachtig, net zoals als het Adapter patroon zelf.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.technischontwerp.nl/2010/01/pattern-van-de-week-deel-5-adapter-%e2%80%93-design-pattern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pattern van de Week deel 4: Money &#8211; Patterns of Enterprise Application Architecture</title>
		<link>http://www.technischontwerp.nl/2010/01/pattern-van-de-week-deel-4-money-patterns-of-enterprise-application-architecture/</link>
		<comments>http://www.technischontwerp.nl/2010/01/pattern-van-de-week-deel-4-money-patterns-of-enterprise-application-architecture/#comments</comments>
		<pubDate>Sun, 03 Jan 2010 20:06:13 +0000</pubDate>
		<dc:creator>Bert Willems</dc:creator>
				<category><![CDATA[Patterns]]></category>
		<category><![CDATA[Enterprise Application Architecture]]></category>

		<guid isPermaLink="false">http://www.technischontwerp.nl/?p=135</guid>
		<description><![CDATA[Allereest alle goede wensen voor dit nieuwe jaar! Laten we direct het belangrijkste onderwerp van 2010 bespreken: geld. Dit is wellicht wat kortzichtig en bekrompen echter heeft dit onderwerp menig architect in verlegenheid gebracht. Niet omdat het project duurder uitviel dan verwacht maar meer omdat de rol van geld (bedragen) binnen software architectuur wel eens [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-thumbnail wp-image-140" title="geld" src="http://www.technischontwerp.nl/wp-content/uploads/2010/01/money-150x150.jpg" alt="" width="150" height="150" />Allereest alle goede wensen voor dit nieuwe jaar! Laten we direct het belangrijkste onderwerp van 2010 bespreken: geld. Dit is wellicht wat kortzichtig en bekrompen echter heeft dit onderwerp menig architect in verlegenheid gebracht. Niet omdat het project duurder uitviel dan verwacht maar meer omdat de rol van geld (bedragen) binnen software architectuur wel eens onderschat wordt. Laten we de waarde van een bedrag maar opslaan in een decimal of floating point veld, we doen er verder toch niet zo veel mee. Fair enough.</p>
<p>Maar dan: de applicatie moet meer gaan rekenen met die bedragen: optellen, percentages en (hopelijk) vermenigvuldigen. Geen probleem: de meeste programmeertalen kunnen deze eenvoudige operaties al uitvoeren op primitives. So far, so good. Echter zijn deze berekeningen nu overal versplinterd in de codebase terug te vinden.</p>
<p>Nu de applicatie zo succesvol is dat er ook andere valuta dan de euro gebruikt gaan worden, gaat het jammerlijk mis: overal moeten bedragen omgerekend worden naar de ene valuta.Vervolgens moet er een bedrag bij opgeteld worden, waarna het resultaat weer terug omgerekend moet worden naar de begin valuta. Dit is natuurlijk vragen om problemen.</p>
<p>Er is echter een oplossing: het Money pattern zoals beschreven door Martin Fowler in zijn boek Patterns of Enterprise Application Architecture. En dit is werkelijk een schitterende oplossing met dank aan zijn eenvoud: maak een Money klasse die verantwoordelijk is voor het beheren van het bedrag, de valuta en het uitvoeren van berekeningen en transformaties van de ene valuta naar het andere. Er is nu een verantwoordelijke voor beheren van de kleintjes: de Money klasse. Heerlijk, ik wou dat mijn persoonlijke financiën ook zo makelijk te beheren waren.</p>
<p>Persoonlijk maak ik altijd gebruik van een Money klasse, ook in de meest eenvoudige applicaties omdat je maar nooit weet of het nodig zal zijn. In dit geval: better safe than sorry. Zijn jullie het hier mee eens? Of heb je een eigen oplossing? Plaats een reactie en deel je mening of ervaring!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.technischontwerp.nl/2010/01/pattern-van-de-week-deel-4-money-patterns-of-enterprise-application-architecture/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pattern van de Week deel 3: Strategy – Design Pattern</title>
		<link>http://www.technischontwerp.nl/2009/12/pattern-van-de-week-deel-3-strategy-%e2%80%93-design-pattern/</link>
		<comments>http://www.technischontwerp.nl/2009/12/pattern-van-de-week-deel-3-strategy-%e2%80%93-design-pattern/#comments</comments>
		<pubDate>Thu, 24 Dec 2009 09:17:33 +0000</pubDate>
		<dc:creator>Bert Willems</dc:creator>
				<category><![CDATA[Patterns]]></category>
		<category><![CDATA[Design Patterns]]></category>

		<guid isPermaLink="false">http://www.technischontwerp.nl/?p=130</guid>
		<description><![CDATA[Een beetje later dan gepland maar ook deze week laat ik weer een pattern de revue passeren. Deze week het Strategy pattern zoals beschreven bij de Gang of Four omdat het gewoon een heerlijk simpel pattern is. Eigenlijk is het Strategy pattern het verbergen van de implementatie achter een interface. De interface definieert een methode [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-thumbnail wp-image-132" title="strategy-pattern" src="http://www.technischontwerp.nl/wp-content/uploads/2009/12/strategy-150x150.jpg" alt="" width="150" height="150" />Een beetje later dan gepland maar ook deze week laat ik weer een pattern de revue passeren. Deze week het <strong>Strategy</strong> pattern zoals beschreven bij de Gang of Four omdat het gewoon een heerlijk simpel pattern is.</p>
<p>Eigenlijk is het Strategy pattern het verbergen van de implementatie achter een interface. De interface definieert een methode en de client maakt alleen gebruik van deze methode. Nu kun je verschillende implementaties maken van deze methode door een klasse te definieren die erft van de interface. De client weet dan niet meer welke implementatie er nu achter de interface zit: de implementaties zijn dus uitwisselbaar geworden. Deze &#8216;uitwisselbaarheid&#8217; is vooral krachtig in combinatie met dependency injection frameworks.</p>
<p>Ik gebruik het Strategy pattern vooral in het ontwerpen van mijn eigen framework, ik wil bepaalde delen kunnen vervangen zondat dat ik daar code voor hoef aan te passen.</p>
<p>Dat is het voor deze week. Iemand die hier iets aan toe wil voegen?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.technischontwerp.nl/2009/12/pattern-van-de-week-deel-3-strategy-%e2%80%93-design-pattern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pattern van de Week deel 2: Flyweight – Design Pattern</title>
		<link>http://www.technischontwerp.nl/2009/12/pattern-van-de-week-deel-2-flyweight-%e2%80%93-design-pattern/</link>
		<comments>http://www.technischontwerp.nl/2009/12/pattern-van-de-week-deel-2-flyweight-%e2%80%93-design-pattern/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 11:00:18 +0000</pubDate>
		<dc:creator>Bert Willems</dc:creator>
				<category><![CDATA[Patterns]]></category>
		<category><![CDATA[Design Pattern]]></category>

		<guid isPermaLink="false">http://www.technischontwerp.nl/?p=56</guid>
		<description><![CDATA[Welkom bij deze tweede post in de reeks over patterns die wereldwijd toegepast worden bij het ontwerpen van software. Deze week behandel ik het Flyweight pattern zoals vast gelegd door de fameuze Gang of Four. Het Flyweight pattern komt van pas wanneer je een groot aantal objecten verwacht die hetzelde zijn. Het meest tot de [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-thumbnail wp-image-63 alignleft" title="Zo licht als een veertje" src="http://www.technischontwerp.nl/wp-content/uploads/2009/12/veertje-150x150.jpg" alt="Zo licht als een veertje" width="150" height="150" />Welkom bij deze tweede post in de reeks over patterns die wereldwijd toegepast worden bij het ontwerpen van software. Deze week behandel ik het <strong>Flyweight</strong> pattern zoals vast gelegd door de fameuze <a title="Erich Gamma, Richard Helm, Ralph Johnson &amp; John Vlissides" href="http://en.wikipedia.org/wiki/Gang_of_four" target="_blank">Gang of Four</a>.</p>
<p>Het Flyweight pattern komt van pas wanneer je een groot aantal objecten verwacht die hetzelde zijn. Het meest tot de verbeelding sprekende voorbeeld is een tekst editor applicatie. Stel dat  er voor elke individuel teken in deze post een apart object aangemaakt zou moeten. Ik heb het niet geteld maar ik vermoed dat de letter E het vaakst voorkomt. Het zou natuurlijk zonde zijn om over elke letter E geheugen te reserveren omdat ze allemaal hetzelde zijn.</p>
<p><span id="more-56"></span></p>
<p>Hoe werkt het Flyweight pattern? Eigenlijk heel erg simpel: implementeer een <strong>Factory</strong> klasse die verantwoordelijk is voor het instantieren van objecten om deze vervolgens te cachen. Wanneer de client code de Factory om een soortgelijk object vraagd geeft deze het reeds geinstantieerde object terug uit de cache in plaats van een nieuw object te instantieren. De Factory klasse werkt dus als volgt:</p>
<pre><strong>Pseudocode</strong>
if (flyweightCache[parameters] exists)
   return existing flyweight
else
   new flyweight(parameters)
   add flyweight to cache
   return flyweight</pre>
<p>Zoals je ziet fungeert de Factory klasse in dit pattern als cache zonder dat de client code hier van af weet. De Factory klasse kun je zo intelligent maken als nodig is door bijvoorbeeld sommige object die echt vaak opgevraagd worden uit de cache te serveren, terwijl andere object wel elke keer geinstantieerd worden. Ook kan de Factory beoordelen of <em>parameters </em>er op duid dat het object een eigen unieke state heeft en dus niet uit de cache gehaald kan worden.</p>
<p>Wanneer is het Flyweight pattern geschikt? Als:</p>
<ul>
<li>De applicatie enorme hoeveelheden object gebruikt</li>
<li>Het geheugen vol loopt</li>
<li>De objecten hebben geen unieke state, of de state kan gemakkelijk ondergebracht worden in een ander minder gebruikt object</li>
<li>De applicatie niet afhangkelijk is van de identiteit van deze objecten</li>
</ul>
<p>Gerelateerde patterns:</p>
<ul>
<li><a title="Value Objects – Domain Driven Design" href="http://www.technischontwerp.nl/2009/12/pattern-van-de-week-deel-1-value-objects-domain-driven-design/">Value Object &#8211; Domain Driven Design</a></li>
<li>Factory Pattern &#8211; Design Patterns</li>
</ul>
<p>Dat is het voor deze week. Ik hoop dat je nu begrijpt hoe het Flyweight pattern werkt. Heb je nog vragen of opmerkingen? Plaats gerust een reactie!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.technischontwerp.nl/2009/12/pattern-van-de-week-deel-2-flyweight-%e2%80%93-design-pattern/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Pattern van de Week deel 1: Value Objects &#8211;  Domain Driven Design</title>
		<link>http://www.technischontwerp.nl/2009/12/pattern-van-de-week-deel-1-value-objects-domain-driven-design/</link>
		<comments>http://www.technischontwerp.nl/2009/12/pattern-van-de-week-deel-1-value-objects-domain-driven-design/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 08:20:24 +0000</pubDate>
		<dc:creator>Bert Willems</dc:creator>
				<category><![CDATA[Patterns]]></category>
		<category><![CDATA[Domain Driven Design]]></category>

		<guid isPermaLink="false">http://www.technischontwerp.nl/?p=31</guid>
		<description><![CDATA[Welkom bij deze eerste post in de reeks over patterns die wereldwijd toegepast worden bij het ontwerpen van software. Deze week behandel ik het Value Object pattern zoals gebruikt in Domain Driven Design. Veel objecten hebben geen conceptuele identiteit, ze beschrijven simpelweg een aspect van iets. Het is niet van belang of je nu instantie [...]]]></description>
			<content:encoded><![CDATA[<div class="mceTemp">
<dl id="attachment_40" class="wp-caption alignright" style="width: 137px;">
<dt class="wp-caption-dt"><img class="size-full wp-image-40" title="Value Object" src="http://www.technischontwerp.nl/wp-content/uploads/2009/12/value-object.jpg" alt="Value Object" width="127" height="85" /></dt>
</dl>
</div>
<p>Welkom bij deze eerste post in de reeks over patterns die wereldwijd toegepast worden bij het ontwerpen van software. Deze week behandel ik het <strong>Value Object</strong> pattern zoals gebruikt in <strong>Domain Driven Design</strong>.</p>
<p>Veel objecten hebben geen conceptuele identiteit, ze beschrijven simpelweg een aspect van iets. Het is niet van belang of je nu instantie A van dit object hebt of instantie B omdat de instanties conceptueel hetzelfde zijn. Laat ik eerst een voorbeeld geven om dit statement toe te lichten.</p>
<blockquote><p><strong>Voorbeeld</strong><br />
Ik word gevraagd om een applicatie te bouwen waarin een verzekeraar zijn klanten kan beheren. Stel dat er 2 personen zijn: A en B en stel dat deze personen op hetzelfde adres wonen. Dan kun je gerust een brief sturen bestemd voor persoon A naar het adres van persoon B. Ook kun je onmogelijk op basis van het adres een van deze personen identificeren. Het adres is en heeft dus geen identiteit.</p></blockquote>
<p>De conclusie dat een object geen eigen identiteit heeft kan grote gevolgen hebben voor bijvoorbeeld het database ontwerp waarvoor je kiest: Om ruimte te besparen zou je de adressen in een aparte tabel op kunnen slaan met een 1 op N relatie met de personen tabel. Of het instantieren van dit object, ik denk bijvoorbeeld meteen aan het <a title="Flyweight - Uitleg van dit Design pattern " href="http://www.technischontwerp.nl/2009/12/pattern-van-de-week-deel-2-flyweight-%E2%80%93-design-pattern/"><strong>Flyweight</strong></a> pattern.<br />
<span id="more-31"></span><br />
Typische voorbeelden van Value Objects:</p>
<ul>
<li>Kleuren</li>
<li>Tekens en tekenreeksen</li>
<li>Afmetingen &amp; punten</li>
<li>Posities &amp; locaties</li>
<li>Stijlen</li>
</ul>
<p>Bovenstaande items zijn maar enkele voorbeelden en zijn bovendien niet in alle gevallen Value Objects. Stel je voor dat je een programma aan het maken bent voor het mengen van kleuren, dan zal kleur waarschijnlijk geen Value Object zijn.</p>
<p>Dit pattern heeft mij geholpen om objecten goed te kunnen classificeren wat er toe heeft geleid dat mijn ontwerpen eenvoudiger werden. Ook bij het bepalen welke (N)Hibernate mapping ik het beste kon gebruiken is dit een waardevol pattern.</p>
<p>Gerelateerde patterns:</p>
<ul>
<li><a title="Flyweight - Uitleg van dit Design pattern " href="../2009/12/pattern-van-de-week-deel-2-flyweight-%E2%80%93-design-pattern/">Flyweight pattern &#8211; Design Pattern</a></li>
</ul>
<p>Ik ben benieuwd wat jullie ervaringen zijn met het Value Object pattern. Heeft het jou geholpen? Of juist niet? Deel je ervaring door hier een reactie te plaatsen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.technischontwerp.nl/2009/12/pattern-van-de-week-deel-1-value-objects-domain-driven-design/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

