<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.1" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
	<title>Comments on: Defending my project architecture</title>
	<link>http://jonkruger.com/blog/2008/07/22/defending-my-project-architecture/</link>
	<description>Works on my machine</description>
	<pubDate>Wed, 03 Dec 2008 23:48:04 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.1</generator>

	<item>
		<title>By: Michael Mason</title>
		<link>http://jonkruger.com/blog/2008/07/22/defending-my-project-architecture/#comment-3050</link>
		<author>Michael Mason</author>
		<pubDate>Wed, 23 Jul 2008 02:36:59 +0000</pubDate>
		<guid>http://jonkruger.com/blog/2008/07/22/defending-my-project-architecture/#comment-3050</guid>
					<description>Wow, missed out on that discussion..... I'm with ya Jon - in this particular case, I think that the model being used helped get the project complete on time, however it can be said that future developers on the project could end up getting lost in the forest, even if it is a small one.</description>
		<content:encoded><![CDATA[<p>Wow, missed out on that discussion&#8230;.. I&#8217;m with ya Jon - in this particular case, I think that the model being used helped get the project complete on time, however it can be said that future developers on the project could end up getting lost in the forest, even if it is a small one.</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Steve Horn</title>
		<link>http://jonkruger.com/blog/2008/07/22/defending-my-project-architecture/#comment-3051</link>
		<author>Steve Horn</author>
		<pubDate>Wed, 23 Jul 2008 02:43:38 +0000</pubDate>
		<guid>http://jonkruger.com/blog/2008/07/22/defending-my-project-architecture/#comment-3051</guid>
					<description>In the attempt to analyze and nitpick and say "what hurt, and what can we do better", it gets easy to criticize.  Let me express my congratulations for a successful first release, and many more to come.  You're right - success and business value trumps "ideal design" any day.

On the anemic domain... 
I have found this topic very interesting to study over the past few months, and I've found a lot of people doing the anemic domain successfully.  But for me, it all comes back to what is tried and true, and what I value.  

Object oriented principles offer all kinds of benefits that naturally lead you into "the pit of success" (I hate that phrase, but it seemed fitting).  More importantly, writing good classes alleviates the most important problem with software: complexity.  

As McConnell says "design is a wicked problem" ... a delicate balance of forces that are in opposition.  My only goal in providing feedback is to spark dialog and creativity to these hard design questions - so we can get better at what we do.

To be honest though, this discussion would be better sitting at a round table with a beer in hand :)  Let me know when and where.</description>
		<content:encoded><![CDATA[<p>In the attempt to analyze and nitpick and say &#8220;what hurt, and what can we do better&#8221;, it gets easy to criticize.  Let me express my congratulations for a successful first release, and many more to come.  You&#8217;re right - success and business value trumps &#8220;ideal design&#8221; any day.</p>
<p>On the anemic domain&#8230;<br />
I have found this topic very interesting to study over the past few months, and I&#8217;ve found a lot of people doing the anemic domain successfully.  But for me, it all comes back to what is tried and true, and what I value.  </p>
<p>Object oriented principles offer all kinds of benefits that naturally lead you into &#8220;the pit of success&#8221; (I hate that phrase, but it seemed fitting).  More importantly, writing good classes alleviates the most important problem with software: complexity.  </p>
<p>As McConnell says &#8220;design is a wicked problem&#8221; &#8230; a delicate balance of forces that are in opposition.  My only goal in providing feedback is to spark dialog and creativity to these hard design questions - so we can get better at what we do.</p>
<p>To be honest though, this discussion would be better sitting at a round table with a beer in hand :)  Let me know when and where.</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Steven Harman</title>
		<link>http://jonkruger.com/blog/2008/07/22/defending-my-project-architecture/#comment-3052</link>
		<author>Steven Harman</author>
		<pubDate>Wed, 23 Jul 2008 03:30:39 +0000</pubDate>
		<guid>http://jonkruger.com/blog/2008/07/22/defending-my-project-architecture/#comment-3052</guid>
					<description>&#62;&#62; Sure, sometimes you add properties to entity objects just to help you display something in a grid. And sometimes you have properties on an entity that you will never need on the client side. And theoretically there is a situation where you may want your entity object on the client to be structured differently than they are on the server for some reason. But are any of these good reasons to create new layers and create more code that I have to maintain?

I would ask, why should your domain entities care about presentation concerns? And why should your presentation objects care about domain logic? These are orthognal concerns. So in an effort to keep the system MORE maintainable these orthogonal concerns should be kept... well, separate. (see: Separation of Concerns) 

&#62;&#62; On my current project, things go much faster. I can drag my database tables onto the LINQ to SQL designer and immediately I have my entity objects created and I can load and save them to the database. I can immediately go and start writing code that has business value.

Drag-n-dropping of tables to generate entities is very typical in data-centric approaches. But, does "time savings" gained by mapping your entities directly from the persistence mechanism really mean you're delivering more business value? Does your database really model the way the business works, or more importantly, the way the business wants to work? How much value is lost in missed opportunities because you've now artificially tied yourself to a sub-optimal, relationally constrained, model... a model that does not translate well to object oriented code?

We need to forget about the database for a bit and instead work with the domain experts to come up with a shared understanding of how to model the domain. That model will of course be wrong, but by working with the domain experts to continually refine our the model we can eventually get closer and closer to a true representation of how the business works... meaning we can more accurately deliver the value the business really needs.

Of course, what I'm talking about is nothing new. I'm just rehashing many of the ideas promoted by DDD, as you've mentioned. 

You've said that DDD makes sense when dealing with complex domain models. And knowing what I do about your particular project, I'd say it is a complex domain. And the point of DDD is not just to create a "super-elegant business layer" - it is to build a well understood model of a complex business domain, allowing you to deliver more value. The point is to allow you to focus on the core competencies of the business... the things that make the business unique, b/c thats is where real value will be found.

As to the question of the Anemic Domain Anti-Pattern - sometimes just passing around bit-buckets makes sense... but when dealing with complex domains, why not do what OO was designed to and try to model the domain and encapsulate the complexity? We need to get back to our OO fundamentals.</description>
		<content:encoded><![CDATA[<p>&gt;&gt; Sure, sometimes you add properties to entity objects just to help you display something in a grid. And sometimes you have properties on an entity that you will never need on the client side. And theoretically there is a situation where you may want your entity object on the client to be structured differently than they are on the server for some reason. But are any of these good reasons to create new layers and create more code that I have to maintain?</p>
<p>I would ask, why should your domain entities care about presentation concerns? And why should your presentation objects care about domain logic? These are orthognal concerns. So in an effort to keep the system MORE maintainable these orthogonal concerns should be kept&#8230; well, separate. (see: Separation of Concerns) </p>
<p>&gt;&gt; On my current project, things go much faster. I can drag my database tables onto the LINQ to SQL designer and immediately I have my entity objects created and I can load and save them to the database. I can immediately go and start writing code that has business value.</p>
<p>Drag-n-dropping of tables to generate entities is very typical in data-centric approaches. But, does &#8220;time savings&#8221; gained by mapping your entities directly from the persistence mechanism really mean you&#8217;re delivering more business value? Does your database really model the way the business works, or more importantly, the way the business wants to work? How much value is lost in missed opportunities because you&#8217;ve now artificially tied yourself to a sub-optimal, relationally constrained, model&#8230; a model that does not translate well to object oriented code?</p>
<p>We need to forget about the database for a bit and instead work with the domain experts to come up with a shared understanding of how to model the domain. That model will of course be wrong, but by working with the domain experts to continually refine our the model we can eventually get closer and closer to a true representation of how the business works&#8230; meaning we can more accurately deliver the value the business really needs.</p>
<p>Of course, what I&#8217;m talking about is nothing new. I&#8217;m just rehashing many of the ideas promoted by DDD, as you&#8217;ve mentioned. </p>
<p>You&#8217;ve said that DDD makes sense when dealing with complex domain models. And knowing what I do about your particular project, I&#8217;d say it is a complex domain. And the point of DDD is not just to create a &#8220;super-elegant business layer&#8221; - it is to build a well understood model of a complex business domain, allowing you to deliver more value. The point is to allow you to focus on the core competencies of the business&#8230; the things that make the business unique, b/c thats is where real value will be found.</p>
<p>As to the question of the Anemic Domain Anti-Pattern - sometimes just passing around bit-buckets makes sense&#8230; but when dealing with complex domains, why not do what OO was designed to and try to model the domain and encapsulate the complexity? We need to get back to our OO fundamentals.</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Jim Holmes</title>
		<link>http://jonkruger.com/blog/2008/07/22/defending-my-project-architecture/#comment-3053</link>
		<author>Jim Holmes</author>
		<pubDate>Wed, 23 Jul 2008 04:09:36 +0000</pubDate>
		<guid>http://jonkruger.com/blog/2008/07/22/defending-my-project-architecture/#comment-3053</guid>
					<description>First, I don't think anyone was trying to skewer the architecture of your project! Your successes speak to themselves, and you certainly shouldn't feel a need to defend your choices.

Secondly, all this discussion is absolutely healthy.  We need a pragmatic mindset when choosing our approaches to these sorts of problems -- and it's absolutely not black and white or a simple decision in most all our projects.

Speed to market, maintainability, flexibility, clarity. Nice things to think about, often hard to bundle all together at once.

FWIW, I think the success of your project is testiment enough to the validity of the approaches you took.</description>
		<content:encoded><![CDATA[<p>First, I don&#8217;t think anyone was trying to skewer the architecture of your project! Your successes speak to themselves, and you certainly shouldn&#8217;t feel a need to defend your choices.</p>
<p>Secondly, all this discussion is absolutely healthy.  We need a pragmatic mindset when choosing our approaches to these sorts of problems &#8212; and it&#8217;s absolutely not black and white or a simple decision in most all our projects.</p>
<p>Speed to market, maintainability, flexibility, clarity. Nice things to think about, often hard to bundle all together at once.</p>
<p>FWIW, I think the success of your project is testiment enough to the validity of the approaches you took.</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Mel Grubb</title>
		<link>http://jonkruger.com/blog/2008/07/22/defending-my-project-architecture/#comment-3054</link>
		<author>Mel Grubb</author>
		<pubDate>Wed, 23 Jul 2008 13:02:06 +0000</pubDate>
		<guid>http://jonkruger.com/blog/2008/07/22/defending-my-project-architecture/#comment-3054</guid>
					<description>Oh, I'm enjoying working on this architecture MUCH more than on some of the past projects.  I think that our time to deliver was drastically reduced, and that we've accomplished more work for the client in the same amount of time than we could have hoped for in a "pure" architecture.  If the DDD zealots want to burn me at the stake for heresy, then so be it.

On the other hand, I see things that ARE accomplishable, or that just rub me the wrong way personally.  In the past three projects, I've never liked the fact that all our business knowledge seems to reside outside the entities, which to me are the only logical place for that knowledge to be.  In my mind, the Client class should the end-all authority on all "Client-y" things.

Persistence ignorance?  Who cares?  It's a goal, sure, but not one to sacrifice the rest of your project for.  On my first project for Quick I saw it pay off, big time, when they switched from Oracle to SQL Server over the weekend, and I didn't even notice on Monday morning.  That's awesome... it's also the only time I've ever seen it happen in 15+ years of doing this stuff.  Very cool, but it's like Haley's comet... you MIGHT live to see it pay off once in your life... maybe.

I'm fine with Linq to Sql entities not being persistence-ignorant, so long as I'm doing my work in the other half of the partial class.  It's not "pure", but I can pretend that the other half of the class isn't there, and go about my business.  It's not perfect, but it'll do for now.  I'd much rather have some sophisticated mapping like NHibernate, but not until it is as easy to maintain as Linq to Sql is now.  Maybe the Entity Framework will get us there, maybe not, we'll just see when it's released I guess.

So yes, I see all the points, and they're all valid.  In a world with an unlimited budget and timeline I would absolutely opt for the architecturally correct way of doing things.  We don't live in that perfect world of endless green fields, though.  Our fields are brown, and customers want results NOW.</description>
		<content:encoded><![CDATA[<p>Oh, I&#8217;m enjoying working on this architecture MUCH more than on some of the past projects.  I think that our time to deliver was drastically reduced, and that we&#8217;ve accomplished more work for the client in the same amount of time than we could have hoped for in a &#8220;pure&#8221; architecture.  If the DDD zealots want to burn me at the stake for heresy, then so be it.</p>
<p>On the other hand, I see things that ARE accomplishable, or that just rub me the wrong way personally.  In the past three projects, I&#8217;ve never liked the fact that all our business knowledge seems to reside outside the entities, which to me are the only logical place for that knowledge to be.  In my mind, the Client class should the end-all authority on all &#8220;Client-y&#8221; things.</p>
<p>Persistence ignorance?  Who cares?  It&#8217;s a goal, sure, but not one to sacrifice the rest of your project for.  On my first project for Quick I saw it pay off, big time, when they switched from Oracle to SQL Server over the weekend, and I didn&#8217;t even notice on Monday morning.  That&#8217;s awesome&#8230; it&#8217;s also the only time I&#8217;ve ever seen it happen in 15+ years of doing this stuff.  Very cool, but it&#8217;s like Haley&#8217;s comet&#8230; you MIGHT live to see it pay off once in your life&#8230; maybe.</p>
<p>I&#8217;m fine with Linq to Sql entities not being persistence-ignorant, so long as I&#8217;m doing my work in the other half of the partial class.  It&#8217;s not &#8220;pure&#8221;, but I can pretend that the other half of the class isn&#8217;t there, and go about my business.  It&#8217;s not perfect, but it&#8217;ll do for now.  I&#8217;d much rather have some sophisticated mapping like NHibernate, but not until it is as easy to maintain as Linq to Sql is now.  Maybe the Entity Framework will get us there, maybe not, we&#8217;ll just see when it&#8217;s released I guess.</p>
<p>So yes, I see all the points, and they&#8217;re all valid.  In a world with an unlimited budget and timeline I would absolutely opt for the architecturally correct way of doing things.  We don&#8217;t live in that perfect world of endless green fields, though.  Our fields are brown, and customers want results NOW.</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Jon Kruger</title>
		<link>http://jonkruger.com/blog/2008/07/22/defending-my-project-architecture/#comment-3056</link>
		<author>Jon Kruger</author>
		<pubDate>Wed, 23 Jul 2008 13:32:10 +0000</pubDate>
		<guid>http://jonkruger.com/blog/2008/07/22/defending-my-project-architecture/#comment-3056</guid>
					<description>@Steve Harman,

&gt;&gt; I would ask, why should your domain entities care about presentation concerns? And why should your presentation objects care about domain logic? These are orthognal concerns. So in an effort to keep the system MORE maintainable these orthogonal concerns should be kept… well, separate. (see: Separation of Concerns)

I agree, but is it worth the time to create separate entities, DTOs, and translators to fix this problem?  You could say this about a web app too (that's not using web services), but you wouldn't make separate entity objects in that case.

About DDD... I think this is a good example of what Alexei was saying when he said that everything depends on the business situation.  Because if we were doing our current project from the ground up, you're exactly right, we have a very complex domain model and DDD would be the correct way to go.  In our case, we were stuck with a database structure and had to live with it, so I think the way that we did it made sense (LINQ to SQL somewhat constrained us vs. what we could do with NHibernate).</description>
		<content:encoded><![CDATA[<p>@Steve Harman,</p>
<p>>> I would ask, why should your domain entities care about presentation concerns? And why should your presentation objects care about domain logic? These are orthognal concerns. So in an effort to keep the system MORE maintainable these orthogonal concerns should be kept… well, separate. (see: Separation of Concerns)</p>
<p>I agree, but is it worth the time to create separate entities, DTOs, and translators to fix this problem?  You could say this about a web app too (that&#8217;s not using web services), but you wouldn&#8217;t make separate entity objects in that case.</p>
<p>About DDD&#8230; I think this is a good example of what Alexei was saying when he said that everything depends on the business situation.  Because if we were doing our current project from the ground up, you&#8217;re exactly right, we have a very complex domain model and DDD would be the correct way to go.  In our case, we were stuck with a database structure and had to live with it, so I think the way that we did it made sense (LINQ to SQL somewhat constrained us vs. what we could do with NHibernate).</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Steve Horn</title>
		<link>http://jonkruger.com/blog/2008/07/22/defending-my-project-architecture/#comment-3057</link>
		<author>Steve Horn</author>
		<pubDate>Wed, 23 Jul 2008 13:32:11 +0000</pubDate>
		<guid>http://jonkruger.com/blog/2008/07/22/defending-my-project-architecture/#comment-3057</guid>
					<description>In an attempt to analyze and nitpick and say "what hurt, and what can we do better", it gets easy to criticize.  Let me express my congratulations for a successful first release, and many more to come.  You're right -- success and business value trumps "ideal design" any day.

On the anemic domain... 
I have found this topic very interesting to study over the past few months, and I've found a lot of people doing the anemic domain successfully.  But for me, it all comes back to what is tried and true, and what I value.  

Object oriented principles offer all kinds of benefits that naturally lead you into "the pit of success" (I hate that phrase, but it seemed fitting).  More importantly, writing good classes alleviates the most important problem with software: complexity.  

As McConnell says "design is a wicked problem" ... a delicate balance of forces that are in opposition.  My only goal in providing feedback is to spark dialog and creativity to these hard design questions - so we can get better at what we do.

To be honest though, this discussion would be better sitting at a round table with a beer in hand :)  Let me know when and where.</description>
		<content:encoded><![CDATA[<p>In an attempt to analyze and nitpick and say &#8220;what hurt, and what can we do better&#8221;, it gets easy to criticize.  Let me express my congratulations for a successful first release, and many more to come.  You&#8217;re right &#8212; success and business value trumps &#8220;ideal design&#8221; any day.</p>
<p>On the anemic domain&#8230;<br />
I have found this topic very interesting to study over the past few months, and I&#8217;ve found a lot of people doing the anemic domain successfully.  But for me, it all comes back to what is tried and true, and what I value.  </p>
<p>Object oriented principles offer all kinds of benefits that naturally lead you into &#8220;the pit of success&#8221; (I hate that phrase, but it seemed fitting).  More importantly, writing good classes alleviates the most important problem with software: complexity.  </p>
<p>As McConnell says &#8220;design is a wicked problem&#8221; &#8230; a delicate balance of forces that are in opposition.  My only goal in providing feedback is to spark dialog and creativity to these hard design questions - so we can get better at what we do.</p>
<p>To be honest though, this discussion would be better sitting at a round table with a beer in hand :)  Let me know when and where.</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Steven Harman</title>
		<link>http://jonkruger.com/blog/2008/07/22/defending-my-project-architecture/#comment-3059</link>
		<author>Steven Harman</author>
		<pubDate>Wed, 23 Jul 2008 14:50:25 +0000</pubDate>
		<guid>http://jonkruger.com/blog/2008/07/22/defending-my-project-architecture/#comment-3059</guid>
					<description>Let me start by saying that I in no way feel you need to "defend your project architecture"... no one was or is attacking it. We (and by "we" I might just mean "I") am only trying to discuss some of the pains felt when working with said architecture.

The point is to keep improving. And we do that by uncovering a pain point and then addressing and alleviating it. Then we lower our pain threshold just a little more, find the next pain point, and work to alleviate it, continuing ad nauseam.

Rather than taking those bits of feedback as an attack, look at them for what they are - real people giving real feedback about what caused them pain. Then address those pains and move forward. The goal is perfection - but we can only hope to get there through continuous improvement. :)</description>
		<content:encoded><![CDATA[<p>Let me start by saying that I in no way feel you need to &#8220;defend your project architecture&#8221;&#8230; no one was or is attacking it. We (and by &#8220;we&#8221; I might just mean &#8220;I&#8221;) am only trying to discuss some of the pains felt when working with said architecture.</p>
<p>The point is to keep improving. And we do that by uncovering a pain point and then addressing and alleviating it. Then we lower our pain threshold just a little more, find the next pain point, and work to alleviate it, continuing ad nauseam.</p>
<p>Rather than taking those bits of feedback as an attack, look at them for what they are - real people giving real feedback about what caused them pain. Then address those pains and move forward. The goal is perfection - but we can only hope to get there through continuous improvement. :)</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Jon Kruger</title>
		<link>http://jonkruger.com/blog/2008/07/22/defending-my-project-architecture/#comment-3060</link>
		<author>Jon Kruger</author>
		<pubDate>Wed, 23 Jul 2008 15:59:13 +0000</pubDate>
		<guid>http://jonkruger.com/blog/2008/07/22/defending-my-project-architecture/#comment-3060</guid>
					<description>@Steve Harman,

No offense taken.  I'm always up for a good debate and I'm always open to changing things.  I just wanted to say my side of the story.</description>
		<content:encoded><![CDATA[<p>@Steve Harman,</p>
<p>No offense taken.  I&#8217;m always up for a good debate and I&#8217;m always open to changing things.  I just wanted to say my side of the story.</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Tim Hardy</title>
		<link>http://jonkruger.com/blog/2008/07/22/defending-my-project-architecture/#comment-3075</link>
		<author>Tim Hardy</author>
		<pubDate>Wed, 06 Aug 2008 16:32:58 +0000</pubDate>
		<guid>http://jonkruger.com/blog/2008/07/22/defending-my-project-architecture/#comment-3075</guid>
					<description>Just came across your post here.  I want to reinforce many of the decisions you've made here because we are beginning to make similar decisions.  After being in the trenches for a few years with a highly abstracted model, we are now moving to a singular model.  The practical costs of a highly abstracted model are just too high in many cases when you actually have to do the work and aren't just commenting in blog posts.  I will say that we are moving away from an anemic model however and moving as much entity self-awareness logic into our partial classes as we can.  If business logic needs to exist that crosses entity boundaries, then we'll spin up new service classes to handle those integrations.  Also, if we need a class that doesn't map well to a data table, we simply create it - almost all of our grids map to custom classes this way that are fed from stored procedures.  The point is that the DDD zealots don't address much of the pain that real development incurs from having to create tons of new files just to get a new piece of information onto the screen, or the maintenance nightmare of having to edit a ton of files just to do something really simple.  Almost every change to the database actually DOES require a change all the way through an app vertically.  Why else would you be changing the data model?  It's very rare that the dba's need to totally re-work something just because they want to and not for a change driven by business need.  I totally agree with the Haley's comet comment.  DDD causes all developers to incur at least a 15% increase in ALL development cost just to handle 5% of the scenarios that really benefit from it.  I feel it's a more pragmatic approach to leverage the fact that most of your domain really does indeed map closely to your data model.  In the few cases where it doesn't, make custom classes and use procs.  Don't hold one pattern back by forcing all scenarios to go through the same pattern.  If you have a rare case where your most common pattern doesn't fit, just divorce it. As long as your entity interfaces look similar, everyone will be happy.</description>
		<content:encoded><![CDATA[<p>Just came across your post here.  I want to reinforce many of the decisions you&#8217;ve made here because we are beginning to make similar decisions.  After being in the trenches for a few years with a highly abstracted model, we are now moving to a singular model.  The practical costs of a highly abstracted model are just too high in many cases when you actually have to do the work and aren&#8217;t just commenting in blog posts.  I will say that we are moving away from an anemic model however and moving as much entity self-awareness logic into our partial classes as we can.  If business logic needs to exist that crosses entity boundaries, then we&#8217;ll spin up new service classes to handle those integrations.  Also, if we need a class that doesn&#8217;t map well to a data table, we simply create it - almost all of our grids map to custom classes this way that are fed from stored procedures.  The point is that the DDD zealots don&#8217;t address much of the pain that real development incurs from having to create tons of new files just to get a new piece of information onto the screen, or the maintenance nightmare of having to edit a ton of files just to do something really simple.  Almost every change to the database actually DOES require a change all the way through an app vertically.  Why else would you be changing the data model?  It&#8217;s very rare that the dba&#8217;s need to totally re-work something just because they want to and not for a change driven by business need.  I totally agree with the Haley&#8217;s comet comment.  DDD causes all developers to incur at least a 15% increase in ALL development cost just to handle 5% of the scenarios that really benefit from it.  I feel it&#8217;s a more pragmatic approach to leverage the fact that most of your domain really does indeed map closely to your data model.  In the few cases where it doesn&#8217;t, make custom classes and use procs.  Don&#8217;t hold one pattern back by forcing all scenarios to go through the same pattern.  If you have a rare case where your most common pattern doesn&#8217;t fit, just divorce it. As long as your entity interfaces look similar, everyone will be happy.</p>
]]></content:encoded>
				</item>
</channel>
</rss>
