<?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>Wizards of Smart &#187; SOLID</title>
	<atom:link href="http://wizardsofsmart.net/tag/solid/feed/" rel="self" type="application/rss+xml" />
	<link>http://wizardsofsmart.net</link>
	<description>.NET Design Patterns</description>
	<lastBuildDate>Thu, 29 Jul 2010 16:40:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0-beta2-14896</generator>
		<item>
		<title>Duct Tape AND Quality Together</title>
		<link>http://wizardsofsmart.net/patterns/duct-tape-and-quality-together/</link>
		<comments>http://wizardsofsmart.net/patterns/duct-tape-and-quality-together/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 18:00:00 +0000</pubDate>
		<dc:creator>panesofglass</dc:creator>
				<category><![CDATA[Patterns]]></category>
		<category><![CDATA[CQS]]></category>
		<category><![CDATA[DDDD]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Domain Driven Design]]></category>
		<category><![CDATA[Duct Tape Programmer]]></category>
		<category><![CDATA[software craftsmanship]]></category>
		<category><![CDATA[SOLID]]></category>

		<guid isPermaLink="false">http://wizardsofsmart.net/patterns/dogs-and-cats-living-together/</guid>
		<description><![CDATA[You’ve probably read Joel’s post on The Duct Tape Programmer and several responses. I did not like Joel’s post at first, as I thought it far too general and easily taken in the context of “always do it this way.” For the record, I have no problems with the duct tape approach when trying something [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_248" class="wp-caption aligncenter" style="width: 310px"><img class="size-full wp-image-248" title="cats-dogs-together-760114-300x225" src="http://wizardsofsmart.net/wp/wp-content/uploads/2009/10/cats-dogs-together-760114-300x225.jpg" alt="Dogs and Cats Living Together" width="300" height="225" /><p class="wp-caption-text">Dogs and Cats Living Together</p></div>
<p>You’ve probably read Joel’s post on <a href="http://www.joelonsoftware.com/items/2009/09/23.html" target="_blank" onclick="urchinTracker('/outgoing/www.joelonsoftware.com/items/2009/09/23.html?referer=');">The Duct Tape Programmer</a> and <a href="http://www.bing.com/search?setmkt=en-US&amp;q=duct+tape+programmer" target="_blank" onclick="urchinTracker('/outgoing/www.bing.com/search?setmkt=en-US_amp_q=duct+tape+programmer&amp;referer=');">several responses</a>. I did not like Joel’s post at first, as I thought it far too general and easily taken in the context of “always do it this way.” For the record, I have no problems with the duct tape approach when trying something out, but I’ve been burned when having to work on someone else’s let-me-try-this project that then became a core, production system. That’s a formula for PAIN. That said, I think you can make a case for using a duct tape approach for some, small parts of your application.</p>
<p>This past week I put together a presentation on <abbr title="Domain Driven Design"><a href="http://www.domaindrivendesign.org" target="_blank" onclick="urchinTracker('/outgoing/www.domaindrivendesign.org?referer=');">DDD</a></abbr> for my office. I included some slides describing <abbr title="Distributed Domain Driven Design">DDDD</abbr> and <abbr title="Command Query Separation">CQS</abbr> as <a href="http://codebetter.com/blogs/gregyoung/" target="_blank" onclick="urchinTracker('/outgoing/codebetter.com/blogs/gregyoung/?referer=');">Greg Young</a> has discussed time and again. While I put together those slides and thinking about Bounded Contexts, I had a sudden realization that even within a single Bounded Context or Module, you could mix duct tape with quality when using CQS.</p>
<p style="text-align: center;"><img class="size-full wp-image-250 aligncenter" title="CQS" src="http://wizardsofsmart.net/wp/wp-content/uploads/2009/10/CQS.jpg" alt="CQS" width="218" height="224" /></p>
<p>If you look at the diagram above, you can easily see where this is possible. If you split your module into read and write contexts, you can focus your greatest efforts for quality on the write side, where your domain lives, and leave the ever-changing read side to duct tape, RAD, etc. for displaying in the UI or reporting. The idea here is that you will often find that what you need to persist doesn’t change very much, but what you are asked to display changes nearly constantly. That’s at least my experience.</p>
<p>Another benefit to this approach is on the sales pipeline. Creating applications consists of these two parts: reading and writing. You may find that clients who have their own internal developers may not want to hire a consultant or contracting firm to build an entire app at their normal rates, but if you can provide them the write side and architecture guidance for the rest of the app, you may be able to sell more projects and keep your people happy working on quality code and quality projects. Of course, that’s just theory at this point.</p>
<p>So is this a case of “mass hysteria”? I don’t know. I like the idea, if not so much for the inclusion of duct tape as the possibility of limiting changes to the core domain models in an application architecture. I’m curious to know what others think or have done.</p>
]]></content:encoded>
			<wfw:commentRss>http://wizardsofsmart.net/patterns/duct-tape-and-quality-together/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>YAGNI&#8211;Whose Definition of Simple?</title>
		<link>http://wizardsofsmart.net/patterns/yagni-whose-definition-of-simple/</link>
		<comments>http://wizardsofsmart.net/patterns/yagni-whose-definition-of-simple/#comments</comments>
		<pubDate>Tue, 12 May 2009 13:00:52 +0000</pubDate>
		<dc:creator>panesofglass</dc:creator>
				<category><![CDATA[Patterns]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[SOLID]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[YAGNI]]></category>

		<guid isPermaLink="false">http://wizardsofsmart.net/patterns/yagni-whose-definition-of-simple</guid>
		<description><![CDATA[I have read a lot about YAGNI lately, especially regarding TDD. The thing that keeps bugging me is the definition of &#8220;simple.&#8221; Who defines simple? For instance, wouldn&#8217;t static methods be simpler than building objects? You could then write more functionally. Or is that not simpler to you? If you follow command-query separation, wouldn&#8217;t building [...]]]></description>
			<content:encoded><![CDATA[<p>I have read a lot about <a class="zem_slink" title="You Ain't Gonna Need It" rel="wikipedia" href="http://en.wikipedia.org/wiki/You_Ain%27t_Gonna_Need_It" onclick="urchinTracker('/outgoing/en.wikipedia.org/wiki/You_Ain_27t_Gonna_Need_It?referer=');">YAGNI</a> lately, especially regarding <a class="zem_slink" title="Test-driven development" rel="wikipedia" href="http://en.wikipedia.org/wiki/Test-driven_development" onclick="urchinTracker('/outgoing/en.wikipedia.org/wiki/Test-driven_development?referer=');">TDD</a>. The thing that keeps bugging me is the definition of &#8220;simple.&#8221; Who defines simple? For instance, wouldn&#8217;t static methods be simpler than building objects? You could then write more functionally. Or is that not simpler to you? If you follow <a class="zem_slink" title="Command-query separation" rel="wikipedia" href="http://en.wikipedia.org/wiki/Command-query_separation" onclick="urchinTracker('/outgoing/en.wikipedia.org/wiki/Command-query_separation?referer=');">command-query separation</a>, wouldn&#8217;t building everything as either pure functions or commands be simplest? JB and I have found this set of patterns immensely easy to create and test of late, especially in comparison to the ever-increasing-in-complexity procedural/OO code in place before.</p>
<p>So I guess my question is this: Is it really so bad to start with some basic patterns that will let you <a class="zem_slink" title="Code refactoring" rel="wikipedia" href="http://en.wikipedia.org/wiki/Code_refactoring" onclick="urchinTracker('/outgoing/en.wikipedia.org/wiki/Code_refactoring?referer=');">refactor</a> more easily? I think the desire to make things as simple as possible&#8211;especially when you know you will need it&#8211;can be a waste of time and a good way of getting bad code into your source.</p>
<p>I know I will hear it from the Agile community that I just don&#8217;t get it, but I think I do. I really like starting simple and keeping things in nice, bite-sized testable chunks. And yes, I&#8217;m still learning. However, without a consistent and meaningful definition of &#8220;simple,&#8221; we&#8217;re likely to end up with a follow-up movement of making things complex for the sake of extensibility again.</p>
<p>So what do you think: is CQS too complex a starting point, or is it a nice, &#8220;simple,&#8221; and testable approach for YAGNI?</p>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><img class="zemanta-pixie-img" style="border: medium none; float: right;" src="http://img.zemanta.com/pixy.gif?x-id=933e7d8e-8c97-4679-ad3a-421e33908d4a" alt="" /><span class="zem-script more-related pretty-attribution"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>
]]></content:encoded>
			<wfw:commentRss>http://wizardsofsmart.net/patterns/yagni-whose-definition-of-simple/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
