<?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>Comments on: Domain-Driven Design, Thoughts?</title>
	<atom:link href="http://www.herrodius.com/blog/128/feed" rel="self" type="application/rss+xml" />
	<link>http://www.herrodius.com/blog/128</link>
	<description>Thoughts from a software developer</description>
	<lastBuildDate>Fri, 12 Mar 2010 14:56:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Hannes Stockner</title>
		<link>http://www.herrodius.com/blog/128/comment-page-1#comment-13142</link>
		<dc:creator>Hannes Stockner</dc:creator>
		<pubDate>Mon, 18 Feb 2008 22:07:49 +0000</pubDate>
		<guid isPermaLink="false">http://www.herrodius.com/blog/128#comment-13142</guid>
		<description>Hi Christophe

Developers often concentrate all one’s effort on the technical infrastructure, learn different libraries and frameworks believing that the sole use of them makes the software better.

In my opinion a good approach for new projects would be to find an ubiquitous language between domain experts, software architects and developers to make them understand the business domain and following, to make them elaborate a rich domain model which reflects what they are talking about. So the model becomes the basic of the language used by all team members. It becomes the heart of the application as it solves domain specific problems.

This approach does not exclude the use of any frameworks. A framework such as your IoC Container can support the Domain Driven Design philosophy, but the main focus should not lie on it.</description>
		<content:encoded><![CDATA[<p>Hi Christophe</p>
<p>Developers often concentrate all one’s effort on the technical infrastructure, learn different libraries and frameworks believing that the sole use of them makes the software better.</p>
<p>In my opinion a good approach for new projects would be to find an ubiquitous language between domain experts, software architects and developers to make them understand the business domain and following, to make them elaborate a rich domain model which reflects what they are talking about. So the model becomes the basic of the language used by all team members. It becomes the heart of the application as it solves domain specific problems.</p>
<p>This approach does not exclude the use of any frameworks. A framework such as your IoC Container can support the Domain Driven Design philosophy, but the main focus should not lie on it.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Christophe</title>
		<link>http://www.herrodius.com/blog/128/comment-page-1#comment-13140</link>
		<dc:creator>Christophe</dc:creator>
		<pubDate>Fri, 15 Feb 2008 17:30:50 +0000</pubDate>
		<guid isPermaLink="false">http://www.herrodius.com/blog/128#comment-13140</guid>
		<description>Hi Evan,

(I didn&#039;t even know there was a Cairngormdocs group. I joined and thanks for mentioning.)

The projects I&#039;m working on have almost all of the business logic on the Flex client. The server is primarily used for persistence and does not contain much business logic. This is because we want to be able to swap server implementations or even take the client offline in an AIR app.

That being said, it was not interesting for us to work directly on the DTO&#039;s and have our business logic in commands. Actually, I think commands should not carry domain logic at all, but I&#039;d much rather have a solid domain model with objects that contain the business logic (can we say DDD here?). It feels much more natural to invoke a business method on an object than to have to dispatch an event to carry out that business logic.

The commands we have are now only used to invoke delegates which invoke services and do the translation of  the model objects and the DTO&#039;s.

Does that make sense?</description>
		<content:encoded><![CDATA[<p>Hi Evan,</p>
<p>(I didn&#8217;t even know there was a Cairngormdocs group. I joined and thanks for mentioning.)</p>
<p>The projects I&#8217;m working on have almost all of the business logic on the Flex client. The server is primarily used for persistence and does not contain much business logic. This is because we want to be able to swap server implementations or even take the client offline in an AIR app.</p>
<p>That being said, it was not interesting for us to work directly on the DTO&#8217;s and have our business logic in commands. Actually, I think commands should not carry domain logic at all, but I&#8217;d much rather have a solid domain model with objects that contain the business logic (can we say DDD here?). It feels much more natural to invoke a business method on an object than to have to dispatch an event to carry out that business logic.</p>
<p>The commands we have are now only used to invoke delegates which invoke services and do the translation of  the model objects and the DTO&#8217;s.</p>
<p>Does that make sense?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Evan Gifford</title>
		<link>http://www.herrodius.com/blog/128/comment-page-1#comment-13138</link>
		<dc:creator>Evan Gifford</dc:creator>
		<pubDate>Fri, 15 Feb 2008 15:28:01 +0000</pubDate>
		<guid isPermaLink="false">http://www.herrodius.com/blog/128#comment-13138</guid>
		<description>Hi Christophe,

This subject recently came up on the Cairngormdocs group. The question was about the business logic for calculating a sum of the data on a ValueObject. 

There seems to be a correlation of a &quot;Repository&quot; to a &quot;Model Object&quot; in Cairngorm. Although the lines may be blurred when one binds directly to a property.

As for the DTO transformation layer, is it needed if the service was created specifically to support the client? If the DTOs have semantic meaning on the client, why translate them?

In general I agree with translating them. What if those services go on to become more general and support multiple clients?

But specifically for the kinds of applications with involve a service with the sole purpose of supporting a specific client, I generally leave the DTOs intact.

The last benefit of this method is that the VOs are canidates for code generation. If the schema changes on the server, a quick rebuild of the VOs and remapping a few properties on the client is all that is needed.</description>
		<content:encoded><![CDATA[<p>Hi Christophe,</p>
<p>This subject recently came up on the Cairngormdocs group. The question was about the business logic for calculating a sum of the data on a ValueObject. </p>
<p>There seems to be a correlation of a &#8220;Repository&#8221; to a &#8220;Model Object&#8221; in Cairngorm. Although the lines may be blurred when one binds directly to a property.</p>
<p>As for the DTO transformation layer, is it needed if the service was created specifically to support the client? If the DTOs have semantic meaning on the client, why translate them?</p>
<p>In general I agree with translating them. What if those services go on to become more general and support multiple clients?</p>
<p>But specifically for the kinds of applications with involve a service with the sole purpose of supporting a specific client, I generally leave the DTOs intact.</p>
<p>The last benefit of this method is that the VOs are canidates for code generation. If the schema changes on the server, a quick rebuild of the VOs and remapping a few properties on the client is all that is needed.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Christophe</title>
		<link>http://www.herrodius.com/blog/128/comment-page-1#comment-13137</link>
		<dc:creator>Christophe</dc:creator>
		<pubDate>Thu, 14 Feb 2008 20:40:17 +0000</pubDate>
		<guid isPermaLink="false">http://www.herrodius.com/blog/128#comment-13137</guid>
		<description>@Peter Bell: Thanks for your comments.

I&#039;m curious to know how implementations will differ between asynchronous Flex clients and AIR clients that use an embedded database with synchronous communication. Or maybe even a combination of both...

In general, I find it hard(er) to develop an asynchronous system. You start out with a clean domain model and have it perfectly set up with tests but then the server communication needs to be implemented and it becomes quite of a blur. I&#039;m especially referring to the commands/delegates/modellocator chain in Cairngorm. Do you have any experience or best practices to share?</description>
		<content:encoded><![CDATA[<p>@Peter Bell: Thanks for your comments.</p>
<p>I&#8217;m curious to know how implementations will differ between asynchronous Flex clients and AIR clients that use an embedded database with synchronous communication. Or maybe even a combination of both&#8230;</p>
<p>In general, I find it hard(er) to develop an asynchronous system. You start out with a clean domain model and have it perfectly set up with tests but then the server communication needs to be implemented and it becomes quite of a blur. I&#8217;m especially referring to the commands/delegates/modellocator chain in Cairngorm. Do you have any experience or best practices to share?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Peter Bell</title>
		<link>http://www.herrodius.com/blog/128/comment-page-1#comment-13133</link>
		<dc:creator>Peter Bell</dc:creator>
		<pubDate>Thu, 14 Feb 2008 12:36:57 +0000</pubDate>
		<guid isPermaLink="false">http://www.herrodius.com/blog/128#comment-13133</guid>
		<description>It&#039;s a great book. I ws lucky enough to meet up with Eric Evans at ooPSLA this year in the DDD BoF sessions and it&#039;s a perfect corollary to the code generation work I do as DDD is about eliciting a ubiquitous language, and code gen is about automatically creating applications based on statements in an executable set of ubiquitous languages (in DDD UL&#039;s don&#039;t have to be executable, but I find that for many use cases they can be).

The idea of repositories is similar to the Service class singletons you&#039;ll often find - either one per business object or one per major domain concept in back end languages like ColdFusion or Java. 

I find that when I spec a project I start with screens and actions, but I describe all of the screens and actions in terms of the domain objects they need to display, filter, edit, report on, etc. In a Flex project you may well find that the &quot;smart&quot; stuff is being done behind the scenes behind your remote API written in the back end language of your choice. The problem with creating rich business objects within Flex is that you&#039;re going to have to replicate that logic elsewhere if you want to support multiple front ends for a given back end object model, so we&#039;ll usually handle all of the rich object functionality on the back end and then provide an API for accessing and modifying the domain objects so the Flex system can focus much more on the user interaction part of the process.

Definitely lots to be learnt from DDD though.</description>
		<content:encoded><![CDATA[<p>It&#8217;s a great book. I ws lucky enough to meet up with Eric Evans at ooPSLA this year in the DDD BoF sessions and it&#8217;s a perfect corollary to the code generation work I do as DDD is about eliciting a ubiquitous language, and code gen is about automatically creating applications based on statements in an executable set of ubiquitous languages (in DDD UL&#8217;s don&#8217;t have to be executable, but I find that for many use cases they can be).</p>
<p>The idea of repositories is similar to the Service class singletons you&#8217;ll often find &#8211; either one per business object or one per major domain concept in back end languages like ColdFusion or Java. </p>
<p>I find that when I spec a project I start with screens and actions, but I describe all of the screens and actions in terms of the domain objects they need to display, filter, edit, report on, etc. In a Flex project you may well find that the &#8220;smart&#8221; stuff is being done behind the scenes behind your remote API written in the back end language of your choice. The problem with creating rich business objects within Flex is that you&#8217;re going to have to replicate that logic elsewhere if you want to support multiple front ends for a given back end object model, so we&#8217;ll usually handle all of the rich object functionality on the back end and then provide an API for accessing and modifying the domain objects so the Flex system can focus much more on the user interaction part of the process.</p>
<p>Definitely lots to be learnt from DDD though.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tony MacDonell</title>
		<link>http://www.herrodius.com/blog/128/comment-page-1#comment-13131</link>
		<dc:creator>Tony MacDonell</dc:creator>
		<pubDate>Wed, 13 Feb 2008 22:19:59 +0000</pubDate>
		<guid isPermaLink="false">http://www.herrodius.com/blog/128#comment-13131</guid>
		<description>I am actually really interested in how this book turns out to be. Sounds very interesting, and I may go pick it up.</description>
		<content:encoded><![CDATA[<p>I am actually really interested in how this book turns out to be. Sounds very interesting, and I may go pick it up.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: EECOLOR</title>
		<link>http://www.herrodius.com/blog/128/comment-page-1#comment-13130</link>
		<dc:creator>EECOLOR</dc:creator>
		<pubDate>Wed, 13 Feb 2008 21:43:28 +0000</pubDate>
		<guid isPermaLink="false">http://www.herrodius.com/blog/128#comment-13130</guid>
		<description>Oh, haha. I read your post in my reader and was about to suggest spring and prana (allthough I did not have the chance to work with it myself). But after clicking the post I noticed you are the one writing prana :D</description>
		<content:encoded><![CDATA[<p>Oh, haha. I read your post in my reader and was about to suggest spring and prana (allthough I did not have the chance to work with it myself). But after clicking the post I noticed you are the one writing prana <img src='http://www.herrodius.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dominick Accattato</title>
		<link>http://www.herrodius.com/blog/128/comment-page-1#comment-13129</link>
		<dc:creator>Dominick Accattato</dc:creator>
		<pubDate>Wed, 13 Feb 2008 21:39:41 +0000</pubDate>
		<guid isPermaLink="false">http://www.herrodius.com/blog/128#comment-13129</guid>
		<description>Just want to comment that this is my favorite book of all time.  I&#039;ve read it a few times and its timeless.</description>
		<content:encoded><![CDATA[<p>Just want to comment that this is my favorite book of all time.  I&#8217;ve read it a few times and its timeless.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
