<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Reacties op: No exceptions made</title>
	<atom:link href="http://www.software-innovators.nl/2010/07/20/no-exceptions-made/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.software-innovators.nl/2010/07/20/no-exceptions-made/</link>
	<description>Sogyo over het realiseren van software innovaties</description>
	<lastBuildDate>Thu, 02 Feb 2012 15:39:47 +0100</lastBuildDate>
	<generator>http://wordpress.org/</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>Door: Rick van der Arend</title>
		<link>http://www.software-innovators.nl/2010/07/20/no-exceptions-made/comment-page-1/#comment-2444</link>
		<dc:creator>Rick van der Arend</dc:creator>
		<pubDate>Thu, 05 Aug 2010 07:19:45 +0000</pubDate>
		<guid isPermaLink="false">http://www.software-innovators.nl/?p=2780#comment-2444</guid>
		<description>@Matthijs - op zich een terechte vraag. Ik wil wel nog even opmerken dat ik me met de &#039;wie&#039; in mijn eerste vraag zeker niet wilde beperken tot een onderdeel van het systeem wat je aan het ontwerpen bent. Het kan ook een gebruiker, afdelingsmanager, of een extern systeem zijn, bijvoorbeeld.</description>
		<content:encoded><![CDATA[<p>@Matthijs &#8211; op zich een terechte vraag. Ik wil wel nog even opmerken dat ik me met de &#8216;wie&#8217; in mijn eerste vraag zeker niet wilde beperken tot een onderdeel van het systeem wat je aan het ontwerpen bent. Het kan ook een gebruiker, afdelingsmanager, of een extern systeem zijn, bijvoorbeeld.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Door: Matthijs Mast</title>
		<link>http://www.software-innovators.nl/2010/07/20/no-exceptions-made/comment-page-1/#comment-2443</link>
		<dc:creator>Matthijs Mast</dc:creator>
		<pubDate>Thu, 05 Aug 2010 06:32:18 +0000</pubDate>
		<guid isPermaLink="false">http://www.software-innovators.nl/?p=2780#comment-2443</guid>
		<description>Er schiet mij direct nog een vraag te binnen.

Is de keuze afhankelijk van externe data en voldoet het model dan nog wel?</description>
		<content:encoded><![CDATA[<p>Er schiet mij direct nog een vraag te binnen.</p>
<p>Is de keuze afhankelijk van externe data en voldoet het model dan nog wel?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Door: Rick van der Arend</title>
		<link>http://www.software-innovators.nl/2010/07/20/no-exceptions-made/comment-page-1/#comment-2441</link>
		<dc:creator>Rick van der Arend</dc:creator>
		<pubDate>Wed, 04 Aug 2010 20:47:32 +0000</pubDate>
		<guid isPermaLink="false">http://www.software-innovators.nl/?p=2780#comment-2441</guid>
		<description>Bij dit soort switches is het denk ik altijd goed je af te vragen:
1. wie bepaalt de keuze? (en kan die niet meteen het resultaat opleveren)
2. wanneer moet de keuze bepaald worden (bij installatie, bij opstarten, bij start van een sessie, na keuze ven een gebruiker)? (dat is belangrijk om te bepalen of je de bron of het resultaat moet bewaren en wanneer)

Heb jij nog andere vragen die je zou stellen?</description>
		<content:encoded><![CDATA[<p>Bij dit soort switches is het denk ik altijd goed je af te vragen:<br />
1. wie bepaalt de keuze? (en kan die niet meteen het resultaat opleveren)<br />
2. wanneer moet de keuze bepaald worden (bij installatie, bij opstarten, bij start van een sessie, na keuze ven een gebruiker)? (dat is belangrijk om te bepalen of je de bron of het resultaat moet bewaren en wanneer)</p>
<p>Heb jij nog andere vragen die je zou stellen?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Door: Matthijs Mast</title>
		<link>http://www.software-innovators.nl/2010/07/20/no-exceptions-made/comment-page-1/#comment-2436</link>
		<dc:creator>Matthijs Mast</dc:creator>
		<pubDate>Tue, 03 Aug 2010 13:10:09 +0000</pubDate>
		<guid isPermaLink="false">http://www.software-innovators.nl/?p=2780#comment-2436</guid>
		<description>Dat is precies wat mij het eerste tebinnen schoot.
Is het werkelijk nodig om popups in verschillende sizes te hebben en dan ook nog dynamisch. Je zou aan een oplossing kunnen denken waarbij de popup zelf bepaald welke grootte hij heeft. Waarschijnlijk doe je dat nu extern (buiten de popup class)</description>
		<content:encoded><![CDATA[<p>Dat is precies wat mij het eerste tebinnen schoot.<br />
Is het werkelijk nodig om popups in verschillende sizes te hebben en dan ook nog dynamisch. Je zou aan een oplossing kunnen denken waarbij de popup zelf bepaald welke grootte hij heeft. Waarschijnlijk doe je dat nu extern (buiten de popup class)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Door: Rick van der Arend</title>
		<link>http://www.software-innovators.nl/2010/07/20/no-exceptions-made/comment-page-1/#comment-2431</link>
		<dc:creator>Rick van der Arend</dc:creator>
		<pubDate>Thu, 22 Jul 2010 07:45:56 +0000</pubDate>
		<guid isPermaLink="false">http://www.software-innovators.nl/?p=2780#comment-2431</guid>
		<description>Heb overigens nog een derde optie bedacht (goed te combineren met de configuratie-aanpak):

Een service die deze sizes desgevraagd kan ophoesten. Heeft drie methodes: GetSmallPopupUpSize, GetMediumPopupSize, .. - dit in het geval het echt alleen om de sizes gaat. Deze service kan ook Popup-sub-classes of reeds geconfigureerde objecten teruggeven. (als er meer dan alleen de size verschillend is tussen die popups). In eerste instantie kun je de service deze op laten leveren a.d.h.v. configuratie in code, maar hij zou ook een configuratiebestand kunnen inlezen.

Vraag die bij mij heel duidelijk omhoog komt is: wat zijn die verschillende popups met verschillende groottes - is het echt zo dat deze alleen verschillen op grootte? Verder functioneel volledig hetzelfde? En zo ja: waarom hebben ze dan verschillende groottes?</description>
		<content:encoded><![CDATA[<p>Heb overigens nog een derde optie bedacht (goed te combineren met de configuratie-aanpak):</p>
<p>Een service die deze sizes desgevraagd kan ophoesten. Heeft drie methodes: GetSmallPopupUpSize, GetMediumPopupSize, .. &#8211; dit in het geval het echt alleen om de sizes gaat. Deze service kan ook Popup-sub-classes of reeds geconfigureerde objecten teruggeven. (als er meer dan alleen de size verschillend is tussen die popups). In eerste instantie kun je de service deze op laten leveren a.d.h.v. configuratie in code, maar hij zou ook een configuratiebestand kunnen inlezen.</p>
<p>Vraag die bij mij heel duidelijk omhoog komt is: wat zijn die verschillende popups met verschillende groottes &#8211; is het echt zo dat deze alleen verschillen op grootte? Verder functioneel volledig hetzelfde? En zo ja: waarom hebben ze dan verschillende groottes?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Door: Peter Moor</title>
		<link>http://www.software-innovators.nl/2010/07/20/no-exceptions-made/comment-page-1/#comment-2430</link>
		<dc:creator>Peter Moor</dc:creator>
		<pubDate>Thu, 22 Jul 2010 06:36:10 +0000</pubDate>
		<guid isPermaLink="false">http://www.software-innovators.nl/?p=2780#comment-2430</guid>
		<description>Om er een aparte interface met implementerende klassen van te maken, zou ik eigenlijk wat overkill vinden, omdat er behalve GetSize() geen methoden/functies in zouden komen.

PopUpSize wordt wel altijd gebruikt vanuit de klasse PopUp, die een property van type PopUpSize heeft. Gebruik is dus totaal niet verspreid. Een oplossing zou dus ook kunnen zijn om de enumeration in dit geval te verwijderen en de bijbehorende Size (width/height) direct in PopUp te zetten (omdat het een 1-op-1-mapping is).

Een standaard waarde teruggeven bij een onbekende PopUpSize zou ook kunnen, waarschijnlijk ook in vergelijkbare situaties met willekeurige enumerations. Ik vind het echter wel mooi om een goede &quot;coverage&quot; van mogelijk waarden af te dwingen.

Bepaalde gegevens verplaatsen naar een configuratiebestand en daardoor afdwingen dat bij het inlezen hiervan (en dus bij het starten van de applicatie) het systeem al crasht, is inderdaad wel netter. Ik vraag me alleen af of het de extra moeite waard zou zijn, aangezien deze enumeration in de praktijk waarschijnlijk nooit wordt uitgebreid. Maar netter zou het zeker zijn.</description>
		<content:encoded><![CDATA[<p>Om er een aparte interface met implementerende klassen van te maken, zou ik eigenlijk wat overkill vinden, omdat er behalve GetSize() geen methoden/functies in zouden komen.</p>
<p>PopUpSize wordt wel altijd gebruikt vanuit de klasse PopUp, die een property van type PopUpSize heeft. Gebruik is dus totaal niet verspreid. Een oplossing zou dus ook kunnen zijn om de enumeration in dit geval te verwijderen en de bijbehorende Size (width/height) direct in PopUp te zetten (omdat het een 1-op-1-mapping is).</p>
<p>Een standaard waarde teruggeven bij een onbekende PopUpSize zou ook kunnen, waarschijnlijk ook in vergelijkbare situaties met willekeurige enumerations. Ik vind het echter wel mooi om een goede &#8220;coverage&#8221; van mogelijk waarden af te dwingen.</p>
<p>Bepaalde gegevens verplaatsen naar een configuratiebestand en daardoor afdwingen dat bij het inlezen hiervan (en dus bij het starten van de applicatie) het systeem al crasht, is inderdaad wel netter. Ik vraag me alleen af of het de extra moeite waard zou zijn, aangezien deze enumeration in de praktijk waarschijnlijk nooit wordt uitgebreid. Maar netter zou het zeker zijn.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Door: Rick van der Arend</title>
		<link>http://www.software-innovators.nl/2010/07/20/no-exceptions-made/comment-page-1/#comment-2429</link>
		<dc:creator>Rick van der Arend</dc:creator>
		<pubDate>Wed, 21 Jul 2010 20:51:26 +0000</pubDate>
		<guid isPermaLink="false">http://www.software-innovators.nl/?p=2780#comment-2429</guid>
		<description>Goed om te horen dat het duidelijk is en aanzet tot nadenken!

Overigens lukt het mij ook niet om het gebruik van Excepties te allen tijde te voorkomen hoor. :) Maar door de bovenstaande opties langs te lopen weet ik er regelmatig wel een beter alternatief voor te vinden.</description>
		<content:encoded><![CDATA[<p>Goed om te horen dat het duidelijk is en aanzet tot nadenken!</p>
<p>Overigens lukt het mij ook niet om het gebruik van Excepties te allen tijde te voorkomen hoor. :) Maar door de bovenstaande opties langs te lopen weet ik er regelmatig wel een beter alternatief voor te vinden.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Door: Paul van Dam</title>
		<link>http://www.software-innovators.nl/2010/07/20/no-exceptions-made/comment-page-1/#comment-2428</link>
		<dc:creator>Paul van Dam</dc:creator>
		<pubDate>Wed, 21 Jul 2010 20:06:11 +0000</pubDate>
		<guid isPermaLink="false">http://www.software-innovators.nl/?p=2780#comment-2428</guid>
		<description>Hoi Rick,

Weer een mooi stuk. Doet me wel weer eens goed nadenken over de code die ik tot nu toe heb geschreven. Ondanks je valide argumenten heb ik altijd wel veel gebruik gemaakt van excepties in een domein en is over het algemeen best goed bevallen. Als ik er nu over nadenk had het wel met veel minder excepties gekund. 

@Peter jouw code ziet er uit als een onderdeel van UI code. Dus zou je in dat geval kunnen falen of zou je gewoon een Warning willen loggen en een default size terug geven.</description>
		<content:encoded><![CDATA[<p>Hoi Rick,</p>
<p>Weer een mooi stuk. Doet me wel weer eens goed nadenken over de code die ik tot nu toe heb geschreven. Ondanks je valide argumenten heb ik altijd wel veel gebruik gemaakt van excepties in een domein en is over het algemeen best goed bevallen. Als ik er nu over nadenk had het wel met veel minder excepties gekund. </p>
<p>@Peter jouw code ziet er uit als een onderdeel van UI code. Dus zou je in dat geval kunnen falen of zou je gewoon een Warning willen loggen en een default size terug geven.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Door: Rick van der Arend</title>
		<link>http://www.software-innovators.nl/2010/07/20/no-exceptions-made/comment-page-1/#comment-2427</link>
		<dc:creator>Rick van der Arend</dc:creator>
		<pubDate>Wed, 21 Jul 2010 19:01:20 +0000</pubDate>
		<guid isPermaLink="false">http://www.software-innovators.nl/?p=2780#comment-2427</guid>
		<description>Hoi Peter,

Je ziet dit soort excepties vrij vaak, een switch op een enumeratie wordt natuurlijk niet door de compiler gechecked en dan wil je dus een (backup) controle om wijzigingen in de enumeratie te kunnen detecteren.

Echter: dit levert wel een runtime error op! In zekere zin ben je niet heel veel beter af dan dat je applicatie op een later moment ergens laat struikelen over dit probleem. (wel iets)

Er zijn twee richtingen die leiden tot een betere oplossing, denk ik:
1. Je maakt het bepalen van de size helemaal dynamisch: je kunt verschillende groottes en de bijbehorende maten benoemen in b.v. een configuratiebestand, db, etc. - Excepties zijn dan op hun plaats als het configuratiebestand bij inlezen (niet bij gebruik!) niet voldoet aan je verwachtingen. De Excepties dwingen dan pre-condities af op je externe input (het config bestand). Een xml-schema op je configuratiebestand zou nog mooier zijn, daarmee kan dan ook intellisense in je configbestand ondersteund worden. Maar goed, direct na inlezen is vaak eenvoudiger en meestal wel voldoende.
2. Je maakt de sizes juist een echt onderdeel van je applicatie en legt hem beter vast in de code, in de vorm van een Type. Je zou dan kunnen starten met verschillende classes die dezelfde interface implementeren, die 1 methode vereist: GetSize(). Deze neemt de plaats in van je huidige enumeratie (PopUpSize). Als je dit doet, zul je waarschijnlijk gaan bedenken dat deze classes meer kunnen doen dan alleen een grotte vastleggen. Waarschijnlijk zijn het representaties van popups die bepaalde functionaliteit bieden: ideaal om bij elkaar in een class vast te leggen..

Dus: je ziet deze veel en soms is het puur een pre-condition check op een inputparameter. Maar pas op, want enums zijn vaak uitgekleedde classes, waarbij hun functionaliteit over de hele applicatie verspreid ligt. :)

Is het volgens jou ook 1 van de bovenstaande gevallen of toch nog iets anders?</description>
		<content:encoded><![CDATA[<p>Hoi Peter,</p>
<p>Je ziet dit soort excepties vrij vaak, een switch op een enumeratie wordt natuurlijk niet door de compiler gechecked en dan wil je dus een (backup) controle om wijzigingen in de enumeratie te kunnen detecteren.</p>
<p>Echter: dit levert wel een runtime error op! In zekere zin ben je niet heel veel beter af dan dat je applicatie op een later moment ergens laat struikelen over dit probleem. (wel iets)</p>
<p>Er zijn twee richtingen die leiden tot een betere oplossing, denk ik:<br />
1. Je maakt het bepalen van de size helemaal dynamisch: je kunt verschillende groottes en de bijbehorende maten benoemen in b.v. een configuratiebestand, db, etc. &#8211; Excepties zijn dan op hun plaats als het configuratiebestand bij inlezen (niet bij gebruik!) niet voldoet aan je verwachtingen. De Excepties dwingen dan pre-condities af op je externe input (het config bestand). Een xml-schema op je configuratiebestand zou nog mooier zijn, daarmee kan dan ook intellisense in je configbestand ondersteund worden. Maar goed, direct na inlezen is vaak eenvoudiger en meestal wel voldoende.<br />
2. Je maakt de sizes juist een echt onderdeel van je applicatie en legt hem beter vast in de code, in de vorm van een Type. Je zou dan kunnen starten met verschillende classes die dezelfde interface implementeren, die 1 methode vereist: GetSize(). Deze neemt de plaats in van je huidige enumeratie (PopUpSize). Als je dit doet, zul je waarschijnlijk gaan bedenken dat deze classes meer kunnen doen dan alleen een grotte vastleggen. Waarschijnlijk zijn het representaties van popups die bepaalde functionaliteit bieden: ideaal om bij elkaar in een class vast te leggen..</p>
<p>Dus: je ziet deze veel en soms is het puur een pre-condition check op een inputparameter. Maar pas op, want enums zijn vaak uitgekleedde classes, waarbij hun functionaliteit over de hele applicatie verspreid ligt. :)</p>
<p>Is het volgens jou ook 1 van de bovenstaande gevallen of toch nog iets anders?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Door: Peter Moor</title>
		<link>http://www.software-innovators.nl/2010/07/20/no-exceptions-made/comment-page-1/#comment-2426</link>
		<dc:creator>Peter Moor</dc:creator>
		<pubDate>Wed, 21 Jul 2010 08:52:05 +0000</pubDate>
		<guid isPermaLink="false">http://www.software-innovators.nl/?p=2780#comment-2426</guid>
		<description>Interessante redenering. Ik vind het bewust gebruiken van Exceptions zelf eigenlijk wel heel mooi, maar ik denk dat het inderdaad (grotendeels) mogelijk is om dit te vermijden.

Hieronder nog wel een subtiel voorbeeld uit eigen code. Hier wordt een extension method gebruikt om aan de hand van een enumeration (PopUpSize) een Size terug te geven. Mocht de enumeration niet worden herkend (omdat in de toekomst iemand een waarde hieraan toevoegt), dan wordt er een Exception gegooid. Op deze manier zal bij het uitbreiden van de enumeration (wat zeer onwaarschijnlijk is) snel duidelijk worden dat de bijbehorende extension method nog niet is uitgebreid. Is dat nu geen pareltje van een Exception!



    public static class PopUpSizeExtender
    {
        public static Size GetMeasurements(this PopUpSize size)
        {
            switch (size)
            {
                case PopUpSize.Small:
                    return new Size(636, 256);
                case PopUpSize.Medium:
                    return new Size(670, 384);
                case PopUpSize.Large:
                    return new Size(676, 512);
                default:
                    throw new ArgumentException(&quot;Unknown PopUpSize: &quot; + size.ToString());
            }
        }
    }</description>
		<content:encoded><![CDATA[<p>Interessante redenering. Ik vind het bewust gebruiken van Exceptions zelf eigenlijk wel heel mooi, maar ik denk dat het inderdaad (grotendeels) mogelijk is om dit te vermijden.</p>
<p>Hieronder nog wel een subtiel voorbeeld uit eigen code. Hier wordt een extension method gebruikt om aan de hand van een enumeration (PopUpSize) een Size terug te geven. Mocht de enumeration niet worden herkend (omdat in de toekomst iemand een waarde hieraan toevoegt), dan wordt er een Exception gegooid. Op deze manier zal bij het uitbreiden van de enumeration (wat zeer onwaarschijnlijk is) snel duidelijk worden dat de bijbehorende extension method nog niet is uitgebreid. Is dat nu geen pareltje van een Exception!</p>
<p>    public static class PopUpSizeExtender<br />
    {<br />
        public static Size GetMeasurements(this PopUpSize size)<br />
        {<br />
            switch (size)<br />
            {<br />
                case PopUpSize.Small:<br />
                    return new Size(636, 256);<br />
                case PopUpSize.Medium:<br />
                    return new Size(670, 384);<br />
                case PopUpSize.Large:<br />
                    return new Size(676, 512);<br />
                default:<br />
                    throw new ArgumentException(&#8221;Unknown PopUpSize: &#8221; + size.ToString());<br />
            }<br />
        }<br />
    }</p>
]]></content:encoded>
	</item>
</channel>
</rss>

