<?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>willcodeforcoffee.com &#187; Reviews</title>
	<atom:link href="http://willcodeforcoffee.com/category/reviews/feed/" rel="self" type="application/rss+xml" />
	<link>http://willcodeforcoffee.com</link>
	<description>The personal programming blog of Eric Hoff.</description>
	<lastBuildDate>Tue, 02 Mar 2010 17:06:24 +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>What Makes A Good ORM?</title>
		<link>http://willcodeforcoffee.com/2009/09/21/what-makes-a-good-orm/</link>
		<comments>http://willcodeforcoffee.com/2009/09/21/what-makes-a-good-orm/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 20:31:27 +0000</pubDate>
		<dc:creator>eric</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Reviews]]></category>

		<guid isPermaLink="false">http://willcodeforcoffee.com/?p=106</guid>
		<description><![CDATA[I&#8217;ve been using a few ORMs with a few projects, including NHibernate, SubSonic, Linq-to-SQL (L2S) and Entity Framework (EF) and even Strongly-Typed DataSets. Each provides an abstraction from the database, a few have Visual Studio integration, and they all simplify data storage for you, but I&#8217;ve found some are definitely better than others. XML Files [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using a few ORMs with a few projects, including NHibernate, SubSonic, Linq-to-SQL (L2S) and Entity Framework (EF) and even Strongly-Typed DataSets. Each provides an abstraction from the database, a few have Visual Studio integration, and they all simplify data storage for you, but I&#8217;ve found some are definitely better than others.</p>
<p><span id="more-106"></span><strong>XML Files</strong></p>
<p>Most of the ORMs I&#8217;ve used required a lot of configuration in XML files. Probably the worst offender in this sense is NHibernate. L2S, EF and DataSets are bad too, but at least they have tooling in Visual Studio to make it easier to use and hide the XML from you. In this respect, the Fluent NHibernate project is a life-saver for anyone using NHibernate.</p>
<p><strong>POCOs and the Repository Design Pattern<br />
</strong></p>
<p>Another thing most ORMs provide you with is an ability to use simple POCOs or <span style="text-decoration: underline;">P</span>lain <span style="text-decoration: underline;">O</span>ld <span style="text-decoration: underline;">C</span>LR (or <span style="text-decoration: underline;">C</span>#) <span style="text-decoration: underline;">O</span>bjects. Ordinary DataTables and Strongly-Typed DataSets come with a lot of extra &#8220;clutter&#8221; to them, this is especially visible when you&#8217;re interacting with them using IntelliSense inside Visual Studio. The clutter appears as all the baggage that comes along with DataTables, as well as the fact you have to use DataAdapters, and fetch row objects (i.e. UserTableRow).</p>
<p>It is really nice to just have a simple class that can do what you need it to within the &#8220;domain&#8221; (following the Domain Driven Design ideas). It simplifies your data layer model significantly, and of course reduces a lot of clutter.</p>
<p>NHibernate and SubSonic are the clear leaders here, NHibernate even more so, but SubSonic can regenerate mappings after you&#8217;ve made changes to your database.</p>
<p><strong>Simple Database Schema Creation</strong></p>
<p>Another thing I like to see in an ORM tool is the ability to take your data-layer mappings and generate a database schema from that. The primary reason is that database versioning during development is <em>hard</em>. Keeping everyone on the same page with databases is difficult and making each developer use the <em>same</em> database is hard to impossible. If your ORM can just create and/or update your database schema for you off the bat, keeping each developer up-to-date is a breeze. No more &#8220;why is my app crashing?&#8221;, &#8220;where is that SQL script?&#8221;, &#8220;who did this?&#8221; shouting over the cubicle walls, instead you just run the update scripts and you&#8217;re all set.</p>
<p>As far as I know there is only one <em>clear </em>winner here and that is NHibernate; L2S, EF and Strongly-Typed DataSets don&#8217;t have this functionality at all. I believe that the 3.x version of SubSonic does have this now, and version 2.x had a version of migrations (that may be obsolete in version 3).</p>
<p><strong>My Pick for Best ORM</strong></p>
<p>I&#8217;ve personally switched from the SubSonic camp to the NHibernate camp in the last year. With Fluent NHibernate and guidance from the <a href="http://sharparchitecture.net/" target="_blank">S#arpArchitecture</a> projects all real difficult barriers into NHibernate have fallen. SubSonic is an awesome ORM and does help you get up to speed quickly, but it does feel like it isn&#8217;t developer or maintained quite as much as NHibernate is, and the differences between 2.x and 3.x versions was so great as to almost be intimidating to me (almost)!</p>
<p>Entity Framework is good, but I&#8217;ve had problems with the tooling and updating the mapping schema in the projects I&#8217;ve used it in. To me, there is very little programmatic difference with Linq-to-SQL, in fact EF seems to have more functionality. According to what I&#8217;ve read, it <em>will</em> have Database Schema Generation in the .NET 4.0 version, but NHibernate 2.1 already has LINQ support (via another library) so EF is really still just playing catch-up.</p>
<p>Strongly-Typed DataSets are pretty much an obsolete technology as far as I&#8217;m concerned &#8211; from the .NET 1.0/1.1 days. They do provide some simplification over bare metal ADO.NET, but I don&#8217;t find them as easy to use as NHibernate or any of the other ORMs I&#8217;ve discussed so I&#8217;ve seen little benefit in modern projects.</p>
<p><strong>Summary</strong></p>
<p>While I know there are more options out there than just the ones I&#8217;ve pointed out, NHibernate is the tool that <em>best</em> represents what I&#8217;m looking for in an ORM.</p>
]]></content:encoded>
			<wfw:commentRss>http://willcodeforcoffee.com/2009/09/21/what-makes-a-good-orm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My New Laptop: Sony Vaio VGN-FW265D</title>
		<link>http://willcodeforcoffee.com/2008/11/07/my-new-laptop-sony-vaio-vgn-fw265d/</link>
		<comments>http://willcodeforcoffee.com/2008/11/07/my-new-laptop-sony-vaio-vgn-fw265d/#comments</comments>
		<pubDate>Fri, 07 Nov 2008 19:28:42 +0000</pubDate>
		<dc:creator>eric</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Reviews]]></category>

		<guid isPermaLink="false">http://willcodeforcoffee.com/?p=54</guid>
		<description><![CDATA[I recently bought a new Sony Vaio Laptop.  Typically I don&#8217;t like Sony for much, what with all their rootkits and such.  There were a few reasons I decided to buy this laptop though: it had 4GB of RAM, it had a wide-screen (1600&#215;900) and it had a BluRay drive and it was under $1200. [...]]]></description>
			<content:encoded><![CDATA[<p>I recently bought a new Sony Vaio Laptop.  Typically I don&#8217;t like Sony for much, what with all their rootkits and such.  There were a few reasons I decided to buy this laptop though: it had 4GB of RAM, it had a wide-screen (1600&#215;900) and it had a BluRay drive and it was under $1200.</p>
<p>To put it short, this computer is excellent for development. It&#8217;s got all the RAM I need to run Visual Studio, and SQL Server and even some virtual machines.  The screen is fantastic and a great resolution for developing on.  I&#8217;m a big fan of wide screens because I can fit more code onto the screen.</p>
<p><span id="more-54"></span>The screen is also excellent for something else I like to do: watch TV.  The laptop came with three BluRay movies, including Casino Royale. HD movies look great on it, and most wide-screen shows fill the 16:9 ratio monitor.  I downloaded some 720p shows and they look awesome.  The screen is glossy though, so it&#8217;s harder to code on in a bright environment.</p>
<p>There is a &#8220;Full HD: 1080p&#8221; sticker on the laptop, but if I&#8217;m not mistaken full 1080p is 1920&#215;1080, not 1600&#215;900.  All the same, it looks fanstastic.</p>
<p>The processor is an Intel Centrino T5800, which is 2.0GHz with a 2MB L2 cache and 800MHz FSB.  The RAM is also DD2-800, so the RAM takes advantage of the FSB.  There are more powerful and more modern chips out there, but this one is good enough.</p>
<p>It has a &#8220;chiclet&#8221; keyboard like the Macbooks have with English and French layout keys.  It&#8217;s a jumble of white, pink, green and orange text on some of the buttons.  I think that is just because that is how Future Shop orders them.  I&#8217;m still getting used to it.  It should be parrot proof though, so my birds won&#8217;t bite the keys off this one like they did for my Gateway and Compaq laptops!</p>
<p>The mouse trackpad can&#8217;t be turned off with a button, but it does have a handy feature to disable tapping when you&#8217;re typing.  That is handy because I&#8217;m always resting my thumb on the trackpad.  It doesn&#8217;t work 100% for me though, because my hands are still resting on the mousepad even when I&#8217;m not actually typing.</p>
<p>In the end, this is a decent laptop that I expect will last me at least two years of development.  Probably once it is done I&#8217;ll be able to get a Windows 7 laptop!</p>
]]></content:encoded>
			<wfw:commentRss>http://willcodeforcoffee.com/2008/11/07/my-new-laptop-sony-vaio-vgn-fw265d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
