<?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>Musings&#60;Biefeld&#62; &#187; Domain Driven Design</title>
	<atom:link href="http://sbiefeld.com/tag/domain-driven-design/feed/" rel="self" type="application/rss+xml" />
	<link>http://sbiefeld.com</link>
	<description>- curiosities of development, life, the universe and everything -</description>
	<lastBuildDate>Thu, 17 Nov 2011 04:01:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Presenter Logic &#124;&#124; Domain Service Logic &#124;&#124; Repository Logic?</title>
		<link>http://sbiefeld.com/2009/02/presenter-logic-domain-service-logic-repository-logic/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=presenter-logic-domain-service-logic-repository-logic</link>
		<comments>http://sbiefeld.com/2009/02/presenter-logic-domain-service-logic-repository-logic/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 05:22:33 +0000</pubDate>
		<dc:creator>Sean Biefeld</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Domain Driven Design]]></category>
		<category><![CDATA[Domain Service]]></category>
		<category><![CDATA[Presenter]]></category>
		<category><![CDATA[View]]></category>

		<guid isPermaLink="false">http://sbiefeld.com/?p=186</guid>
		<description><![CDATA[Obviously the answer to the titular question is yes. I have recently found myself questioning whether the logic I am coding belongs in a domain service or in the presenter. I actually found the same logic in the presenter residing the base repository. Something definitely smells wrong, almost like the putrid smell of death, lol, [...]]]></description>
			<content:encoded><![CDATA[<p><br/>
<p>Obviously the answer to the titular question is yes.</p>
<p><br/></p>
<p>I have recently found myself questioning whether the logic I am coding belongs in a <a href="http://devlicio.us/blogs/casey/archive/2009/02/17/ddd-services.aspx" target="_blank">domain service</a> or in the presenter. I actually found the same logic in the presenter residing the base repository. Something definitely <a href="http://en.wikipedia.org/wiki/Code_smell" target="_blank">smells</a> wrong, almost like the putrid smell of death, lol, nah just a <a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself" target="_blank">DRY</a> smell and a hint of mixed responsibility odor. The presenter was calling the Repository directly which was kinda of an indicator, but it is valid to do so, depending on the scenario.</p>
<p><br/></p>
<p>The application that I am currently working in is a web application. That being said, I feel it is valid to consider the web limitations part of the current domain, not just a concern of the presentation. If we need to move to a windows app or something else, it will take a lot of refactoring, so why not just view the web&#8217;s issues as part of what affects the domain. Besides, is the purpose of the domain to be abstract enough to support multiple platforms or to dimish complexity? Anyway, that&#8217;s another discussion altogether, and I&#8217;m digressing.</p>
<p><br/></p>
<p>Here&#8217;s the skinny, that&#8217;s a valid colloquialism isn&#8217;t it. I found string to integer conversion happening in two different places. Once in the presenter, grabbing a string Id from the view, converting it, calling an overloaded GetById method from the repository or throwing an exception if the Id was invalid. The overloaded GetById method was in the base repository, it either accepted a string Id or integer Id, if the string Id was invalid it was throwing an exception. Yikes, this is scary, and to think I was the one that coded all this, frightening, I know. I am recovering so don&#8217;t you worry yourself. Now to the current code:</p>
<h3>Code to be Refactored:</h3>
<h4>Presenter</h4>
<pre style="background-color: #000;font-family: Lucida Console;padding: 5px;border:solid 1px #333; overflow: auto; color: #aaa; font-size: 10pt;">
<span style="color: #df8000;">public virtual void</span> InitializeView()
{
	<span style="color: #df8000;">if</span>(TreatmentIdIsValid())
		LoadTreatment();
	<span style="color: #df8000;">else</span>
		<span style="color: #df8000;">throw new</span> <span style="color: #2091af;">ApplicationException</span>(<span style="color: #df8000;">string</span>.Format(<span style="color: #800000;">"A Record of Waste cannot be completed because of the invalid treatment id: {0}"</span>, View.TreatmentId));
}

<span style="color: #df8000;">private bool</span> TreatmentIdIsValid()
{
	<span style="color: #df8000;">int</span> validTreatmentId; 

	<span style="color: #df8000;">bool</span> treatmentIdIsValid = <span style="color: #df8000;">int</span>.TryParse(View.TreatmentId, <span style="color: #df8000;">out</span> validTreatmentId); 

	<span style="color: #df8000;">if</span>(treatmentIdIsValid)
		CurrentTreatmentId = id; 

	<span style="color: #df8000;">return</span> treatmentIdIsValid;
} 

<span style="color: #df8000;">protected virtual void</span> LoadTreatment()
{
	<span style="color: #df8000;">try</span>
	{
		CurrentTreatment = <span style="color: #2091af;">Repository</span>&lt;<span style="color: #2091af;">ITreatmentRepository</span>&gt;.GetById(CurrentTreatmentId);
	}
	<span style="color: #df8000;">catch</span>
	{
		<span style="color: #df8000;">throw new</span> <span style="color: #2091af;">ApplicationException</span>(<span style="color: #800000;">"Could not retrieve the specified treatment"</span>);
	}
}
</pre>
<h4>Base Repository</h4>
<pre style="background-color: #000;font-family: Lucida Console;padding: 5px;border:solid 1px #333; overflow: auto; color: #aaa; font-size: 10pt;">
<span style="color: #df8000;">public virtual</span> Entity GetById(<span style="color: #df8000;">string</span> id)
{
	<span style="color: #df8000;">int</span> parsedId;

	<span style="color: #df8000;">if</span> (!<span style="color: #df8000;">int</span>.TryParse(id, <span style="color: #df8000;">out</span> parsedId))
		<span style="color: #df8000;">throw new</span> <span style="color: #2091af;">ApplicationException</span>(<span style="color: #800000;">"Could not convert the given id: "</span> + id + <span style="color: #800000;">" into an integer"</span>);

	<span style="color: #df8000;">return</span> GetById(parsedId);
}

<span style="color: #df8000;">public virtual</span> Entity GetById(<span style="color: #df8000;">int</span> id)
{
	<span style="color: #df8000;">return</span> Session.Get&lt;Entity&gt;(id);
}
</pre>
<p>I think that there is no place for logic in the repository it should be left to the domain service. You could even argue that this functionality is common and can be moved to a domain utility. For ease I am going to move it to a domain service. Now, lettuce see the refactoring to the code above:</p>
<h3>Refactored Code:</h3>
<h4>Presenter</h4>
<pre style="background-color: #000;font-family: Lucida Console;padding: 5px;border:solid 1px #333; overflow: auto; color: #aaa; font-size: 10pt;">
<span style="color: #df8000;">public virtual void</span> InitializeView()
{
	LoadTreatment();
}

<span style="color: #df8000;">protected virtual void</span> LoadTreatment()
{
	CurrentTreatment = <span style="color: #2091af;">RecordOfWasteService</span>.GetParentTreatmentById(CurrentTreatmentId);
}
</pre>
<h4>Domain Service</h4>
<pre style="background-color: #000;font-family: Lucida Console;padding: 5px;border:solid 1px #333; overflow: auto; color: #aaa; font-size: 10pt;">
<span style="color: #df8000;">public virtual</span> <span style="color: #2091af;">Treatment</span> GetParentTreatmentById(<span style="color: #df8000;">string</span> id)
{
	<span style="color: #df8000;">int</span> validTreatmentId;

	<span style="color: #df8000;">if</span> (!<span style="color: #df8000;">int</span>.TryParse(id, <span style="color: #df8000;">out</span> validTreatmentId))
		<span style="color: #df8000;">throw new</span> <span style="color: #2091af;">ApplicationException</span>(<span style="color: #800000;">"Could not convert the given treatment id: "</span> + id + <span style="color: #800000;">" into an integer"</span>);

	<span style="color: #df8000;">return</span> GetParentTreatmentById(validTreatmentId);
}

<span style="color: #df8000;">protected virtual </span><span style="color: #2091af;">Treatment</span> GetParentTreatmentById(<span style="color: #df8000;">int</span> treatmentId)
{
	<span style="color: #df8000;">try</span>
	{
		CurrentTreatment = <span style="color: #2091af;">Repository</span>&lt;<span style="color: #2091af;">ITreatmentRepository</span>&gt;.GetById(treatmentId);
	}
	<span style="color: #df8000;">catch</span>
	{
		<span style="color: #df8000;">throw new</span> <span style="color: #2091af;">ApplicationException</span>(<span style="color: #800000;">"Could not retrieve the specified treatment"</span>);
	}
}
</pre>
<h4>Base Repository</h4>
<pre style="background-color: #000;font-family: Lucida Console;padding: 5px;border:solid 1px #333; overflow: auto; color: #aaa; font-size: 10pt;">
<span style="color: #df8000;">public virtual</span> Entity GetById(<span style="color: #df8000;">int</span> id)
{
	<span style="color: #df8000;">return</span> Session.Get&lt;Entity&gt;(id);
}
</pre>
<p>Alrighty then, we got any logic out of the repository, I&#8217;m feeling better already, my face has gone from grimace to grin, and no not the McDonlad&#8217;s character Grimace. <a href="http://www.youtube.com/watch?v=xf69EEL3WBk" target="_blank">Super serial</a>, a la Al Gore about ManBearPig, what was <a href="http://sbiefeld.com/Stuff/grimace.jpg" target="_blank" rel="lightbox[186]">Grimace</a>, was he what you turn in to if you only eat McDonalds and nothing else?</p>
<p><br/></p>
<p>The responsibility of the repository should be to read and write to persistence/web services/messages etc. The string validation logic is in the domain service, I may pull it out to a base service or utility service. Our presenter is so much simpler now, and not worried about logic that it shouldn&#8217;t have to worry about. Hmm, the cleanliness is delightful. There is no more duplication of logic in the presenter and repository, w00t! Now let me know your thoughts, comments, opinions etc. of dissent or agreement, it will help me and hopefully others learn and grow. I&#8217;m off to watch the some <a href="http://en.wikipedia.org/wiki/Teenage_Mutant_Ninja_Turtles_(1987_TV_series)" target="_blank">Teenage Mutant Ninja Turtle original series</a>, wow, I&#8217;m a nerd.</p>
]]></content:encoded>
			<wfw:commentRss>http://sbiefeld.com/2009/02/presenter-logic-domain-service-logic-repository-logic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Entity Validation Ideation</title>
		<link>http://sbiefeld.com/2009/02/entity-validation-ideation/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=entity-validation-ideation</link>
		<comments>http://sbiefeld.com/2009/02/entity-validation-ideation/#comments</comments>
		<pubDate>Sat, 14 Feb 2009 19:53:13 +0000</pubDate>
		<dc:creator>Sean Biefeld</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Domain Driven Design]]></category>
		<category><![CDATA[Entity]]></category>
		<category><![CDATA[Validation]]></category>

		<guid isPermaLink="false">http://sbiefeld.com/?p=145</guid>
		<description><![CDATA[Issue at Hand: I have been recently sumo wrestling with the idea of entity validation in my mind. So far, the validation problem, which is like, E. Honda, has the advantage over my mind which is currently like, Chun Li. The worst thing is all the other thoughts in my head are constantly struggling against [...]]]></description>
			<content:encoded><![CDATA[<h3>Issue at Hand:</h3>
<p>I have been recently <a href="http://en.wikipedia.org/wiki/Sumo" target="_blank">sumo wrestling</a> with the idea of entity validation in my mind. So far, the validation problem, which is like, <a href="http://sbiefeld.com/Stuff/EHonda.png" target="_blank" rel="lightbox[145]">E. Honda</a>, has the advantage over my mind which is currently like, <a href="http://sbiefeld.com/Stuff/ChunLi.png" target="_blank" rel="lightbox[145]">Chun Li</a>. The worst thing is all the other thoughts in my head are constantly struggling against my entity validation thoughts. As <a href="http://en.wikipedia.org/wiki/Homer_Simpson" target="_blank">Homer Simpson</a> says, &#8220;Every time I learn something new, it pushes some old stuff out of my brain&#8221;. Except for me E. Honda is doing his grab move, where he squeezes his opponent between his fat, and squeezing all of my current thoughts out of my brain. I don&#8217;t understand how sumo wrestling evolved as a sport, do they really have nothing to do in Japan. I bet it was the master creation of some drunken emperor. Umm, let&#8217;s see I want to watch two super fat dudes wearing nothing but a diaper try to knock each other out of circle with their bellies, muahahaha, they&#8217;ll be playing this sport for centuries!</p>
<h3>Ideation:</h3>
<p>I have been pondering about the idea of validation. <a href="http://www.dictionary.com" target="_blank">Dictionary.com</a> says valid is: <i>&#8220;sound; just; well-founded, producing the desired result; effective&#8221;</i>. <a href="http://en.wiktionary.org" target="_blank">Wiktionary&#8217;s</a> valid definition in terms of logic is:<i>&#8220;A formula or system that evaluates to true regardless of the input values.&#8221;</i> When we think of validation in a programmers state of mind, the definition of valid in the logical sense, seems to jive the best. If x == y then it is valid if x != y it is invalid.</p>
<p><br/></p>
<p>Entity validation is determined by business rules and processes. It appears that there are two fundamental approaches to validation, proactive and reactive validation.</p>
<h4>Reactive Validation:</h4>
<p>The most common way I have seen validation handled is the addition of an IsValid state to the entity.  A good way of implementing this approach can be found in a <a href="http://grabbagoft.blogspot.com/2007/10/entity-validation-with-visitors-and.html" target="_blank">posting by Jimmy Bogard</a>. Whenever a business rule or process is broken the entity is no longer in a valid state. Then the user is informed of the problem in a different layer of the application. This form of validation is a very reactive way of handling validation. Meaning that it waits until something bad happens and then performs a function to cope with the contaminated actions. I don&#8217;t like this reactionary response, I would rather use something more preventative.</p>
<h4>Proactive Validation:</h4>
<p>What is valid validation? I wonder how many times I can use the word valid, or one of its etymological children in this post? What is a valid number of uses? I think the answer is <a href="http://en.wikipedia.org/wiki/42_(number)" target="_blank">42</a>.</p>
<p><br/>
<p>So, is valid validation a proactive or reactive approach? I believe that proactive is always the best approach. My definition of proactive entity validation is never allowing an invalid entity to exist. This means removing the concept of an IsValid state on the entity. Once that is removed you don&#8217;t have to do an IsValid check everywhere in the application, which is my main gripe with the reactive solution. Is it valid for your domain to ever contain an entity in an invalid state, something about this scenario makes my skin crawl and stomach churn, or maybe it has to do with something I ate last night. Hmm, it was spicy so maybe. An invalid entity just seems like a bad idea, it is a treacherous force that will actively work against you like <a href="http://en.wikipedia.org/wiki/Saruman" target="_blank">Saruman&#8217;s</a> voice being cast across middle earth. I think being proactive is a much cleaner approach, and will cleanse your domain of IsValid checks. Wow, that is just a proof less rant.</p>
<p><br/></p>
<p>Now the question is, what&#8217;s the best way to implement such a proactive solution? That&#8217;s the <a href="http://sbiefeld.com/Stuff/EHonda.png" target="_blank" rel="lightbox[145]">E. Honda</a> I have been wrestling with. Let&#8217;s go over the broad definition of proactive entity validation. An entity cannot be created if it does not meet the business rules. Once we have a valid entity it cannot be modified unless the modifications satisfy the business rules. The stumbling block arises when your entity&#8217;s validity is based on a certain context. For example, it is valid to have a physicians drug order without a signature. When the process requires that the order to be sent to the pharmacy, the order is only valid when it has a signature. Ah, now the proactive solution becomes tricky because valid is defined by context. Following the proactive approach I could not create the entity without a signature, because it would be an entity in an invalid state. The only solution that I have thought of to this is having a drug order without the signature and a drug order request that inherits drug order and has the signature. The pharmacy then receives that drug order request with the signature on it.</p>
<h3>Outro:</h3>
<p>I have not yet fully fleshed out the details of how exactly this would be implemented. I hope to hammer out a spike with a spiked drink. I do believe that using a proactive approach to entity validation falls more in line with domain driven design by having a tighter coupling to the business language. A drug order does not need a signature to exist. A drug order request with a signature fulfills the need of the drug order being sent to the pharmacy.</p>
<p><br/>
<p>Be a proactionary and not a reactionary.</p>
<p><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://sbiefeld.com/2009/02/entity-validation-ideation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pondering my understanding of Domain Driven Design</title>
		<link>http://sbiefeld.com/2009/02/pondering-my-understanding-of-domain-driven-design/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=pondering-my-understanding-of-domain-driven-design</link>
		<comments>http://sbiefeld.com/2009/02/pondering-my-understanding-of-domain-driven-design/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 05:33:51 +0000</pubDate>
		<dc:creator>Sean Biefeld</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Domain Driven Design]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[context]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://sbiefeld.com/?p=68</guid>
		<description><![CDATA[My pondering stems from a song (which hereby refers to a Twitter discussion, eh, why not?). This song was started by a tweet from one of my co-workers earlier today. First a bit of background, I have been able to glean the key purpose(s) of Domain Driven Design from my co-workers and from researching it [...]]]></description>
			<content:encoded><![CDATA[<p><br/>
<p>My pondering stems from a song (which hereby refers to a <a href="http://twitter.com" target="_blank">Twitter</a> discussion, eh, why not?). This song was started by a tweet from one of my co-workers earlier today.</p>
<p><br/></p>
<p>First a bit of background, I have been able to glean the key purpose(s) of <a href="http://en.wikipedia.org/wiki/Domain-driven_design" target="_blank">Domain Driven Design</a> from my co-workers and from researching it a bit here and there. Unfortunately, I have not been able to sit down and read through <a href="http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215/ref=pd_bbs_sr_1/190-7506535-4275666?ie=UTF8&amp;s=books&amp;qid=1234240861&amp;sr=8-1" target="_blank">Eric Evans&#8217; Domain Driven Design book</a>. So, you might say that I am some what of a novice when it comes to domain driven design. One might say my knowledge of it, is fairly infantile, but they would be mediocrates.</p>
<p><br/></p>
<p>I have learned are that <a href="http://en.wikipedia.org/wiki/Domain-driven_design" target="_blank">DDD</a> is a different mode of thinking about software. Analyzing the context of the business process you are reproducing with software and then translating that into the design said software.  You come up with things like the Ubiquitous Language to better serve the need to replicate the targeted processes. That being said a lot of it seems to be logical conclusions that one would arrive at through thought, trial and error over an amount of time.</p>
<p><br/></p>
<p>One of the key ideas that I took away from my gander into <a href="http://en.wikipedia.org/wiki/Domain-driven_design" target="_blank">DDD</a>, was that validation should happen at the domain level.  I have been wrestling with this idea in my mind for a week or two.  The wrestling began when I read a posting on <a href="http://codebetter.com/blogs/gregyoung/archive/2009/01/22/the-data-centric-universe.aspx" target="_blank">Anemic domain models</a> and subsequently read <a href="http://www.martinfowler.com/bliki/AnemicDomainModel.html" target="_blank">Martin Fowler&#8217;s original posting</a> on the subject.  After absorbing that information a light bulb ignited in my noggin, pretty much the whole domain model of the project I am currently working on satisfies the classic definition of an anemic domain model, i.e. classes containing only properties with getters and setters. Yikes! I realized that we had been doing everything wrong, all of our business logic was in our presenters. Well, there is no time to go back and correct everything at the moment. I have been striving to get away from this bad habit with our latest feature and it just so happens that today that along came a Twitter song regarding domain validation and more abstractly, anemic domain models.</p>
<p><br/></p>
<p>My co-worker had a wonderful question about defensive coding / unit testing and a statement regarding domain validation:</p>
<p><br/></p>
<blockquote><p><a href="http://twitter.com/derickbailey" target="_blank">@derickbailey</a>:<br />
&#8220;Q: should I do defensive unit testing / coding immediately, or wait until someone finds a bug to do the defensive coding?&#8221;<br />
&#8220;i&#8217;m sold on &#8220;model / view / presenter / presentation model&#8221; idea at this point. presentation model contains input validation&#8221;<br />
&#8220;example:&#8217;make sure i have a valid date time, not an empty string&#8217;. would you call that business rules? &#8220;</p></blockquote>
<p><br/></p>
<p>My overall response was yes, it is definitely worth defensive coding / unit testing, if you wait for the bug to crop up in the UI, it will be much more expensive to fix, which is expressed by <a href="http://blog.scottbellware.com/2009/02/design-flaws-hernias-and-anemic-quality.html" target="_blank">Scott Bellware&#8217;s latest posting</a>.  There were also some other various tweets about the difference between UI validation and validation in the domain. Validation as business constraints not processes.</p>
<p><br/></p>
<p>Derick&#8217;s question/statement led to this response from Bellware:</p>
<p><br/></p>
<blockquote><p><a href="http://twitter.com/bellware" target="_blank">@Bellware</a>:<br />
&#8220;why are business rules and input validation not the same?&#8221;
</p></blockquote>
<p><br/></p>
<p>Next, Bellware went into some abstract ideas that were relevant to the topic at hand, but went over my head completely.  It seems he enjoys doing this regularly <img src='http://sbiefeld.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> , but thats just my musings.  Anyway, he and Derick were discussing the abstractions, then Bellware stated some things to me about <a href="http://en.wikipedia.org/wiki/Domain-driven_design" target="_blank">DDD</a>:</p>
<p><br/></p>
<blockquote><p><a href="http://twitter.com/bellware" target="_blank">@Bellware</a>:<br />
&#8220;what if the only domain is the domain that creates the need for that validation?&#8221;<br />
&#8220;if it&#8217;s all you need to deal with, then you don&#8217;t need anything more elaborate&#8221;<br />
&#8220;a domain that isn&#8217;t built for a specific context is pure technical masturbation. it earns you demerit points, not promotions.&#8221;</p></blockquote>
<p><br/></p>
<p>Bellware&#8217;s statements got the Grey matter churning in my head. At first, I was thinking of domain and context synonymously in my head, but then he clarified it for me. Context refers to such things as a web application, an operating system application, hardware driver etc. Derick&#8217;s example of getting a date from a string can be viewed as strictly a concern when dealing with a web interface(context). Is Bellware proposing a domain should be geared towards a specific interface implementation? If a domain is not aimed at a specific context then is it a fruitless effort in self indulgence?</p>
<p><br/></p>
<p>Well, now I am stuck in an endless loop pondering my perceptions of DDD. It would probably be prudent to invest some time reading <a target="_blank" href="http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215/ref=pd_bbs_sr_1/190-7506535-4275666?ie=UTF8&amp;s=books&amp;qid=1234240861&amp;sr=8-1">Eric Evans&#8217; Domain Driven Design</a>, to get a better grasp on the tennents of DDD and the reasoning behind them.  I&#8217;m sure I will gain more understanding in time from research and mulling these ideas over in my head.</p>
<p><br/></p>
<p>As a side note, this song has proven to me the usefulness of a tool such as <a href="http://twitter.com" target="_blank">Twitter</a>.  I was somewhat skeptical of it at first, and had passed it off as another mundane social networking tool used to gratify the cravings of narcissists.  It seems it can be used for good and evil.</p>
<p><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://sbiefeld.com/2009/02/pondering-my-understanding-of-domain-driven-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

