<?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: Life inside an Aggregate Root, part 1</title>
	<atom:link href="http://richarddingwall.name/2009/10/13/life-inside-an-aggregate-root-part-1/feed/" rel="self" type="application/rss+xml" />
	<link>http://richarddingwall.name/2009/10/13/life-inside-an-aggregate-root-part-1/</link>
	<description>The adventures of a young kiwi software developer in London</description>
	<lastBuildDate>Thu, 10 May 2012 16:20:46 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
	<item>
		<title>By: Ali Çevik</title>
		<link>http://richarddingwall.name/2009/10/13/life-inside-an-aggregate-root-part-1/comment-page-1/#comment-64810</link>
		<dc:creator>Ali Çevik</dc:creator>
		<pubDate>Thu, 19 Apr 2012 19:41:10 +0000</pubDate>
		<guid isPermaLink="false">http://richarddingwall.name/?p=2194#comment-64810</guid>
		<description>How about this: allow adding a Skill only through a call to the TrainingProgramme.

trainingProgramme.AddSkill(skillGroupName, skill)

This way you could make the validation before adding the Skill to the SkillGroup yet without a circular dependency.</description>
		<content:encoded><![CDATA[<p>How about this: allow adding a Skill only through a call to the TrainingProgramme.</p>
<p>trainingProgramme.AddSkill(skillGroupName, skill)</p>
<p>This way you could make the validation before adding the Skill to the SkillGroup yet without a circular dependency.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Thomas Han</title>
		<link>http://richarddingwall.name/2009/10/13/life-inside-an-aggregate-root-part-1/comment-page-1/#comment-40137</link>
		<dc:creator>Thomas Han</dc:creator>
		<pubDate>Wed, 24 Aug 2011 21:44:21 +0000</pubDate>
		<guid isPermaLink="false">http://richarddingwall.name/?p=2194#comment-40137</guid>
		<description>You&#039;ve stated that 
Entities can only hold references to aggregate roots, not entities or value objects within.

Why can&#039;t the entities hold a reference to VO???

Entities can&#039;t hold reference to other entities due to aggregate boundary stating is can&#039;t hold reference other entities but through the aggregate root but there is no reason entities can&#039;t hold a reference to VO.</description>
		<content:encoded><![CDATA[<p>You&#8217;ve stated that<br />
Entities can only hold references to aggregate roots, not entities or value objects within.</p>
<p>Why can&#8217;t the entities hold a reference to VO???</p>
<p>Entities can&#8217;t hold reference to other entities due to aggregate boundary stating is can&#8217;t hold reference other entities but through the aggregate root but there is no reason entities can&#8217;t hold a reference to VO.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Fred Wang</title>
		<link>http://richarddingwall.name/2009/10/13/life-inside-an-aggregate-root-part-1/comment-page-1/#comment-15986</link>
		<dc:creator>Fred Wang</dc:creator>
		<pubDate>Tue, 10 Aug 2010 08:46:06 +0000</pubDate>
		<guid isPermaLink="false">http://richarddingwall.name/?p=2194#comment-15986</guid>
		<description>Hi Richard,

In my opinion,there are two kinds work of aggregate root:
1.as a container(or lifemanagement) ,it is the root,we have a relation from the root to the leaves .It is a unidirectional relationship.
2.for validation task(or some thing similar),just as your example.So the leaves need a reference to the root.It is a bidirectional relationship.

But , I think the bidirectional is very hard to maintain, if we don&#039;t need the  validation function,do we need a bidirectional?
Another question is ,if I have a deep graph,how to set the reference to the root and mantain the bidirectional relationship by nhibernate?

Cheers,
Fred Wang</description>
		<content:encoded><![CDATA[<p>Hi Richard,</p>
<p>In my opinion,there are two kinds work of aggregate root:<br />
1.as a container(or lifemanagement) ,it is the root,we have a relation from the root to the leaves .It is a unidirectional relationship.<br />
2.for validation task(or some thing similar),just as your example.So the leaves need a reference to the root.It is a bidirectional relationship.</p>
<p>But , I think the bidirectional is very hard to maintain, if we don&#8217;t need the  validation function,do we need a bidirectional?<br />
Another question is ,if I have a deep graph,how to set the reference to the root and mantain the bidirectional relationship by nhibernate?</p>
<p>Cheers,<br />
Fred Wang</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jaime Metcher</title>
		<link>http://richarddingwall.name/2009/10/13/life-inside-an-aggregate-root-part-1/comment-page-1/#comment-12504</link>
		<dc:creator>Jaime Metcher</dc:creator>
		<pubDate>Thu, 28 Jan 2010 00:54:33 +0000</pubDate>
		<guid isPermaLink="false">http://richarddingwall.name/?p=2194#comment-12504</guid>
		<description>I don&#039;t really have a problem with the backreference from SkillGroup to TrainingProgramme, but having a method TrainingProgramme.addSkill(skillGroup,skill) that does the uniqueness check before calling skillGroup.add(skill) seems to me to be putting the responsibility where it belongs.  The requirement for whole of programme skill uniqueness is part of the specification of TrainingProgramme, and yet it&#039;s being implemented by SkillGroup.  To put it another way, looking at the code of TrainingProgramme would not tell you that requirement existed.</description>
		<content:encoded><![CDATA[<p>I don&#8217;t really have a problem with the backreference from SkillGroup to TrainingProgramme, but having a method TrainingProgramme.addSkill(skillGroup,skill) that does the uniqueness check before calling skillGroup.add(skill) seems to me to be putting the responsibility where it belongs.  The requirement for whole of programme skill uniqueness is part of the specification of TrainingProgramme, and yet it&#8217;s being implemented by SkillGroup.  To put it another way, looking at the code of TrainingProgramme would not tell you that requirement existed.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Reflective Perspective - Chris Alcock &#187; The Morning Brew #454</title>
		<link>http://richarddingwall.name/2009/10/13/life-inside-an-aggregate-root-part-1/comment-page-1/#comment-10963</link>
		<dc:creator>Reflective Perspective - Chris Alcock &#187; The Morning Brew #454</dc:creator>
		<pubDate>Wed, 14 Oct 2009 07:47:42 +0000</pubDate>
		<guid isPermaLink="false">http://richarddingwall.name/?p=2194#comment-10963</guid>
		<description>[...] Life inside an Aggregate Root, part 1 - Richard Dingwall explores one of the key Domain Driven Design tenants, the &#8216;aggregate root&#8217; in this two part article discussing the key rules about how they should behave [...]</description>
		<content:encoded><![CDATA[<p>[...] Life inside an Aggregate Root, part 1 &#8211; Richard Dingwall explores one of the key Domain Driven Design tenants, the &#8216;aggregate root&#8217; in this two part article discussing the key rules about how they should behave [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Richard Dingwall &#187; Life inside an Aggregate Root, part 2</title>
		<link>http://richarddingwall.name/2009/10/13/life-inside-an-aggregate-root-part-1/comment-page-1/#comment-10952</link>
		<dc:creator>Richard Dingwall &#187; Life inside an Aggregate Root, part 2</dc:creator>
		<pubDate>Tue, 13 Oct 2009 20:13:23 +0000</pubDate>
		<guid isPermaLink="false">http://richarddingwall.name/?p=2194#comment-10952</guid>
		<description>[...] This is the second half of a two-part article. Read the first half here: Life inside an Aggregate Root, part 1. [...]</description>
		<content:encoded><![CDATA[<p>[...] This is the second half of a two-part article. Read the first half here: Life inside an Aggregate Root, part 1. [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Richard</title>
		<link>http://richarddingwall.name/2009/10/13/life-inside-an-aggregate-root-part-1/comment-page-1/#comment-10933</link>
		<dc:creator>Richard</dc:creator>
		<pubDate>Mon, 12 Oct 2009 23:58:40 +0000</pubDate>
		<guid isPermaLink="false">http://richarddingwall.name/?p=2194#comment-10933</guid>
		<description>Kevin: good question - I inject the aggregate root into the entity when it is constructed i.e., when you create a SkillGroup, you specify which TrainingProgramme it belongs to (see example). If you&#039;re using NHibernate, the TrainingProgramme-&gt;SkillGroup association is inverse. 

Part 2 will be about making the TrainingProgramme responsible for constructing child SkillGroups :)</description>
		<content:encoded><![CDATA[<p>Kevin: good question &#8211; I inject the aggregate root into the entity when it is constructed i.e., when you create a SkillGroup, you specify which TrainingProgramme it belongs to (see example). If you&#8217;re using NHibernate, the TrainingProgramme-&gt;SkillGroup association is inverse. </p>
<p>Part 2 will be about making the TrainingProgramme responsible for constructing child SkillGroups :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Kevin Berridge</title>
		<link>http://richarddingwall.name/2009/10/13/life-inside-an-aggregate-root-part-1/comment-page-1/#comment-10931</link>
		<dc:creator>Kevin Berridge</dc:creator>
		<pubDate>Mon, 12 Oct 2009 23:31:16 +0000</pubDate>
		<guid isPermaLink="false">http://richarddingwall.name/?p=2194#comment-10931</guid>
		<description>Not sure if you&#039;re planning on covering this in a future post, but I&#039;m curious.  If you were using NHibernate (or any ORM really), how would you set the back pointer from SkillGroup to TrainingProgramme?  I&#039;m assuming the ORM wouldn&#039;t know how to do this for you, so you would have to intercede at some point.</description>
		<content:encoded><![CDATA[<p>Not sure if you&#8217;re planning on covering this in a future post, but I&#8217;m curious.  If you were using NHibernate (or any ORM really), how would you set the back pointer from SkillGroup to TrainingProgramme?  I&#8217;m assuming the ORM wouldn&#8217;t know how to do this for you, so you would have to intercede at some point.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

