<?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 and Command-Query Separation example application</title>
	<atom:link href="http://blog.xebia.com/2009/12/03/domain-driven-design-and-command-query-separation-example-application/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.xebia.com/2009/12/03/domain-driven-design-and-command-query-separation-example-application/</link>
	<description>Software development done right!</description>
	<lastBuildDate>Wed, 08 Feb 2012 14:41:38 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: Links to Command and Query Responsibility Segregation (CQRS) Pattern Code and Discussions &#124; iLude</title>
		<link>http://blog.xebia.com/2009/12/03/domain-driven-design-and-command-query-separation-example-application/#comment-97032</link>
		<dc:creator>Links to Command and Query Responsibility Segregation (CQRS) Pattern Code and Discussions &#124; iLude</dc:creator>
		<pubDate>Sun, 17 Oct 2010 05:45:26 +0000</pubDate>
		<guid isPermaLink="false">http://blog.xebia.com/?p=3761#comment-97032</guid>
		<description>[...] is Erik Rozendaal who wrote a lottery example to help train his coworkers. Erik&#8217;s code is written in [...]</description>
		<content:encoded><![CDATA[<p>[...] is Erik Rozendaal who wrote a lottery example to help train his coworkers. Erik&#8217;s code is written in [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Erik Rozendaal</title>
		<link>http://blog.xebia.com/2009/12/03/domain-driven-design-and-command-query-separation-example-application/#comment-93844</link>
		<dc:creator>Erik Rozendaal</dc:creator>
		<pubDate>Tue, 19 Jan 2010 08:42:12 +0000</pubDate>
		<guid isPermaLink="false">http://blog.xebia.com/?p=3761#comment-93844</guid>
		<description>@Jonas: I&#039;ve talk to Allard about cqrs4j and will probably meet up soon with him. I&#039;ll also be giving a talk at the next http://www.dddnl.org/ meetup on CRQS (March 9th). 

@Colin: Currently this will result in an optimistic locking failure. It was left as an exercise to add command/event conflict detection and resolution. Probably worth a blog post on itself, but the short version is that when a command is received for an older version of an aggregate you can compare the command to all events that have happened. If any of the events is conflicting (lottery drawn, etc) you get an optimistic locking failure. If there are no conflicts (someone else bought a lottery ticket) then you can proceed to process the command.</description>
		<content:encoded><![CDATA[<p>@Jonas: I&#8217;ve talk to Allard about cqrs4j and will probably meet up soon with him. I&#8217;ll also be giving a talk at the next <a href="http://www.dddnl.org/" rel="nofollow">http://www.dddnl.org/</a> meetup on CRQS (March 9th). </p>
<p>@Colin: Currently this will result in an optimistic locking failure. It was left as an exercise to add command/event conflict detection and resolution. Probably worth a blog post on itself, but the short version is that when a command is received for an older version of an aggregate you can compare the command to all events that have happened. If any of the events is conflicting (lottery drawn, etc) you get an optimistic locking failure. If there are no conflicts (someone else bought a lottery ticket) then you can proceed to process the command.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Colin</title>
		<link>http://blog.xebia.com/2009/12/03/domain-driven-design-and-command-query-separation-example-application/#comment-93841</link>
		<dc:creator>Colin</dc:creator>
		<pubDate>Mon, 18 Jan 2010 22:39:23 +0000</pubDate>
		<guid isPermaLink="false">http://blog.xebia.com/?p=3761#comment-93841</guid>
		<description>Erik,
Recently, I was studying CQRS by your lottery codes.
I got a problem：How to deal with concurrency issues? For example, two users purchasing the same lottery at the same time  : )</description>
		<content:encoded><![CDATA[<p>Erik,<br />
Recently, I was studying CQRS by your lottery codes.<br />
I got a problem：How to deal with concurrency issues? For example, two users purchasing the same lottery at the same time  : )</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jonas Van Poucke</title>
		<link>http://blog.xebia.com/2009/12/03/domain-driven-design-and-command-query-separation-example-application/#comment-93709</link>
		<dc:creator>Jonas Van Poucke</dc:creator>
		<pubDate>Wed, 30 Dec 2009 19:10:33 +0000</pubDate>
		<guid isPermaLink="false">http://blog.xebia.com/?p=3761#comment-93709</guid>
		<description>Hi,

Have you seen http://www.gridshore.nl/2009/12/21/cqrs-made-easy-with-cqrs4j/
as an Open Source Framework (Apache 2 license)?

Maybe you could help get that one at production quality?

Jonas</description>
		<content:encoded><![CDATA[<p>Hi,</p>
<p>Have you seen <a href="http://www.gridshore.nl/2009/12/21/cqrs-made-easy-with-cqrs4j/" rel="nofollow">http://www.gridshore.nl/2009/12/21/cqrs-made-easy-with-cqrs4j/</a><br />
as an Open Source Framework (Apache 2 license)?</p>
<p>Maybe you could help get that one at production quality?</p>
<p>Jonas</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: colin</title>
		<link>http://blog.xebia.com/2009/12/03/domain-driven-design-and-command-query-separation-example-application/#comment-93660</link>
		<dc:creator>colin</dc:creator>
		<pubDate>Mon, 28 Dec 2009 09:19:09 +0000</pubDate>
		<guid isPermaLink="false">http://blog.xebia.com/?p=3761#comment-93660</guid>
		<description>@Erik
I am glad to hear that.</description>
		<content:encoded><![CDATA[<p>@Erik<br />
I am glad to hear that.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Erik Rozendaal</title>
		<link>http://blog.xebia.com/2009/12/03/domain-driven-design-and-command-query-separation-example-application/#comment-93659</link>
		<dc:creator>Erik Rozendaal</dc:creator>
		<pubDate>Mon, 28 Dec 2009 08:12:07 +0000</pubDate>
		<guid isPermaLink="false">http://blog.xebia.com/?p=3761#comment-93659</guid>
		<description>Hi Colin,

The example application&#039;s &quot;domain&quot; support currently doesn&#039;t support multi-entity aggregates. Obviously, it should and I have some experimental code. Basically each Entity that is part of the same Aggregate gets a reference to the AggregateRoot and reports it&#039;s state change events there. 

To reduce the complexity of the AggregateRoot class I moved the tracking of entities and dispatching of events into a separate class called &quot;Aggregate&quot;. I&#039;ll see if I can check in the code into the master branch today.

Regards,
Erik</description>
		<content:encoded><![CDATA[<p>Hi Colin,</p>
<p>The example application&#8217;s &#8220;domain&#8221; support currently doesn&#8217;t support multi-entity aggregates. Obviously, it should and I have some experimental code. Basically each Entity that is part of the same Aggregate gets a reference to the AggregateRoot and reports it&#8217;s state change events there. </p>
<p>To reduce the complexity of the AggregateRoot class I moved the tracking of entities and dispatching of events into a separate class called &#8220;Aggregate&#8221;. I&#8217;ll see if I can check in the code into the master branch today.</p>
<p>Regards,<br />
Erik</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: colin</title>
		<link>http://blog.xebia.com/2009/12/03/domain-driven-design-and-command-query-separation-example-application/#comment-93647</link>
		<dc:creator>colin</dc:creator>
		<pubDate>Fri, 25 Dec 2009 02:39:35 +0000</pubDate>
		<guid isPermaLink="false">http://blog.xebia.com/?p=3761#comment-93647</guid>
		<description>Sorry about the use of c.</description>
		<content:encoded><![CDATA[<p>Sorry about the use of c.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Colin</title>
		<link>http://blog.xebia.com/2009/12/03/domain-driven-design-and-command-query-separation-example-application/#comment-93644</link>
		<dc:creator>Colin</dc:creator>
		<pubDate>Thu, 24 Dec 2009 22:44:52 +0000</pubDate>
		<guid isPermaLink="false">http://blog.xebia.com/?p=3761#comment-93644</guid>
		<description>Eric,
Example application let me know a lot about CQRS. Thanks.
But, I have a question. All Entity must extend  AggregateRoot, how to differentiate Entity and AggregateRoot?  As you know &quot;Aggregate is: Group of Entities &amp; Value Objects; One entity within the aggregate is the aggregate root&quot;.</description>
		<content:encoded><![CDATA[<p>Eric,<br />
Example application let me know a lot about CQRS. Thanks.<br />
But, I have a question. All Entity must extend  AggregateRoot, how to differentiate Entity and AggregateRoot?  As you know &#8220;Aggregate is: Group of Entities &amp; Value Objects; One entity within the aggregate is the aggregate root&#8221;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Command and Query Responsibility Segregation &#171; Dotsystems</title>
		<link>http://blog.xebia.com/2009/12/03/domain-driven-design-and-command-query-separation-example-application/#comment-93535</link>
		<dc:creator>Command and Query Responsibility Segregation &#171; Dotsystems</dc:creator>
		<pubDate>Thu, 17 Dec 2009 15:49:44 +0000</pubDate>
		<guid isPermaLink="false">http://blog.xebia.com/?p=3761#comment-93535</guid>
		<description>[...] Domain-Driven Design and Command-Query Separation example application by Erik Rozendaal (in Java) [...]</description>
		<content:encoded><![CDATA[<p>[...] Domain-Driven Design and Command-Query Separation example application by Erik Rozendaal (in Java) [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Erik Rozendaal</title>
		<link>http://blog.xebia.com/2009/12/03/domain-driven-design-and-command-query-separation-example-application/#comment-93380</link>
		<dc:creator>Erik Rozendaal</dc:creator>
		<pubDate>Sat, 05 Dec 2009 10:05:19 +0000</pubDate>
		<guid isPermaLink="false">http://blog.xebia.com/?p=3761#comment-93380</guid>
		<description>Thanks David. The onEvent method may certainly become a concern when you start handling a lot of events, although this may also be an indication your class starts to do too many things.

I&#039;ve an implementation of AggregateRoot that uses reflection and annotations to automatically invoke the correct handler methods, but for the training example I found it a bit too &quot;magical&quot;. The current onEvent method makes it very clear how events are dispatched internally.

Another approach could be to use the &lt;a href=&quot;http://en.wikipedia.org/wiki/Visitor_pattern&quot; rel=&quot;nofollow&quot;&gt;visitor pattern&lt;/a&gt;, but again I think this is probably overkill.

Erik</description>
		<content:encoded><![CDATA[<p>Thanks David. The onEvent method may certainly become a concern when you start handling a lot of events, although this may also be an indication your class starts to do too many things.</p>
<p>I&#8217;ve an implementation of AggregateRoot that uses reflection and annotations to automatically invoke the correct handler methods, but for the training example I found it a bit too &#8220;magical&#8221;. The current onEvent method makes it very clear how events are dispatched internally.</p>
<p>Another approach could be to use the <a href="http://en.wikipedia.org/wiki/Visitor_pattern" rel="nofollow">visitor pattern</a>, but again I think this is probably overkill.</p>
<p>Erik</p>
]]></content:encoded>
	</item>
</channel>
</rss>
<!-- This Quick Cache file was built for (  blog.xebia.com/2009/12/03/domain-driven-design-and-command-query-separation-example-application/feed/ ) in 0.53096 seconds, on Feb 9th, 2012 at 10:10 pm UTC. -->
<!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on Feb 9th, 2012 at 11:10 pm UTC -->
