<?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</title>
	<atom:link href="http://evolving-software.co.uk/blog/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>Tue, 06 Dec 2011 21:29:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>Naked Objects implemented at the Irish Government</title>
		<link>http://evolving-software.co.uk/blog/2011/12/06/naked-objects-implemented-at-the-irish-government/</link>
		<comments>http://evolving-software.co.uk/blog/2011/12/06/naked-objects-implemented-at-the-irish-government/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 21:29:29 +0000</pubDate>
		<dc:creator>Vijay</dc:creator>
				<category><![CDATA[News items]]></category>

		<guid isPermaLink="false">http://evolving-software.co.uk/blog/?p=407</guid>
		<description><![CDATA[Richard Pawson talks about his experiences implementing a Naked Objects solution for the Irish Government. They went on to deliver 30+ projects on time and on budget!]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.infoq.com/presentations/Large-scale-Pure-OO-Irish-Government">Richard Pawson talks about his experiences</a> implementing a Naked Objects solution for the Irish Government.</p>
<p>They went on to deliver <a href="http://www.infoq.com/presentations/Large-scale-Pure-OO-Irish-Government#view_76754">30+ projects on time <em>and </em>on budget</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://evolving-software.co.uk/blog/2011/12/06/naked-objects-implemented-at-the-irish-government/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>We&#8217;re closed during December 2011</title>
		<link>http://evolving-software.co.uk/blog/2011/12/06/were-closed-during-december-2011/</link>
		<comments>http://evolving-software.co.uk/blog/2011/12/06/were-closed-during-december-2011/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 21:20:34 +0000</pubDate>
		<dc:creator>Vijay</dc:creator>
				<category><![CDATA[News items]]></category>

		<guid isPermaLink="false">http://evolving-software.co.uk/blog/?p=398</guid>
		<description><![CDATA[We&#8217;re closed for the month of December, and will be back in January 2012. It&#8217;s been a while since the last post, but there are plans to revamp TrueView &#8211; a brand new WPF interface and usability improvements are top of the list In the meantime, we wish all of our customers and colleagues a [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;re closed for the month of December, and will be back in January 2012.</p>
<p>It&#8217;s been a while since the last post, but there <em>are</em> plans to revamp TrueView &#8211; a brand new WPF interface and usability improvements are top of the list</p>
<p>In the meantime, we wish all of our customers and colleagues a very Merry Christmas and a prosperous New Year!</p>
]]></content:encoded>
			<wfw:commentRss>http://evolving-software.co.uk/blog/2011/12/06/were-closed-during-december-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pitfalls of Domain Driven Design</title>
		<link>http://evolving-software.co.uk/blog/2010/11/21/pitfalls-of-domain-driven-design/</link>
		<comments>http://evolving-software.co.uk/blog/2010/11/21/pitfalls-of-domain-driven-design/#comments</comments>
		<pubDate>Sun, 21 Nov 2010 09:48:38 +0000</pubDate>
		<dc:creator>Vijay</dc:creator>
				<category><![CDATA[Useful info]]></category>
		<category><![CDATA[domain driven design]]></category>
		<category><![CDATA[ubiquitous language]]></category>

		<guid isPermaLink="false">http://evolving-software.co.uk/blog/?p=394</guid>
		<description><![CDATA[Someone asked a very important question over at StackOverflow. The answer is also crucially important: &#8220;Probably the most important one: not grokking the central, fundamental principle of the Domain Model and its representation in Ubiquitous Language. With the plethora of technology options around, it&#8217;s very easy for your head to fill up with ORMs, MVC [...]]]></description>
			<content:encoded><![CDATA[<p>Someone asked a <a href="http://stackoverflow.com/questions/4196668/domain-driven-design-ddd-pitfalls">very important question</a> over at StackOverflow. <a href="http://stackoverflow.com/questions/4196668/domain-driven-design-ddd-pitfalls/4200017#4200017">The answer</a> is also crucially important:<br />
<em><br />
&#8220;Probably the most important one: not grokking the central, fundamental principle of the Domain Model and its representation in Ubiquitous Language. With the plethora of technology options around, it&#8217;s very easy for your head to fill up with ORMs, MVC frameworks, AJAX, SQL vs NoSql, &#8230; So much so there&#8217;s little space left for the actual problem you&#8217;re trying to solve.</p>
<p>And that&#8217;s DDD&#8217;s key message: don&#8217;t. Instead, explicitly focus on the problem space first and foremost. Build a domain model shorn of architectural clutter that captures, exposes and communicates the domain.&#8221;</em></p>
<p>Of course, I had to give this answer my vote too&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://evolving-software.co.uk/blog/2010/11/21/pitfalls-of-domain-driven-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Naked Objects podcast with Scott Hanselman</title>
		<link>http://evolving-software.co.uk/blog/2010/10/25/naked-objects-podcast-with-scott-hanselman/</link>
		<comments>http://evolving-software.co.uk/blog/2010/10/25/naked-objects-podcast-with-scott-hanselman/#comments</comments>
		<pubDate>Mon, 25 Oct 2010 14:25:25 +0000</pubDate>
		<dc:creator>Vijay</dc:creator>
				<category><![CDATA[Useful info]]></category>
		<category><![CDATA[naked objects]]></category>
		<category><![CDATA[podcast]]></category>

		<guid isPermaLink="false">http://evolving-software.co.uk/blog/?p=391</guid>
		<description><![CDATA[Scott Hanselman chats with Richard Pawson about the Naked Objects framework. Find the podcast here. http://www.hanselman.com/blog/HanselminutesPodcast233InsideTheNakedObjectsFrameworkWithRichardPawson.aspx]]></description>
			<content:encoded><![CDATA[<p>Scott Hanselman chats with Richard Pawson about the Naked Objects framework.</p>
<p>Find the podcast <a href="http://www.hanselman.com/blog/HanselminutesPodcast233InsideTheNakedObjectsFrameworkWithRichardPawson.aspx">here</a>.</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">http://www.hanselman.com/blog/HanselminutesPodcast233InsideTheNakedObjectsFrameworkWithRichardPawson.aspx</div>
]]></content:encoded>
			<wfw:commentRss>http://evolving-software.co.uk/blog/2010/10/25/naked-objects-podcast-with-scott-hanselman/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Video presentation of Naked Objects</title>
		<link>http://evolving-software.co.uk/blog/2010/10/21/video-presentation-of-naked-objects/</link>
		<comments>http://evolving-software.co.uk/blog/2010/10/21/video-presentation-of-naked-objects/#comments</comments>
		<pubDate>Thu, 21 Oct 2010 19:50:31 +0000</pubDate>
		<dc:creator>Vijay</dc:creator>
				<category><![CDATA[Useful info]]></category>
		<category><![CDATA[naked objects]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://evolving-software.co.uk/blog/?p=384</guid>
		<description><![CDATA[Although TrueView supports Domain Driven Design, it also embraces the Naked Objects Pattern. This little known architectural pattern is a refreshing (maybe radical?) concept, but complements DDD very well. Here, Dr Richard Pawson (the originator of the pattern) talks about Naked Objects, why it exists, and why a government department uses Naked Objects to build [...]]]></description>
			<content:encoded><![CDATA[<p>Although TrueView supports <a href="http://en.wikipedia.org/wiki/Domain-driven_design">Domain Driven Design</a>, it also embraces the <a href="http://en.wikipedia.org/wiki/Naked_objects">Naked Objects Pattern</a>.</p>
<p>This little known architectural pattern is a refreshing (maybe radical?) concept, but complements DDD very well.</p>
<p>Here, Dr Richard Pawson (the originator of the pattern) talks about Naked Objects, why it exists, and why a government department uses Naked Objects to build their key systems.</p>
<ul>
<li><a href="http://blip.tv/file/4205862">Dr. Richard Pawson on Naked Objects, Part 1</a></li>
<li><a href="http://blip.tv/file/4205894">Dr. Richard Pawson on Naked Objects, Part 2</a></li>
<li><a href="http://blip.tv/file/4185419">Dr. Richard Pawson Q &amp; A, Part 3</a></li>
<li><a href="http://blip.tv/file/4185422">Dr. Richard Pawson Q &amp; A, Part 4</a></li>
</ul>
<p>Compelling viewing for anyone who wants to take Agile and DDD to the next stage.</p>
]]></content:encoded>
			<wfw:commentRss>http://evolving-software.co.uk/blog/2010/10/21/video-presentation-of-naked-objects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TrueView V2 Beta, now with POCO support</title>
		<link>http://evolving-software.co.uk/blog/2010/10/19/trueview-v2-beta-now-with-poco-support/</link>
		<comments>http://evolving-software.co.uk/blog/2010/10/19/trueview-v2-beta-now-with-poco-support/#comments</comments>
		<pubDate>Tue, 19 Oct 2010 05:47:27 +0000</pubDate>
		<dc:creator>Vijay</dc:creator>
				<category><![CDATA[New releases]]></category>
		<category><![CDATA[News items]]></category>
		<category><![CDATA[c# library]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[library]]></category>

		<guid isPermaLink="false">http://evolving-software.co.uk/blog/?p=355</guid>
		<description><![CDATA[TrueView V2 has some significant changes since the last version.  You can download the beta and code sample here. POCO support TrueView now supports POCO classes, that don&#8217;t need to be inherited or marked up with attributes. Now you can re-use your POCO assemblies in other applications, and remove the dependency on the TrueView framework. [...]]]></description>
			<content:encoded><![CDATA[<p>TrueView V2 has some significant changes since the last version.  You can download the beta and code sample <a href="http://evolving-software.co.uk/downloads/trueview_v2_beta.zip">here</a>.</p>
<h2>POCO support</h2>
<p>TrueView now supports POCO classes, that don&#8217;t need to be inherited or marked up with attributes. Now you can re-use your POCO assemblies in other applications, and remove the dependency on the TrueView framework.</p>
<p>To make your POCO classes viewable in the UI, add the following property:</p>
<pre>    public Guid ID { get; set; }</pre>
<p>To make your classes persistable, add a Version property:</p>
<pre>    public long Version { get; set; }</pre>
<h2>Domain Class enhancements</h2>
<ul>
<li>Domain Classes no longer need to be marked with attributes</li>
<li>Optional <strong>Configuration</strong> classes can decouple Domain Objects from the TrueView framework</li>
<li>Better support for structs</li>
</ul>
<h2>Infrastructure Class enhancements</h2>
<ul>
<li>Infrastructure classes are now decoupled from Domain Classes.</li>
<li><strong>IPersistenceInfrastructureService </strong>is now exposed, allowing custom Services to be injected at run-time.  TrueView provides <strong>FilePersistenceService </strong>and <strong>NhibernatePersistenceServices</strong> out of the box.</li>
<li><strong>IExportInfrastructureService </strong>replaces the old PrintProvider, and allows you to export data for any Domain Object</li>
<li><strong>IPresenterInfrastructureService </strong>replaces the old IUiPresenter.  You can control the formatting, and well as providing custom &#8216;adornments&#8217; to display</li>
</ul>
<h2>UI enhancements</h2>
<ul>
<li><strong>Error indicators</strong> are now shown next to the property that caused them</li>
<li><strong>Custom adornments</strong> can be rendered next to an item in the Explorer view</li>
<li><strong>Better use of screen estate</strong> using multiple columns</li>
<li><strong>Improved drag/drop tips</strong> now show why certain operations cannot be performed</li>
<li><strong>Inline Object and List properties</strong> allow users to see more detail without having to drill-down manually.</li>
<li><strong>Hyperlinks </strong>make it easier to navigate to associated Objects and Lists</li>
<li><strong>Additional Enum display options</strong> include Slider and Radio-Options.</li>
<li><strong>Enum items can be filtered</strong> using IQuerySpecification&lt;T&gt;</li>
<li>A new <strong>Export</strong> function replaces the old Print option</li>
</ul>
<p>Check out the <a href="http://evolving-software.co.uk/downloads/trueview_v2_beta.zip">included sample code</a> to learn about the new features.</p>
<p>P.S. There&#8217;s a <a href="http://evolving-software.co.uk/downloads/DomainTypes.zip">new DomainTypes library available</a> as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://evolving-software.co.uk/blog/2010/10/19/trueview-v2-beta-now-with-poco-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Update to DomainTypes library</title>
		<link>http://evolving-software.co.uk/blog/2010/02/20/update-to-domaintypes-library/</link>
		<comments>http://evolving-software.co.uk/blog/2010/02/20/update-to-domaintypes-library/#comments</comments>
		<pubDate>Sat, 20 Feb 2010 13:18:24 +0000</pubDate>
		<dc:creator>Vijay</dc:creator>
				<category><![CDATA[New releases]]></category>
		<category><![CDATA[c# library]]></category>
		<category><![CDATA[domaintypes]]></category>
		<category><![CDATA[interfaces]]></category>
		<category><![CDATA[source code]]></category>

		<guid isPermaLink="false">http://evolving-software.co.uk/blog/?p=350</guid>
		<description><![CDATA[The initial release of DomainTypes was heavily influenced by the existing TrueView framework.  After spending much time working with a current client, it&#8217;s clear that a more &#8216;POCO&#8217; approach has significantly more benefits. Based on my findings (and questions over at StackOverflow), here are the major changes: Refined and enhanced most of the interfaces Removed [...]]]></description>
			<content:encoded><![CDATA[<p>The initial release of <em>DomainTypes</em> was heavily influenced by the existing TrueView framework.  After spending much time working with a current client, it&#8217;s clear that a more &#8216;POCO&#8217; approach has significantly more benefits.</p>
<p>Based on my findings (and <a href="http://stackoverflow.com/questions/tagged/domain-driven-design">questions over at StackOverflow</a>), here are the major changes:</p>
<ul>
<li>Refined and enhanced most of the interfaces</li>
<li>Removed the concept of <strong>persistent</strong> and <strong>transient</strong> classes</li>
<li><strong>Domain Services</strong> and <strong>Application Services</strong> have explicit interfaces</li>
<li>Domain Objects no longer implement <strong>IDependencyAware</strong></li>
<li>Removed the <strong>ITrackable</strong> interface</li>
</ul>
<p>I&#8217;ve also added more examples to clarify how you might use the interfaces.</p>
<p>You can <a href="http://evolving-software.co.uk/downloads/DomainTypes.zip">download the code here</a>.  All comments are welcome.</p>
<p><strong>P.S.</strong> Note that this library is <strong>NOT </strong>compatible with the current TrueView framework.  Watch this space for the new version!</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">http://evolving-software.co.uk/blog/wp-admin/post-new.php</div>
]]></content:encoded>
			<wfw:commentRss>http://evolving-software.co.uk/blog/2010/02/20/update-to-domaintypes-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Merry Christmas and a Happy New Year!</title>
		<link>http://evolving-software.co.uk/blog/2009/12/24/merry-christmas-and-a-happy-new-year/</link>
		<comments>http://evolving-software.co.uk/blog/2009/12/24/merry-christmas-and-a-happy-new-year/#comments</comments>
		<pubDate>Thu, 24 Dec 2009 09:10:35 +0000</pubDate>
		<dc:creator>Vijay</dc:creator>
				<category><![CDATA[News items]]></category>

		<guid isPermaLink="false">http://evolving-software.co.uk/blog/?p=342</guid>
		<description><![CDATA[A new version of TrueView is in the pipeline for next year.  The features on the whiteboard are: Better support for true DDD concepts Allow code models to be reused without TrueView Configuration without using .NET attributes Open architecture, to let consumers develop custom &#8216;persistence providers&#8217; More UI interception points, to allow greater customisation Auto-databinding [...]]]></description>
			<content:encoded><![CDATA[<p>A new version of TrueView is in the pipeline for next year.  The features on the whiteboard are:</p>
<ul>
<li>Better support for true DDD concepts</li>
<li>Allow code models to be reused without TrueView</li>
<li>Configuration without using .NET attributes</li>
<li>Open architecture, to let consumers develop custom &#8216;persistence providers&#8217;</li>
<li>More UI interception points, to allow greater customisation</li>
<li>Auto-databinding features, for WPF and possibly Silverlight</li>
<li>N-Tier support (finally)</li>
</ul>
<p>And we&#8217;re considering making TrueView <strong>FREE </strong>for non-commercial use.</p>
<p><strong>We&#8217;re going to need beta-testers for the new version</strong>, so if you&#8217;re interested <strong>please email us</strong>.</p>
<p>In the meantime, have a very Happy Christmas!</p>
]]></content:encoded>
			<wfw:commentRss>http://evolving-software.co.uk/blog/2009/12/24/merry-christmas-and-a-happy-new-year/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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 [...]]]></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 [...]]]></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>
	</channel>
</rss>

