<?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>Evolving Software &#187; Useful info</title>
	<atom:link href="http://evolving-software.co.uk/blog/category/useful-info/feed/" rel="self" type="application/rss+xml" />
	<link>http://evolving-software.co.uk/blog</link>
	<description>General tidbits about Domain Driven Design and TrueView</description>
	<lastBuildDate>Sat, 20 Feb 2010 13:21:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Domain Types &#8211; Interfaces</title>
		<link>http://evolving-software.co.uk/blog/2009/11/24/domain-types-interfaces/</link>
		<comments>http://evolving-software.co.uk/blog/2009/11/24/domain-types-interfaces/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 18:20:30 +0000</pubDate>
		<dc:creator>Vijay</dc:creator>
				<category><![CDATA[Useful info]]></category>
		<category><![CDATA[ddd]]></category>
		<category><![CDATA[domaintypes]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[interfaces]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[source code]]></category>

		<guid isPermaLink="false">http://evolving-software.co.uk/blog/?p=313</guid>
		<description><![CDATA[In the last post, I published the DomainTypes library: a set of .NET interfaces &#38; base classes to provide the building blocks for DDD (source code included).
In this post I&#8217;ll describe the interfaces and supporting design decisions.
IDomainObject
Represents any type of object within the Domain model. Currently this is simply used as a marker, signalling to [...]]]></description>
			<content:encoded><![CDATA[<p>In the <a href="http://evolving-software.co.uk/blog/2009/11/19/free-net-type-library-for-domain-driven-design-source-code/">last post</a>, I published the <a href="http://evolving-software.co.uk/downloads/DomainTypes.zip">DomainTypes library</a>: a set of .NET interfaces &amp; base classes to provide the building blocks for DDD (source code included).</p>
<p>In this post I&#8217;ll describe the interfaces and supporting design decisions.</p>
<h3>IDomainObject</h3>
<p>Represents any type of object within the Domain model. Currently this is simply used as a marker, signalling to developers that the implementation has DDD semantics.</p>
<h3>IEntity</h3>
<p>Represents a unique Entity within the system.  The <strong>ID </strong>property is used to identify the instance during it&#8217;s lifetime.  Using a GUID allows identity to be established without having to talk to a persistence store (i.e. database).</p>
<h3>IValueObject</h3>
<p>Represents a non-unique object within the system.  Note that it&#8217;s an object, and not a struct.  Structs may seem like a better semantic fit with DDD, but too many instances can cause memory problems (structs &#8211; like value types &#8211; are created on the stack).</p>
<div>The <strong>Clone() </strong>method is used to create copies.  The implementing class can decide whether to create new instances, or use the <em>FlyWeight</em> pattern.</div>
<h3>IList&lt;T&gt;</h3>
<p>Represents a list of Domain Objects.  It&#8217;s crucial that the implementing class raises events <em>before </em>items are added or removed from the list.  This allows consumer code to execute any domain rules, and cancel the action if necessary.</p>
<h3>IEvent</h3>
<p>This is one that <a href="http://domaindrivendesign.org/library/evans_2009_1">Eric Evans mentioned earlier this year</a>.  It is used to record &amp; identify <strong>domain events</strong>, and must be immutable. For example, a child&#8217;s birth should be captured, be identifiable, but never modified.</p>
<h3>IAggregateRoot</h3>
<p>Most people understand Aggregate Roots as a cluster of closely associated entities.  However, there are 2 additional concerns that an Aggregate Root has:</p>
<ol>
<li>It knows how to validate the entire aggregate</li>
<li>It is used to lock it&#8217;s contents in a multi-user environment</li>
</ol>
<p>The <strong>IsConsistent()</strong> method is a placeholder for all rules/invariants that apply to the aggregate.  The locking concerns are handled by<strong> IRepository&lt;T&gt; </strong>(see below).</p>
<h3>IFactory&lt;T&gt;</h3>
<p>Used to create Domain Objects/Entities/Aggregate Roots that are complex to build.  Only use factories when the code within your constructors becomes unweildy.</p>
<h3>IRepository&lt;T&gt;</h3>
<p>Used as a facade to a persistence store.  Strictly speaking, repositories should only deal with Aggregate Roots &#8211; to access other entities you would navigate through the Aggregate.</p>
<p>In addition to the typical <strong>Load()</strong>/<strong>Save()</strong>/<strong>Delete() </strong>methods, I&#8217;ve also included <strong>Lock()</strong> and <strong>Unlock</strong>() methods.  This is a crucial function in a multi-user system, and should be considered when designing your Aggregates.</p>
<h3>IService</h3>
<p>Currently this is simply used as a marker.  Only consider using Services if :</p>
<ol>
<li>Try as you might, <em>you can&#8217;t decide</em> on which Domain Object to place your logic</li>
<li>The logic requires the use of several unassociated Domain Objects</li>
<li>You&#8217;re communicating with another module/tier/component</li>
</ol>
<p>The remaining interfaces aren&#8217;t DDD specific, but are to aid real-world implementations.  I&#8217;ll discuss those in the near future.</p>
<p><a href="http://evolving-software.co.uk/downloads/DomainTypes.zip">Download the source code</a></p>
]]></content:encoded>
			<wfw:commentRss>http://evolving-software.co.uk/blog/2009/11/24/domain-types-interfaces/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Free .NET type library for Domain Driven Design + source code</title>
		<link>http://evolving-software.co.uk/blog/2009/11/19/free-net-type-library-for-domain-driven-design-source-code/</link>
		<comments>http://evolving-software.co.uk/blog/2009/11/19/free-net-type-library-for-domain-driven-design-source-code/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 21:18:42 +0000</pubDate>
		<dc:creator>Vijay</dc:creator>
				<category><![CDATA[Useful info]]></category>
		<category><![CDATA[building blocks]]></category>
		<category><![CDATA[c# library]]></category>
		<category><![CDATA[domain driven design]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[source code]]></category>

		<guid isPermaLink="false">http://evolving-software.co.uk/blog/?p=284</guid>
		<description><![CDATA[I&#8217;ve observed a lot of newcomers to the DDD scene, and typically there&#8217;s lots of talk about Entities, Value Objects, Aggregate Roots, Repositories, Factories, IoC, and various technical concerns.
But I&#8217;m seeing a lot missing from the discussions.  Like &#8220;What about the locking implications around an Aggregate?&#8221; or &#8220;Must Value Objects be immutable&#8220;, or even &#8220;How [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve observed a lot of newcomers to the DDD scene, and typically there&#8217;s lots of talk about Entities, Value Objects, Aggregate Roots, Repositories, Factories, IoC, and various technical concerns.</p>
<p>But I&#8217;m seeing a lot missing from the discussions.  Like &#8220;<em>What about the locking implications around an Aggregate?</em>&#8221; or &#8220;<em>Must Value Objects be immutable</em>&#8220;, or even &#8220;<em>How do entities retrieve data if they can&#8217;t access a repository?</em>&#8220;.</p>
<p>To that end, I&#8217;ve created a set of interfaces and base classes that represent the building blocks of DDD.  The idea is to get developers thinking about key concepts early in the design process, and let Intellisense provide some guidance.</p>
<p>You can <a href="http://evolving-software.co.uk/downloads/DomainTypes.zip">download the source code here</a>.  It has a Ms-Pl licence, so you can modify and use the code as you wish.</p>
<p>The DDD related interfaces are:</p>
<ul>
<li>IDomainObject</li>
<li>IEntity</li>
<li>IAggregateRoot</li>
<li>IValueObject</li>
<li>IList&lt;T&gt;</li>
<li>IFactory&lt;T&gt;</li>
<li>IRepository&lt;T&gt;</li>
<li>IService&lt;T&gt;</li>
<li>ISpecification&lt;T&gt;</li>
<li>IQuerySpecification&lt;TRequestor, TResult&gt;</li>
</ul>
<p>Additional interfaces for orthogonal concerns are:</p>
<ul>
<li>IPersistable</li>
<li>IPersistableList&lt;T&gt;</li>
<li>IAudit</li>
<li>IAggregateLock</li>
<li>IAssertion</li>
<li>IDependencyAware</li>
<li>IDependencyLocator</li>
<li>ITrackable</li>
</ul>
<p><a href="http://evolving-software.co.uk/blog/wp-content/uploads/2009/11/Interfaces1.png"><img class="alignnone size-medium wp-image-295" title="Interfaces" src="http://evolving-software.co.uk/blog/wp-content/uploads/2009/11/Interfaces1-300x59.png" alt="Interfaces" width="300" height="59" /></a></p>
<p>This is still a work-in-progress, so feedback would be greatly appreciated.  In the next couple of posts, I&#8217;ll describe the interfaces and classes.</p>
<p><a href="http://evolving-software.co.uk/downloads/DomainTypes.zip">Download the C# project</a></p>
<p>P.S. The next version of TrueView will be based on these interfaces.  So if you code a domain model using the compiled library, TrueView will auto-generate a completely interactive UI (with the appropriate semantics) <span style="text-decoration: underline;">directly from your model.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://evolving-software.co.uk/blog/2009/11/19/free-net-type-library-for-domain-driven-design-source-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Domain Driven Design reference card</title>
		<link>http://evolving-software.co.uk/blog/2009/11/17/domain-driven-design-reference-card/</link>
		<comments>http://evolving-software.co.uk/blog/2009/11/17/domain-driven-design-reference-card/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 09:46:20 +0000</pubDate>
		<dc:creator>Vijay</dc:creator>
				<category><![CDATA[Useful info]]></category>

		<guid isPermaLink="false">http://evolving-software.co.uk/blog/?p=282</guid>
		<description><![CDATA[Spotted this handy online reference for Domain Driven Design:
http://www.scribd.com/doc/21997741/DZone-Refcard-76-Domain-Driven-Design
]]></description>
			<content:encoded><![CDATA[<p>Spotted this handy online reference for Domain Driven Design:</p>
<p><a href="http://www.scribd.com/doc/21997741/DZone-Refcard-76-Domain-Driven-Design">http://www.scribd.com/doc/21997741/DZone-Refcard-76-Domain-Driven-Design</a></p>
]]></content:encoded>
			<wfw:commentRss>http://evolving-software.co.uk/blog/2009/11/17/domain-driven-design-reference-card/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Upgrade from Windows 7 beta/RC to Windows 7 RTM</title>
		<link>http://evolving-software.co.uk/blog/2009/10/05/upgrade-from-windows-7-betarc-to-windows-7-rtm/</link>
		<comments>http://evolving-software.co.uk/blog/2009/10/05/upgrade-from-windows-7-betarc-to-windows-7-rtm/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 19:10:11 +0000</pubDate>
		<dc:creator>Vijay</dc:creator>
				<category><![CDATA[News items]]></category>
		<category><![CDATA[Useful info]]></category>
		<category><![CDATA[upgrade]]></category>
		<category><![CDATA[Windows 7 beta]]></category>
		<category><![CDATA[Windows 7 RC]]></category>
		<category><![CDATA[Windows 7 RTM]]></category>

		<guid isPermaLink="false">http://evolving-software.co.uk/blog/?p=279</guid>
		<description><![CDATA[Finally got around to upgrading to Windows 7 RTM, only to be greeted with the following:
You cannot upgrade this prerelease version of Windows 7. Go online to see how to install Windows 7 and keep your files and settings
A quick Google found these instructions.   Should save you the hassle of rebuilding your PC  
]]></description>
			<content:encoded><![CDATA[<p>Finally got around to upgrading to Windows 7 RTM, only to be greeted with the following:</p>
<blockquote><p><strong>You cannot upgrade this prerelease version of Windows 7. Go online to see how to install Windows 7 and keep your files and settings</strong></p></blockquote>
<p>A quick Google found <a href="http://webupd8.blogspot.com/2009/07/how-to-upgrade-from-windows-7-beta-or.html">these instructions</a>.   Should save you the hassle of rebuilding your PC <img src='http://evolving-software.co.uk/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://evolving-software.co.uk/blog/2009/10/05/upgrade-from-windows-7-betarc-to-windows-7-rtm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eric Evans: &#8220;What I&#8217;ve learned about DDD since the book&#8221;</title>
		<link>http://evolving-software.co.uk/blog/2009/06/30/eric-evans-what-ive-learned-about-ddd-since-the-book/</link>
		<comments>http://evolving-software.co.uk/blog/2009/06/30/eric-evans-what-ive-learned-about-ddd-since-the-book/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 11:33:55 +0000</pubDate>
		<dc:creator>Vijay</dc:creator>
				<category><![CDATA[Useful info]]></category>
		<category><![CDATA[ddd]]></category>
		<category><![CDATA[domain driven design]]></category>
		<category><![CDATA[eric evans]]></category>
		<category><![CDATA[experimenting]]></category>
		<category><![CDATA[exploring]]></category>
		<category><![CDATA[ubiquitous language]]></category>

		<guid isPermaLink="false">http://evolving-software.co.uk/blog/?p=247</guid>
		<description><![CDATA[Eric Evans talks about the most essential parts of his book, having practiced it over the last 5 years.
One of the topics that caught my attention was Exploration and Experimentation (3m 25s into the video).  Evans suggests that teams should be exploring &#38; experimenting even after a useful domain model is created.  His quote:
What are [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://domaindrivendesign.org/library/evans_2009_1">Eric Evans talks about</a> the most essential parts of his book, having practiced it over the last 5 years.</p>
<p>One of the topics that caught my attention was <strong>Exploration and Experimentation</strong> (3m 25s into the video).  Evans suggests that teams should be exploring &amp; experimenting even after a useful domain model is created.  His quote:</p>
<blockquote><p>What are the odds that [the first good model] is the best you could have done?</p></blockquote>
<p>So why aren&#8217;t teams doing this already?  Typically, it&#8217;s because of <strong>fear </strong>and <strong>cost of change</strong><em>. </em>Traditionally, software has never been easy to change (read <em>expensive</em>).  And for all of the new technology being spewed out, not all of it is designed to <em>make change easy</em>.</p>
<p>This is the void that <a href="http://www.evolving-software.co.uk/trueview-domain-modeller.html">TrueView </a>attempts to address.  It&#8217;s not about UI design, or database design, or Web Service contracts.  It&#8217;s about creating interactive domain models that Domain Experts and Software Experts can explore, discuss, and help refine the <strong>ubiquitous language</strong>.</p>
<p>If you haven&#8217;t tried it already, you can <a href="http://www.evolving-software.co.uk/downloads/TrueViewFreeTrial.exe">download it here</a>. I hope you find it useful.</p>
]]></content:encoded>
			<wfw:commentRss>http://evolving-software.co.uk/blog/2009/06/30/eric-evans-what-ive-learned-about-ddd-since-the-book/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eric Evans: Why do efforts to replace legacy systems fail?</title>
		<link>http://evolving-software.co.uk/blog/2009/06/19/eric-evans-why-do-efforts-to-replace-legacy-systems-fail/</link>
		<comments>http://evolving-software.co.uk/blog/2009/06/19/eric-evans-why-do-efforts-to-replace-legacy-systems-fail/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 17:15:13 +0000</pubDate>
		<dc:creator>Vijay</dc:creator>
				<category><![CDATA[Useful info]]></category>
		<category><![CDATA[core]]></category>
		<category><![CDATA[domain driven design]]></category>

		<guid isPermaLink="false">http://evolving-software.co.uk/blog/?p=245</guid>
		<description><![CDATA[Gojko Adzic has an interesting piece by Eric Evans about replacing legacy systems.
In summary, focus on the core domain &#8211; the part of the software that brings competitive advantage to the business &#8211; and use an anti-corruption layer to interface with the old system.
]]></description>
			<content:encoded><![CDATA[<p>Gojko Adzic has <a href="http://gojko.net/2009/06/19/eric-evans-why-do-efforts-to-replace-legacy-systems-fail/">an interesting piece by Eric Evans</a> about replacing legacy systems.</p>
<p>In summary, focus on the core domain &#8211; the part of the software that brings competitive advantage to the business &#8211; and use an anti-corruption layer to interface with the old system.</p>
]]></content:encoded>
			<wfw:commentRss>http://evolving-software.co.uk/blog/2009/06/19/eric-evans-why-do-efforts-to-replace-legacy-systems-fail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>When should you use a Value Object?</title>
		<link>http://evolving-software.co.uk/blog/2009/05/26/when-should-you-use-a-value-object/</link>
		<comments>http://evolving-software.co.uk/blog/2009/05/26/when-should-you-use-a-value-object/#comments</comments>
		<pubDate>Tue, 26 May 2009 07:12:32 +0000</pubDate>
		<dc:creator>Vijay</dc:creator>
				<category><![CDATA[TrueView tips]]></category>
		<category><![CDATA[Useful info]]></category>
		<category><![CDATA[domain]]></category>
		<category><![CDATA[persistence]]></category>
		<category><![CDATA[value object]]></category>

		<guid isPermaLink="false">http://evolving-software.co.uk/blog/?p=224</guid>
		<description><![CDATA[Whilst in the middle of writing about &#8220;Entities vs Value Objects&#8220;  I discovered this post by Dylan Beattie.
I&#8217;ve observed that a lot of DDD newbies get hung up on Value Objects, persistence, how to normalise the database, and other implementation concerns.
Value Objects stem from the actual domain problem, not from  persistence.  Read Dylan&#8217;s post to [...]]]></description>
			<content:encoded><![CDATA[<p>Whilst in the middle of writing about &#8220;<strong>Entities vs Value Objects</strong>&#8220;  I discovered <a href="http://dylanbeattie.blogspot.com/2009/02/is-crisp-value-object.html">this post</a> by Dylan Beattie<em>.</em></p>
<p>I&#8217;ve observed that a lot of DDD newbies get hung up on Value Objects, persistence, how to normalise the database, and other<em> implementation concerns</em>.</p>
<p>Value Objects stem from the <em>actual domain problem</em>, not from  persistence.  Read <a href="http://dylanbeattie.blogspot.com/2009/02/is-crisp-value-object.html">Dylan&#8217;s post</a> to understand why.</p>
]]></content:encoded>
			<wfw:commentRss>http://evolving-software.co.uk/blog/2009/05/26/when-should-you-use-a-value-object/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A quick chat with Eric Evans</title>
		<link>http://evolving-software.co.uk/blog/2009/03/26/a-quick-chat-with-eric-evans/</link>
		<comments>http://evolving-software.co.uk/blog/2009/03/26/a-quick-chat-with-eric-evans/#comments</comments>
		<pubDate>Thu, 26 Mar 2009 06:41:31 +0000</pubDate>
		<dc:creator>Vijay</dc:creator>
				<category><![CDATA[Useful info]]></category>
		<category><![CDATA[aspects]]></category>
		<category><![CDATA[ddd]]></category>
		<category><![CDATA[domain driven design]]></category>

		<guid isPermaLink="false">http://evolving-software.co.uk/blog/?p=185</guid>
		<description><![CDATA[Eric Evans chatted with Alex Handy (SDTimes) about the primary aspects of DDD.  Read the interview here.
]]></description>
			<content:encoded><![CDATA[<p>Eric Evans chatted with Alex Handy (SDTimes) about the primary aspects of DDD.  <a href="http://www.sdtimes.com/link/33357">Read the interview here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://evolving-software.co.uk/blog/2009/03/26/a-quick-chat-with-eric-evans/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The BBC uses Domain Driven Design</title>
		<link>http://evolving-software.co.uk/blog/2009/03/24/the-bbc-uses-domain-driven-design/</link>
		<comments>http://evolving-software.co.uk/blog/2009/03/24/the-bbc-uses-domain-driven-design/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 07:08:52 +0000</pubDate>
		<dc:creator>Vijay</dc:creator>
				<category><![CDATA[Useful info]]></category>
		<category><![CDATA[bbc]]></category>
		<category><![CDATA[ddd]]></category>

		<guid isPermaLink="false">http://evolving-software.co.uk/blog/?p=174</guid>
		<description><![CDATA[A little late   , but still relevant&#8230;
Michael Smethurst (Information Architect at the BBC) describes how DDD is used to make websites.
]]></description>
			<content:encoded><![CDATA[<p>A little late <img src='http://evolving-software.co.uk/blog/wp-includes/images/smilies/icon_redface.gif' alt=':oops:' class='wp-smiley' />  , but still relevant&#8230;</p>
<p>Michael Smethurst (Information Architect at the BBC) describes<a href="http://www.bbc.co.uk/blogs/radiolabs/2009/01/how_we_make_websites.shtml"> how DDD is used to make websites</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://evolving-software.co.uk/blog/2009/03/24/the-bbc-uses-domain-driven-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The reality of UI mock-ups and DDD</title>
		<link>http://evolving-software.co.uk/blog/2009/03/19/the-reality-of-ui-mock-ups-and-ddd/</link>
		<comments>http://evolving-software.co.uk/blog/2009/03/19/the-reality-of-ui-mock-ups-and-ddd/#comments</comments>
		<pubDate>Thu, 19 Mar 2009 06:51:27 +0000</pubDate>
		<dc:creator>Vijay</dc:creator>
				<category><![CDATA[TrueView tips]]></category>
		<category><![CDATA[Useful info]]></category>
		<category><![CDATA[mockup]]></category>
		<category><![CDATA[modelling]]></category>
		<category><![CDATA[ubiquitous language]]></category>
		<category><![CDATA[ui]]></category>

		<guid isPermaLink="false">http://evolving-software.co.uk/blog/?p=157</guid>
		<description><![CDATA[Casey Charlton is writing a sample application using DDD.  His first step was to create a UI mock-up to reflect a user story  
&#8220;What&#8217;s so bad about that?&#8221; I hear you cry.  Well, here&#8217;s the problem:
UI prototyping is great for defining how a person is going to solve a business problem.  It&#8217;s not great [...]]]></description>
			<content:encoded><![CDATA[<p>Casey Charlton is writing a <a href="http://devlicio.us/blogs/casey/archive/2009/03/09/ddd-sample-application-first-steps.aspx">sample application</a> using DDD.  His first step was to create a UI mock-up to reflect a user story <img src='http://evolving-software.co.uk/blog/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>&#8220;What&#8217;s so bad about that?&#8221; I hear you cry.  Well, here&#8217;s the problem:</p>
<p>UI prototyping is great for defining <strong><em>how </em></strong>a person is going to solve a business problem.  It&#8217;s not great at defining <strong><em>what </em></strong>the problem actually is (i.e. the business domain).</p>
<p>I&#8217;ve seen this happen many, many times:</p>
<ol>
<li>Developer sketches UI, to start discussions with the Domain Expert/Business Analyst</li>
<li>Business Analyst adds/removes/repositions some widgets</li>
<li>&#8216;Hand waving&#8217; and &#8216;pointing at imaginary boxes&#8217; becomes the communication technique of choice</li>
<li>Developer agrees to &#8216;quickly code up&#8217; an interactive prototype</li>
<li>End user wants a different shade of blue</li>
</ol>
<p>Although the Developer has good intentions of leveraging DDD, the urge to see working apps overrides everything else &#8211; leaving the Developer with a vague understanding of the business domain.</p>
<p>As the Developer <em>does </em>learn more about the domain, he usually finds that the original UI design is inadequate. And changing a UI is expensive (it&#8217;s a pity that most businesses don&#8217;t understand why).</p>
<p>This is where <a href="http://www.evolving-software.co.uk/downloads.html">TrueView</a> shines.  It automatically creates interactive UIs, but only based on domain definitions and relationships. Which means:</p>
<ul>
<li> The Business Analyst <strong>must</strong> describe the business domain.</li>
<li>The Developer <strong>must</strong><strong> </strong>start understanding the domain</li>
<li>Both <strong>must</strong><strong> </strong>define and share the <a href="http://domaindrivendesign.org/discussion/messageboardarchive/UbiquitousLanguage.html"><em>Ubiquitous Language</em></a>.</li>
</ul>
<p>TrueView doesn&#8217;t give you a <em>totally </em>customisable UI, but you <em>do </em>get an interactive prototype that <strong>models the business</strong>.  Once you understand the domain model, you&#8217;re in a perfect position to design a slick UI.</p>
]]></content:encoded>
			<wfw:commentRss>http://evolving-software.co.uk/blog/2009/03/19/the-reality-of-ui-mock-ups-and-ddd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
