<?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: Why you should not not use ORM</title>
	<atom:link href="http://www.mikedesjardins.net/content/2008/06/why-you-should-not-not-use-orm/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mikedesjardins.net/content/2008/06/why-you-should-not-not-use-orm/</link>
	<description>freelance software developer consultant in portland, maine</description>
	<lastBuildDate>Wed, 02 Feb 2011 18:16:08 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
	<item>
		<title>By: Mike Desjardins</title>
		<link>http://www.mikedesjardins.net/content/2008/06/why-you-should-not-not-use-orm/comment-page-1/#comment-112</link>
		<dc:creator>Mike Desjardins</dc:creator>
		<pubDate>Mon, 01 Sep 2008 19:50:00 +0000</pubDate>
		<guid isPermaLink="false">http://mikedesjardins.us/wordpress/2008/06/why-you-should-not-not-use-orm/#comment-112</guid>
		<description>@Anonymous -&lt;br/&gt;&lt;br/&gt;Very well said.  Too bad you stayed anonymous so you can&#039;t get the proper credit you deserve.  :)&lt;br/&gt;&lt;br/&gt;ORM is just a tool that can be used wisely and unwisely.  I try to tell people that there&#039;s no shame in just doing straight-up JDBC calls if all you&#039;re doing is stored procedure calls or simple SQL statement.  But lots of people can&#039;t resist using the framework &lt;i&gt;du jour&lt;/i&gt; just because it&#039;s popular at the time.</description>
		<content:encoded><![CDATA[<p>@Anonymous -</p>
<p>Very well said.  Too bad you stayed anonymous so you can&#8217;t get the proper credit you deserve.  <img src='http://www.mikedesjardins.net/content/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>ORM is just a tool that can be used wisely and unwisely.  I try to tell people that there&#8217;s no shame in just doing straight-up JDBC calls if all you&#8217;re doing is stored procedure calls or simple SQL statement.  But lots of people can&#8217;t resist using the framework <i>du jour</i> just because it&#8217;s popular at the time.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Anonymous</title>
		<link>http://www.mikedesjardins.net/content/2008/06/why-you-should-not-not-use-orm/comment-page-1/#comment-111</link>
		<dc:creator>Anonymous</dc:creator>
		<pubDate>Mon, 01 Sep 2008 16:58:00 +0000</pubDate>
		<guid isPermaLink="false">http://mikedesjardins.us/wordpress/2008/06/why-you-should-not-not-use-orm/#comment-111</guid>
		<description>Hmm. To sum up:&lt;br/&gt;&lt;br/&gt;It is not the gun that murders, but who wields it. It is not who wields the gun who commits murder, but who wields it unwisely.&lt;br/&gt;&lt;br/&gt;-- A grasshopper&lt;br/&gt;&lt;br/&gt;Everything wants to be hyped, to get over the adoption factor. When wielded appropriately and under the right conditions, with the intelligent, knowledgeable practictioners, ORM (which I have done poorly) is of course with merit.&lt;br/&gt;&lt;br/&gt;Hasty implementations, with unwise and illiterate implementation, is the result of poor understanding. ORM doesn&#039;t cause this, just as AJAX doesn&#039;t cause the web to &quot;break&quot;.&lt;br/&gt;&lt;br/&gt;I&#039;ll always remember the little league team that had all the studs on it, the kids who were natural athletes. They spent all their time practicing fancy throw-outs and pick-off moves. It was &quot;expected&quot; that they would always out-perform, so this expectation imposed an unreasonable work ethic.&lt;br/&gt;&lt;br/&gt;The team that won the championship, though, was a team that worked, daily, on fundamentals. Throw, catch, run out the ball. Everyone bunts, everyone gets grounders, everyone carries the gear to the truck.&lt;br/&gt;&lt;br/&gt;In the end, a good programmer knows the fundamentals of SQL as well as the fundamentals of programming. They&#039;re paid for the results, not the fancy.&lt;br/&gt;&lt;br/&gt;If a programmer can&#039;t construct a SQL statement, and have not been doing that at least for a good while, chances are the results will not be as useful as that programmer thought.&lt;br/&gt;&lt;br/&gt;Not the SQL fancy (triggers, stored procedures, data normalization, etc...) mind you, but the fundamentals: Create, insert, update, delete.&lt;br/&gt;&lt;br/&gt;Programmers are paid to get it right, but the reality also says they&#039;re paid to get it back right when it goes (sometimes spectacularly) wrong.&lt;br/&gt;&lt;br/&gt;That always means fundamentals. Always.</description>
		<content:encoded><![CDATA[<p>Hmm. To sum up:</p>
<p>It is not the gun that murders, but who wields it. It is not who wields the gun who commits murder, but who wields it unwisely.</p>
<p>&#8211; A grasshopper</p>
<p>Everything wants to be hyped, to get over the adoption factor. When wielded appropriately and under the right conditions, with the intelligent, knowledgeable practictioners, ORM (which I have done poorly) is of course with merit.</p>
<p>Hasty implementations, with unwise and illiterate implementation, is the result of poor understanding. ORM doesn&#8217;t cause this, just as AJAX doesn&#8217;t cause the web to &#8220;break&#8221;.</p>
<p>I&#8217;ll always remember the little league team that had all the studs on it, the kids who were natural athletes. They spent all their time practicing fancy throw-outs and pick-off moves. It was &#8220;expected&#8221; that they would always out-perform, so this expectation imposed an unreasonable work ethic.</p>
<p>The team that won the championship, though, was a team that worked, daily, on fundamentals. Throw, catch, run out the ball. Everyone bunts, everyone gets grounders, everyone carries the gear to the truck.</p>
<p>In the end, a good programmer knows the fundamentals of SQL as well as the fundamentals of programming. They&#8217;re paid for the results, not the fancy.</p>
<p>If a programmer can&#8217;t construct a SQL statement, and have not been doing that at least for a good while, chances are the results will not be as useful as that programmer thought.</p>
<p>Not the SQL fancy (triggers, stored procedures, data normalization, etc&#8230;) mind you, but the fundamentals: Create, insert, update, delete.</p>
<p>Programmers are paid to get it right, but the reality also says they&#8217;re paid to get it back right when it goes (sometimes spectacularly) wrong.</p>
<p>That always means fundamentals. Always.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: James E. Ervin, IV</title>
		<link>http://www.mikedesjardins.net/content/2008/06/why-you-should-not-not-use-orm/comment-page-1/#comment-99</link>
		<dc:creator>James E. Ervin, IV</dc:creator>
		<pubDate>Thu, 19 Jun 2008 21:04:00 +0000</pubDate>
		<guid isPermaLink="false">http://mikedesjardins.us/wordpress/2008/06/why-you-should-not-not-use-orm/#comment-99</guid>
		<description>I think the point about ORM or to not ORM is, let your hands tell you.  How?  &lt;br/&gt;&lt;br/&gt;If you are writing the same kind of error prone code over and over again (like having to check all try(s) have finally(s) for instance) is the biggest sign.  Time to think of using something.  Save your hands, check out like Groovy SQL first or an ORM.  &lt;br/&gt;&lt;br/&gt;Writing the same bland queries again and again?  Are you really taking advantage of PL/SQL in a way an ORM couldn&#039;t?  If you answer yes and no, use the ORM, save your hands.  They will thank you.</description>
		<content:encoded><![CDATA[<p>I think the point about ORM or to not ORM is, let your hands tell you.  How?  </p>
<p>If you are writing the same kind of error prone code over and over again (like having to check all try(s) have finally(s) for instance) is the biggest sign.  Time to think of using something.  Save your hands, check out like Groovy SQL first or an ORM.  </p>
<p>Writing the same bland queries again and again?  Are you really taking advantage of PL/SQL in a way an ORM couldn&#8217;t?  If you answer yes and no, use the ORM, save your hands.  They will thank you.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mike Desjardins</title>
		<link>http://www.mikedesjardins.net/content/2008/06/why-you-should-not-not-use-orm/comment-page-1/#comment-98</link>
		<dc:creator>Mike Desjardins</dc:creator>
		<pubDate>Thu, 19 Jun 2008 14:28:00 +0000</pubDate>
		<guid isPermaLink="false">http://mikedesjardins.us/wordpress/2008/06/why-you-should-not-not-use-orm/#comment-98</guid>
		<description>@KenDowns - Cool!  And I&#039;m flattered you posted a response!&lt;br/&gt;&lt;br/&gt;I actually think we probably agree more than we disagree.  As I think I said in an earlier comment response, one of the largest-scale applications I&#039;ve worked on handled tens of thousands of transactions per day for a wireless telecommunications client, and it was implemented using almost no ORM.  Instead, we used a stored procedure framework to do the &quot;mapping&quot; (if you could even call it that) and it was *very* effective.&lt;br/&gt;&lt;br/&gt;Your data dictionary approach is very similar to ORM frameworks I&#039;ve used, even if it isn&#039;t mapping first-order objects to entities persisted in a database, in that it has a level of indirection in the form of &quot;mapping&quot; client-side transient variables to columns in a table.  It&#039;s sort of an ORM without the O, and it&#039;s actually pretty clever.  In your particular example, I&#039;m a little leery of the tight coupling between the View/UI, and the data Model (insofar as the HTML fields are directly coupled to your model map), but perhaps that hasn&#039;t been a problem for you in practice because you still have one level of indirection there.&lt;br/&gt;&lt;br/&gt;I think my biggest concern about the approach outlined in your blog was the advocacy of triggers - I&#039;ve been bitten by trigger overuse and tend to use them as an enforcer-of-last-resort... I&#039;ve gotten a lot of mileage out of distributing that work across multiple small servers before even hitting the database.  YMMV.  I&#039;m sure it depends a lot on other factors like what RDBMS you&#039;re using, how complex your data model is, etc.&lt;br/&gt;&lt;br/&gt;Thanks again for commenting!</description>
		<content:encoded><![CDATA[<p>@KenDowns &#8211; Cool!  And I&#8217;m flattered you posted a response!</p>
<p>I actually think we probably agree more than we disagree.  As I think I said in an earlier comment response, one of the largest-scale applications I&#8217;ve worked on handled tens of thousands of transactions per day for a wireless telecommunications client, and it was implemented using almost no ORM.  Instead, we used a stored procedure framework to do the &#8220;mapping&#8221; (if you could even call it that) and it was *very* effective.</p>
<p>Your data dictionary approach is very similar to ORM frameworks I&#8217;ve used, even if it isn&#8217;t mapping first-order objects to entities persisted in a database, in that it has a level of indirection in the form of &#8220;mapping&#8221; client-side transient variables to columns in a table.  It&#8217;s sort of an ORM without the O, and it&#8217;s actually pretty clever.  In your particular example, I&#8217;m a little leery of the tight coupling between the View/UI, and the data Model (insofar as the HTML fields are directly coupled to your model map), but perhaps that hasn&#8217;t been a problem for you in practice because you still have one level of indirection there.</p>
<p>I think my biggest concern about the approach outlined in your blog was the advocacy of triggers &#8211; I&#8217;ve been bitten by trigger overuse and tend to use them as an enforcer-of-last-resort&#8230; I&#8217;ve gotten a lot of mileage out of distributing that work across multiple small servers before even hitting the database.  YMMV.  I&#8217;m sure it depends a lot on other factors like what RDBMS you&#8217;re using, how complex your data model is, etc.</p>
<p>Thanks again for commenting!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: KenDowns</title>
		<link>http://www.mikedesjardins.net/content/2008/06/why-you-should-not-not-use-orm/comment-page-1/#comment-97</link>
		<dc:creator>KenDowns</dc:creator>
		<pubDate>Thu, 19 Jun 2008 13:56:00 +0000</pubDate>
		<guid isPermaLink="false">http://mikedesjardins.us/wordpress/2008/06/why-you-should-not-not-use-orm/#comment-97</guid>
		<description>Mike, I am flattered that my blog post would inspire a reply.  I have posted an addendum to the OP that answers most of the compelling challenges offered by your post and by comments on the blog.  Rather than rehash it here I will simply refer folks to the OP, which is linked to up in your blog.</description>
		<content:encoded><![CDATA[<p>Mike, I am flattered that my blog post would inspire a reply.  I have posted an addendum to the OP that answers most of the compelling challenges offered by your post and by comments on the blog.  Rather than rehash it here I will simply refer folks to the OP, which is linked to up in your blog.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: gfrison</title>
		<link>http://www.mikedesjardins.net/content/2008/06/why-you-should-not-not-use-orm/comment-page-1/#comment-96</link>
		<dc:creator>gfrison</dc:creator>
		<pubDate>Wed, 18 Jun 2008 08:23:00 +0000</pubDate>
		<guid isPermaLink="false">http://mikedesjardins.us/wordpress/2008/06/why-you-should-not-not-use-orm/#comment-96</guid>
		<description>I agree with you when you need speed in critical jdbc tasks, in such a performance requirements write you low level sql code. ORM introduces overhead but this is the price of abstraction, but if you try to write your own ORM framework you would realize that existing ORMs save a lot of time and make your system more reliable. Don&#039;t reinvent the wheel.</description>
		<content:encoded><![CDATA[<p>I agree with you when you need speed in critical jdbc tasks, in such a performance requirements write you low level sql code. ORM introduces overhead but this is the price of abstraction, but if you try to write your own ORM framework you would realize that existing ORMs save a lot of time and make your system more reliable. Don&#8217;t reinvent the wheel.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Anonymous</title>
		<link>http://www.mikedesjardins.net/content/2008/06/why-you-should-not-not-use-orm/comment-page-1/#comment-95</link>
		<dc:creator>Anonymous</dc:creator>
		<pubDate>Wed, 18 Jun 2008 01:29:00 +0000</pubDate>
		<guid isPermaLink="false">http://mikedesjardins.us/wordpress/2008/06/why-you-should-not-not-use-orm/#comment-95</guid>
		<description>&lt;a HREF=&quot;http://chiralsoftware.com/&quot; REL=&quot;nofollow&quot;&gt;We&lt;/a&gt; used to use Hibernate, and now we use EJB3 and Hibernate (session = entityManager.getDelegate()).  It&#039;s great.  You couldn&#039;t match the performance any other way, and development speed is also tremendously faster.  When using it with Seam, it keeps a cache of objects relative to the conversation context, which has a very high cache hit rate.  It also lets me express things like navigating across objects in Expression Language, so a front-end designer can show whatever he wants without asking the developer &quot;can you please create this join query...&quot;</description>
		<content:encoded><![CDATA[<p><a HREF="http://chiralsoftware.com/" REL="nofollow">We</a> used to use Hibernate, and now we use EJB3 and Hibernate (session = entityManager.getDelegate()).  It&#8217;s great.  You couldn&#8217;t match the performance any other way, and development speed is also tremendously faster.  When using it with Seam, it keeps a cache of objects relative to the conversation context, which has a very high cache hit rate.  It also lets me express things like navigating across objects in Expression Language, so a front-end designer can show whatever he wants without asking the developer &#8220;can you please create this join query&#8230;&#8221;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mike Desjardins</title>
		<link>http://www.mikedesjardins.net/content/2008/06/why-you-should-not-not-use-orm/comment-page-1/#comment-94</link>
		<dc:creator>Mike Desjardins</dc:creator>
		<pubDate>Wed, 18 Jun 2008 00:30:00 +0000</pubDate>
		<guid isPermaLink="false">http://mikedesjardins.us/wordpress/2008/06/why-you-should-not-not-use-orm/#comment-94</guid>
		<description>@kasper - that looks like a very cool tool!  I&#039;ll have to try that out!</description>
		<content:encoded><![CDATA[<p>@kasper &#8211; that looks like a very cool tool!  I&#8217;ll have to try that out!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: kasper</title>
		<link>http://www.mikedesjardins.net/content/2008/06/why-you-should-not-not-use-orm/comment-page-1/#comment-93</link>
		<dc:creator>kasper</dc:creator>
		<pubDate>Wed, 18 Jun 2008 00:06:00 +0000</pubDate>
		<guid isPermaLink="false">http://mikedesjardins.us/wordpress/2008/06/why-you-should-not-not-use-orm/#comment-93</guid>
		<description>When debugging ORM code, especially during tests, I&#039;ve appreciated actually being able to see the data in the database as it actually is for the current transaction (before it is comitted/rolled back). I just released a tool to assist you with such a task. It&#039;s called Data Storm: &lt;br/&gt;&lt;br/&gt;http://datastorm.sourceforge.net/motivation.html</description>
		<content:encoded><![CDATA[<p>When debugging ORM code, especially during tests, I&#8217;ve appreciated actually being able to see the data in the database as it actually is for the current transaction (before it is comitted/rolled back). I just released a tool to assist you with such a task. It&#8217;s called Data Storm: </p>
<p><a href="http://datastorm.sourceforge.net/motivation.html" rel="nofollow">http://datastorm.sourceforge.net/motivation.html</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mike Desjardins</title>
		<link>http://www.mikedesjardins.net/content/2008/06/why-you-should-not-not-use-orm/comment-page-1/#comment-92</link>
		<dc:creator>Mike Desjardins</dc:creator>
		<pubDate>Tue, 17 Jun 2008 23:45:00 +0000</pubDate>
		<guid isPermaLink="false">http://mikedesjardins.us/wordpress/2008/06/why-you-should-not-not-use-orm/#comment-92</guid>
		<description>@Donald - yeah, I kinda suspected that that insert function did a little more than a plan old insert statement under the covers, much as the &quot;save&quot; method in an ORM framework does a lot more than a SQL insert statement.&lt;br/&gt;&lt;br/&gt;@David - There&#039;s lots to hate about ORM frameworks.  It&#039;s a tough nut to crack, and I&#039;m not convinced that it&#039;s been &quot;solved&quot; by any of the tools I&#039;ve used.  At one of my previous jobs, we created a framework which basically mapped Java POJOs to stored procedure parameters, and did all of the SQL in stored procedures.  It actually worked quite well... I&#039;ve contemplated building another framework like that for a side-project and open-sourcing it.  I think iBATIS might also handle stored-procedure situations quite similarly (in the Java space), but I&#039;ve never tried it.</description>
		<content:encoded><![CDATA[<p>@Donald &#8211; yeah, I kinda suspected that that insert function did a little more than a plan old insert statement under the covers, much as the &#8220;save&#8221; method in an ORM framework does a lot more than a SQL insert statement.</p>
<p>@David &#8211; There&#8217;s lots to hate about ORM frameworks.  It&#8217;s a tough nut to crack, and I&#8217;m not convinced that it&#8217;s been &#8220;solved&#8221; by any of the tools I&#8217;ve used.  At one of my previous jobs, we created a framework which basically mapped Java POJOs to stored procedure parameters, and did all of the SQL in stored procedures.  It actually worked quite well&#8230; I&#8217;ve contemplated building another framework like that for a side-project and open-sourcing it.  I think iBATIS might also handle stored-procedure situations quite similarly (in the Java space), but I&#8217;ve never tried it.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

