<?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>The Developer Day &#187; cqrs</title>
	<atom:link href="http://www.thedeveloperday.com/tag/cqrs/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.thedeveloperday.com</link>
	<description>Staying Curious</description>
	<lastBuildDate>Tue, 27 Jul 2010 17:33:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>CQRS Resources</title>
		<link>http://www.thedeveloperday.com/cqrs-resources/</link>
		<comments>http://www.thedeveloperday.com/cqrs-resources/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 21:36:50 +0000</pubDate>
		<dc:creator>Žilvinas Šaltys</dc:creator>
				<category><![CDATA[DDD]]></category>
		<category><![CDATA[Domain Model]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[cqrs]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[resources]]></category>

		<guid isPermaLink="false">http://www.thedeveloperday.com/?p=648</guid>
		<description><![CDATA[In the past I wrote about what CQRS is and now I am adding a list of available CQRS resources known to me. If you come by any other CQRS resources online please post a comment with your link. Thank you. Video Presentations / Interviews Greg Young on Unshackle Your Domain Udi Dahan on CQRS, [...]]]></description>
			<content:encoded><![CDATA[<p>In the past I wrote about <a href="http://www.thedeveloperday.com/what-is-cqrs/">what CQRS is</a> and now I am adding a list of available CQRS resources known to me. If you come by any other CQRS resources online please post a comment with your link. Thank you.</p>
<h2>Video Presentations / Interviews</h2>
<p><a href="http://www.infoq.com/presentations/greg-young-unshackle-qcon08">Greg Young on Unshackle Your Domain</a><br />
<a href="http://www.infoq.com/interviews/dahan-cqrs-ddd-nservicebus">Udi Dahan on CQRS, DDD, NServiceBus</a><br />
<a href="http://skillsmatter.com/podcast/design-architecture/architectural-innovation-cqrs">Udi Dahan on CQRS and Domain Models</a><br />
<a href="http://skillsmatter.com/podcast/design-architecture/architectural-innovation-eventing-event-sourcing">Greg Young on Architectural Innovation, Eventing and Event Sourcing</a><br />
<a href="http://skillsmatter.com/podcast/open-source-dot-net/greg-young-cqrs-event-sourcing-the-business-perspecive">Greg Young on CQRS and Event Sourcing: The Business Perspective</a><br />
<a href="http://skillsmatter.com/podcast/open-source-dot-net/udi-dahan-command-query-responsibility-segregation/rl-311">Udi Dahan on CQRS</a></p>
<h2>Articles / Blogs / Blog Posts</h2>
<p><a href="http://codebetter.com/blogs/gregyoung/">Greg Young&#8217;s Blog</a> &#8211; a lot of posts on CQRS and related topics.<br />
<a href="http://thinkbeforecoding.com/">Think Before Coding</a> &#8211; blog posts on CQRS and related topics<br />
<a href="http://www.udidahan.com/2010/05/07/cqrs-isnt-the-answer-its-just-one-of-the-questions/">CQRS isn&#8217;t the answer</a> by Udi Dahan.<br />
<a href="http://www.udidahan.com/2009/12/09/clarified-cqrs/">Clarified CQRS</a> by Udi Dahan<br />
<a href="http://blog.fohjin.com/blog/2009/11/12/CQRS_a_la_Greg_Young">CQRS a la Greg Young</a> by Mark Nijhof<br />
<a href="http://richarddingwall.name/2010/06/15/brownfield-cqrs-part-1-commands/">Brownfield CQRS</a> by Richard Dingwall.<br />
<a href="http://julienletrouit.com/?p=22">Transitioning from DDD lite</a> by Julien Letrouit<br />
<a href="http://jonathan-oliver.blogspot.com/2009/10/dddd-why-i-love-cqrs.html">Why I Love CQRS</a><br />
<a href="http://abdullin.com/cqrs">CQRS on Cloud</a> by Rinat Abdullin</p>
<h2>Frameworks, Code Examples</h2>
<p><a href="http://github.com/MarkNijhof/Fohjin">C# CQRS Example</a> by Mark Nijhof<br />
<a href="http://agrcqrs.codeplex.com/">C# CQRS Framework</a><br />
<a href="http://code.google.com/p/axonframework/">JAVA Axon Framework</a><br />
<a href="http://code.google.com/p/lokad-cqrs/">Lokad CQRS Framework</a><br />
<a href="http://ncqrs.org/">NCQRS Framework</a><br />
<a href="http://thecqrskitchen.codeplex.com/">Kitchen Example</a></p>
<h2>Other</h2>
<p><a href="http://tech.groups.yahoo.com/group/domaindrivendesign/">DDD Mailing List</a> &#8211; Usually lot&#8217;s of conversations on CQRS</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedeveloperday.com/cqrs-resources/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>What is CQRS?</title>
		<link>http://www.thedeveloperday.com/what-is-cqrs/</link>
		<comments>http://www.thedeveloperday.com/what-is-cqrs/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 23:50:06 +0000</pubDate>
		<dc:creator>Žilvinas Šaltys</dc:creator>
				<category><![CDATA[DDD]]></category>
		<category><![CDATA[Patterns]]></category>
		<category><![CDATA[cqrs]]></category>
		<category><![CDATA[Domain Model]]></category>
		<category><![CDATA[models]]></category>

		<guid isPermaLink="false">http://www.thedeveloperday.com/?p=649</guid>
		<description><![CDATA[CQRS is a software architecture pattern which stands for Command Query Responsibility Segregation. The author of the pattern name CQRS is Greg Young who first described it in his blog: I am going to throw out a quick pattern name for this and call it Command and Query Responsibility Segregation or CQRS as we are [...]]]></description>
			<content:encoded><![CDATA[<p><strong>CQRS</strong> is a software architecture pattern which stands for <strong>Command Query Responsibility Segregation</strong>. The author of the pattern name <strong>CQRS</strong> is <a href="http://codebetter.com/blogs/gregyoung/">Greg Young</a> who first <a href="http://codebetter.com/blogs/gregyoung/archive/2009/08/13/command-query-separation.aspx">described it in his blog</a>:</p>
<blockquote style="background: #444; color: #fff; padding-left: 2px;"><p>I<em> am going to throw out a quick pattern name for this and call it <strong>Command and Query Responsibility Segregation</strong> or <strong>CQRS</strong> as we are in fact simply taking what would usually be one object and splitting its responsibilities into two objects.</em></p></blockquote>
<p>At the time of writing <strong>CQRS</strong> does not have an official definition. It&#8217;s difficult to define <strong>CQRS</strong> with a definition that would be both simple and useful. To describe <strong>CQRS</strong> at an object level I&#8217;ve came up with a definition which is just a reworded sentence from <a href="http://codebetter.com/blogs/gregyoung/archive/2010/02/16/cqrs-task-based-uis-event-sourcing-agh.aspx">Greg Young&#8217;s blog post</a>:</p>
<blockquote style="background: #444; color: #fff; padding-left: 2px;"><p><em><strong>Command Query Responsibility Segregation</strong> or <strong>CQRS</strong> is the creation of two objects where there was previously one. The separation occurs based upon whether the methods are a command or a query.</em></p></blockquote>
<p><strong>CQRS </strong>can also be defined at a higher level. Greg Young was kind to provide a definition:</p>
<blockquote style="background: #444; color: #fff; padding-left: 2px;"><p><strong><em>Command Query Responsibility Segregation</em><span style="font-weight: normal;"> or</span><em> CQRS</em></strong> is the recognition that there are differing architectural properties when looking at the paths for reads and writes of a system. <strong><em>CQRS</em></strong> allows the specialization of the paths to better provide an optimal solution.</p></blockquote>
<p><strong>CQRS</strong> pattern is similar to <a href="http://en.wikipedia.org/wiki/Command-query_separation">CQS by Meyer</a> but is also different. <strong>CQS</strong> separates command methods that change state from query methods that read state. <strong>CQRS</strong> goes further and separates the command methods that change state and query methods that read into two different objects.</p>
<h2>Benefits of CQRS</h2>
<ul>
<li>The most simple benefit of <strong>CQRS</strong> is that it simplifies read and write models by separating them. Write model no longer contains queries and developers can directly focus on domain model behaviours. What otherwise could have been a repository with hundreds of different read methods mixed with different <strong>lazy loading</strong>, <strong>pre-fetch</strong> and <strong>paging strategies</strong> can now be hidden away in a separate read model.</li>
<li>
<div id="_mcePaste">Another reason is <a href="http://sourcemaking.com/refactoring/divergent-change">Divergent Change</a>. Divergent change occurs when one class is commonly changed in different ways for different reasons. You might be modifying queries more often than commands which might not only break your read queries but your commands as well. By having them separated you minimise the risks of both being broken.</div>
</li>
<li>The <strong>single most important benefit</strong> of <strong>CQRS</strong> is that by separating read and write models you can make different choices on different models. For example you may optimize your write model for write performance and your read system for read performance.</li>
<li>Another nice feature of <strong>CQRS</strong> is the available option to easily distribute work across separate teams. For example the read part of a web e-shop application can be outsourced to less expensive developers offshore.</li>
<li><a href="http://codebetter.com/blogs/gregyoung/archive/2010/02/20/why-use-event-sourcing.aspx">Event sourcing</a> is a different pattern which <a href="http://codebetter.com/blogs/gregyoung/archive/2010/02/13/cqrs-and-event-sourcing.aspx">shares a strong symbiotic relation</a> with <strong>CQRS</strong>. Once your system reaches an architectural level where you may need multiple data models it might and probably will introduce <strong>synchronization issues</strong>. It is then impossible to say which model is incorrect. In an <strong>event centric</strong> system where commands are translated into events by the <strong>domain model</strong> these events can be used as the primary data model. This not only solves data synchronization issues, but also significantly improves testing by allowing to test for &#8220;<strong>what didn&#8217;t happen</strong>&#8221; and opens easy doors for integration with other systems since other systems can now listen to the events published by the domain model.</li>
<li><strong>Eventual Consistency</strong>. In very simple terms Eventual Consistency can be defined as simply just caching. In event centric systems it is possible to delay the handling of published domain model events and handle them in a different thread or a process. This will make write and read data models inconsistent but it might significantly improve the performance of your <strong>commands</strong>.</li>
</ul>
<h2>In Conclusion</h2>
<p><strong>CQRS </strong>is a very interesting pattern. By some it may even be considered to be the silver bullet. <strong>It isn&#8217;t</strong>. Like all patterns <strong>CQRS </strong>has <strong>tradeoffs</strong>. It may be difficult to sell <strong>CQRS </strong>to management since it&#8217;s not a well known classic approach to <strong>software architecture</strong>. Less known tools, technologies. As an example in the PHP world there are currently no mature service buses such as <a href="http://nservicebus.com/">NServiceBus</a> in the .NET world. It is almost impossible or more often than not worth the Return of Investment to migrate legacy apps to <strong>CQRS</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedeveloperday.com/what-is-cqrs/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Command Query Responsibility Segregation Open Talk</title>
		<link>http://www.thedeveloperday.com/command-query-responsibility-segregation-open-talk/</link>
		<comments>http://www.thedeveloperday.com/command-query-responsibility-segregation-open-talk/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 00:46:08 +0000</pubDate>
		<dc:creator>Žilvinas Šaltys</dc:creator>
				<category><![CDATA[Domain Model]]></category>
		<category><![CDATA[Patterns]]></category>
		<category><![CDATA[cqrs]]></category>
		<category><![CDATA[DDD]]></category>
		<category><![CDATA[dddd]]></category>
		<category><![CDATA[Model]]></category>
		<category><![CDATA[soa]]></category>

		<guid isPermaLink="false">http://www.thedeveloperday.com/?p=481</guid>
		<description><![CDATA[I went to see Udi Dahan speaking on Command and Query Responsibility Segregation. The open talk was organised by Skills Matter who support the Open Source community by organizing free events and courses. Udi Dahan is a world renowned software architect and speaker. Udi is a specialist in SOA and distributed systems. It is a [...]]]></description>
			<content:encoded><![CDATA[<p>I went to see <a href="http://www.udidahan.com/">Udi Dahan</a> speaking on Command and Query Responsibility Segregation. The open talk was organised by <a href="http://www.skillsmatter.com">Skills Matter</a> who support the Open Source community by organizing free events and courses.</p>
<p>Udi Dahan is a world renowned software architect and speaker. Udi is a specialist in SOA and distributed systems. It is a pleasure to listen to Udi speak because of his ability to present ideas clearly and keep others wanting to see what the next slide holds.</p>
<p>Command Query Responsibility Segregation or <a href="http://elegantcode.com/2009/11/11/cqrs-la-greg-young/">CQRS</a> is software architecture pattern. The pattern is about separating (Segregating) the read side (Queries) and write side (Commands) of the system. </p>
<p>A simple example would be an application that does event reservations. All read commands would be executed against a reporting database which is stale and can be de-normalized. All calculations needed to display the data have been done before populating the reporting database. All write commands like making an actual reservation or adding a new event is executed against a Domain Model with it&#8217;s own database. Domain Model is never used to execute reporting queries. Reporting databases are generated from the write side database after all needed calculations have been performed.</p>
<p>This architectural pattern simplifies the Business Domain Model making it behavior only making it easier to maintain. Another strong advantage of CQRS is system performance. CQRS approach accepts that reporting data can be stale. This enables easier development of highly scalable distributed systems.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thedeveloperday.com/command-query-responsibility-segregation-open-talk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
