<?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>Code Hangover &#187; Books</title>
	<atom:link href="http://blog.codehangover.com/category/books/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.codehangover.com</link>
	<description>Go ahead, have another</description>
	<lastBuildDate>Tue, 22 Mar 2011 15:49:48 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>NHibernate 2 Beginner&#8217;s Guide &#8211; Book Review</title>
		<link>http://blog.codehangover.com/book-review-nhibernate-2-beginners-guide/</link>
		<comments>http://blog.codehangover.com/book-review-nhibernate-2-beginners-guide/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 04:31:22 +0000</pubDate>
		<dc:creator>Welzie</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[book review]]></category>
		<category><![CDATA[NHibernate]]></category>

		<guid isPermaLink="false">http://blog.codehangover.com/?p=542</guid>
		<description><![CDATA[<script type="text/javascript">dzone_url = "http://blog.codehangover.com/book-review-nhibernate-2-beginners-guide/";</script>Book on Amazon
Finally someone has written an in depth beginners book for nhibernate.  Nhibernate 2.0 Beginners Guide written by Aaron Cure is just that and more.  Wow do I sound like a car salesman.  I was a little disappointed when I read Nhibernate In Action last year, because it was more of a reference than [...]]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://blog.codehangover.com/book-review-nhibernate-2-beginners-guide/";</script><p><a style="padding: 0 10px 10px 10px; float: right" href="http://www.amazon.com/gp/product/1847198902?ie=UTF8&amp;tag=1410softwarec-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1847198902"><img src="http://img101.imageshack.us/img101/9956/nhibernate2guide.jpg" border="0" alt="" /><br />
<span style="font-size: 8pt;">Book on Amazon</span></a></p>
<p>Finally someone has written an in depth beginners book for nhibernate.  Nhibernate 2.0 Beginners Guide written by Aaron Cure is just that and more.  Wow do I sound like a car salesman.  I was a little disappointed when I read <a id="rkhb" title="Nhiberate In Action" href="../nhibernate-in-action-book-review/" target="_blank">Nhibernate In Action</a> last year, because it was more of a reference than a tutorial.  This book is definitely what the title states, which is a beginners guide.  The book contains step by step examples of how to find, setup, and use nhibernate.  I highly recommend this book to anyone wanting to learn nhibernate.  By the way I think all .netters should do just that.</p>
<p><strong>Pros</strong></p>
<ul>
<li>love the beginning paragraphs
<ul>
<li>In simple terms, NHibernate does all the database work, and we reap all the benefits! Instead of writing reams of SQL statements or creating stored procedures that &#8220;live&#8221; in a different place than our code, we can have all of our data access logic contained within our application.<br />
With a few simple &#8220;tricks&#8221; that we&#8217;ll discuss in Chapter 4, Data Cartography, not only will our queries be effective, but they will also be validated by the compiler. Therefore, if our underlying table structure changes, the compiler will alert us that we need to change our queries!</li>
</ul>
</li>
<li>starts slow, which is perfect for a &#8220;beginners&#8221; book.  lots of hand holding and explanations of basics.  this is truly meant for somehow with no experience with <a id="l6an" title="ORMs" href="http://en.wikipedia.org/wiki/Object-relational_mapping" target="_blank"><span>ORMs</span></a>.</li>
<li>clearly shows you how to use log4net!  great bonus in a nhibernate book.</li>
<li>briefly mentions all the major players in the nhibernate world, which is great for demonstrating options
<ul>
<li>Examples: fluent nhibernate, nhibernate.burrow, castle, spring <span>ioc</span>, etc.</li>
</ul>
</li>
</ul>
<p><strong>Cons</strong></p>
<ul>
<li>book uses basic <span>aspx</span> pages with custom controls in the examples.  I firmly suggest ASP.Net MVC over <span>webforms</span>.  But it may be too much to learn at one time if you aren&#8217;t familiar with either <span>nhib</span> or MVC.  So learn one first and then learn the other.  You won&#8217;t regret it.</li>
<li>most examples are in c# and vb.net.  that&#8217;s good or bad depending on your opinion of vb.net.</li>
<li>No <a id="p5oq" title="HQL" href="http://nhforge.org/doc/nh/en/index.html#queryhql" target="_blank"><span>HQL</span></a> examples.  All query examples use the Criteria class.  This isn&#8217;t totally bad especially for beginners, but <span>HQL</span> should have at least been mentioned.</li>
</ul>
<p><strong>Chapter Notes</strong></p>
<ul>
<li>chapter 1
<ul>
<li>clearly denotes which version of <span>nhib</span> the book uses and where to get it
<ul>
<li>Even explains the <span>nhib</span> release verbiage of &#8220;generally available&#8221;</li>
</ul>
</li>
<li>shows basic examples of mapping file and how it relates to <span>POCOs</span>.  Good stuff for a <a id="b6sw" title="ORM" href="http://en.wikipedia.org/wiki/Object-relational_mapping" target="_blank">ORM</a> newbie.</li>
</ul>
</li>
<li>chapter 2
<ul>
<li>good advice for designing your database in logical way that avoids data duplication.</li>
<li>clear steps to download and setup a database using sql server express
<ul>
<li>Does mention that <span>nhib</span> works in almost any database, however all the book examples use sql server express</li>
</ul>
</li>
<li>nice explanation of how tables relate to your classes</li>
<li>great introduction to <span>OTM</span>, <span>MTO</span>, <span>MTM</span>, and <span>OTO</span> relationships</li>
<li>good summary of left joins and how joins matter in queries for the different relationship types</li>
</ul>
</li>
<li>chapter 3
<ul>
<li>starts creating a simple class library application.  clear steps and good examples.</li>
<li>even addresses the somewhat hated <span>nullable</span> types and how to handle database columns that need to be mapped to types that can be null.</li>
</ul>
</li>
<li>chapter 4
<ul>
<li>nice explanation of what mapping means in terms of <a id="t.5g" title="ORM" href="http://en.wikipedia.org/wiki/Object-relational_mapping" target="_blank">ORM</a> software and how it functions as the glue that binds your objects to the database.</li>
<li>summary and examples of the most common used mapping types</li>
<li>gives examples of two mapping styles
<ul>
<li>xml
<ul>
<li>lists the two main complaints which are.. 1) too much xml 2) xml files are not compiled, so you don&#8217;t find bugs until run time.</li>
<li>provides great tip of adding the hibernate <span>XSD</span> to  your project so that visual studio will provide code completion for you and validate your mapping files.</li>
<li>important info about how to make sure the xml mapping files are compiled into your <span>dll</span></li>
</ul>
</li>
<li>fluent nhibernate
<ul>
<li>short example given that shows how using the &#8220;side&#8221; project <a href="http://fluentnhibernate.org/" target="_blank">http://fluentnhibernate.org/</a> can work without the xml mapping files.</li>
<li>pro is that mappings have to be compiled, so bugs/typos are found earlier</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>chapter 5
<ul>
<li>creates console application to test the <span>nhib</span> code</li>
<li>shows step by step how to add references to the <span>nhib</span> <span>dlls</span> that you need to download</li>
<li>good definition of what a <span>nhib</span> session is and how it relates to an actual database session</li>
</ul>
</li>
<li>chapter 6
<ul>
<li>why you should and how to use log4net with your <span>nhib</span> project</li>
<li>excellent and thorough tutorial for using log4net</li>
</ul>
</li>
<li>chapter 7
<ul>
<li><span>nhib</span> config details</li>
<li>mentions how easy it is to change databases by simply changing one config line</li>
<li>shows how to config <span>nhib</span> in an app.config or web.config</li>
</ul>
</li>
<li>chapter 8
<ul>
<li>provides example of Singleton DOA pattern</li>
<li>shows example of using a structure that holds all the column/property names for a class/entity.  this is done so that the column names in the structure can be used in criteria queries.  all this effort is done to avoid run time exceptions.  seems like a waste of time to me because you if you don&#8217;t update your structure every time your db is updated then you will still get <span>runtime</span> errors.</li>
<li>query examples using Criteria (at this point all examples have been using Criteria, none in <span>HQL</span>)</li>
</ul>
</li>
<li>chapter 9
<ul>
<li>in depth examples showing how to create custom controls to display data retrieved using nhibernate</li>
</ul>
</li>
<li>chapter 10
<ul>
<li>shows how to implement the login controls with nhibernate</li>
</ul>
</li>
<li>chapter 11
<ul>
<li>covers 11 code generation tools used to limit manual boiler plate coding.  I actually hadn&#8217;t heard of many of the ones listed.  Great bonus chapter.</li>
<li><span>nhib</span>-gen, <span>mygeneration</span>, <span>NGen</span> NHibernate Code Generator, and T4 <span>hbm</span>2net seem promising</li>
<li>these tools create everything from <span>POCOs</span> to <span>DAOs</span> to services.</li>
</ul>
</li>
</ul>
<p><img class=" zzvvvhvfecitsllxgenl zzvvvhvfecitsllxgenl zzvvvhvfecitsllxgenl zzvvvhvfecitsllxgenl zzvvvhvfecitsllxgenl zzvvvhvfecitsllxgenl zzvvvhvfecitsllxgenl zzvvvhvfecitsllxgenl zzvvvhvfecitsllxgenl zzvvvhvfecitsllxgenl" style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=1410softwarec-20&amp;l=as2&amp;o=1&amp;a=1847198902" border="0" alt="" width="1" height="1" /><br />
<h3>Related Posts</h3>
<ul class="related_post">
<li><a href="http://blog.codehangover.com/nhibernate-in-action-book-review/" title="NHibernate in Action &#8211; Book Review">NHibernate in Action &#8211; Book Review</a></li>
<li><a href="http://blog.codehangover.com/outliers-a-non-technical-book-every-freelancerdeveloper-should-read/" title="Outliers &#8211; A non technical book every freelancer/developer should read">Outliers &#8211; A non technical book every freelancer/developer should read</a></li>
<li><a href="http://blog.codehangover.com/configuring-nhibernate-in-a-multiple-project-layout/" title="Configuring NHibernate in a Multiple Project Layout">Configuring NHibernate in a Multiple Project Layout</a></li>
</ul>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.codehangover.com%2Fbook-review-nhibernate-2-beginners-guide%2F&amp;linkname=NHibernate%202%20Beginner%26%238217%3Bs%20Guide%20%26%238211%3B%20Book%20Review"><img src="http://blog.codehangover.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://blog.codehangover.com/book-review-nhibernate-2-beginners-guide/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Outliers &#8211; A non technical book every freelancer/developer should read</title>
		<link>http://blog.codehangover.com/outliers-a-non-technical-book-every-freelancerdeveloper-should-read/</link>
		<comments>http://blog.codehangover.com/outliers-a-non-technical-book-every-freelancerdeveloper-should-read/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 06:40:59 +0000</pubDate>
		<dc:creator>Welzie</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[book review]]></category>
		<category><![CDATA[freelance]]></category>

		<guid isPermaLink="false">http://blog.codehangover.com/?p=508</guid>
		<description><![CDATA[Review of the book Outliers "The Story of Success" by Malcolm Gladwell.  The book is NOT a 12 steps to success type book. Gladwell presents the theory that success is not a trait or a gene that only some people have.  Also comments about how these ideas relate to software development.]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://blog.codehangover.com/outliers-a-non-technical-book-every-freelancerdeveloper-should-read/";</script><p><a style="float: right" href="http://www.amazon.com/gp/product/0316017922?ie=UTF8&#038;tag=1410softwarec-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0316017922"><img border="0" src="http://img709.imageshack.us/img709/2888/outliers.gif"><span style="font-size: small;"><br />
<span style="font-size: 8pt;">Book on Amazon</span></a></p>
<p><a href="http://www.amazon.com/gp/product/0316017922?ie=UTF8&#038;tag=1410softwarec-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0316017922">Outliers &#8220;The Story of Success&#8221;</a> by Malcolm Gladwell is a popular book.  I heard about the book in a freelance discussion group at a developer conference.  I quickly ordered a used copy from Amazon.  It&#8217;s popularity became very apparent when multiple people, that saw me reading it in an airport terminal, asked if it was any good because they had heard it was.  My answer is yes.  The book has been reviewed many times (795 on amazon alone) so to avoid duplicate statements I will give my brief summation along with my comments about how the theories in the book apply to software development.  If you have read the book please comment with your thoughts.  If not I suggest you do because it&#8217;s a quick, thought provoking read.</p>
<p>
<span style="font-weight: bold">Summary:</span>  The book is NOT a 12 steps to success type book, I really hate those books.  Gladwell presents the theory that success is not a trait or a gene that only some people have.  Gladwell proposes that there are no simple rags to riches stories where a person builds an empire solely on their own.  With scientific studies and research to back up the theories Gladwell explores how opportunities and advantages provide the gateway to success.
</p>
<ul>
<li>10,000 hours (very popular topic from the book)</li>
<ul>
<li>No one succeeds without many, many hours of preparation.  No one.</li>
<li>Examples from <a target="_blank" href="http://en.wikipedia.org/wiki/Bill_Joy">Bill Joy</a>(co founded Sun) to The Beatles are given.</li>
<li>My thoughts: Turn off the xbox360 and the TV and learn a new language, framework, or pattern.  Then repeat.</li>
</ul>
<li>Luck</li>
<ul>
<li>Some people that prepare will be rewarded with incredibly rare opportunities.</li>
<li>My favorite example in the book is a list of the richest people ever.  A large number were from a 10 year period in the mid 1800&#8217;s.  That time period gave a few lucky individuals the opportunity to become tycoons because of culminating economic and technical advances.</li>
<li>My thoughts: So if you are not lucky enough to be learning the types of technical skills that will benefit you, then take it upon yourself to make your own luck and find a position that will.</li>
</ul>
<li>IQ is not all you need</li>
<ul>
<li>The book covers in depth the story of Chris Langan who has an IQ of 195, but has never attained a college degree or high profile professional career.</li>
<li>My thoughts: To succeed in software development you need communication skills, imagination, and technical skills(IQ).  You need to know how to inform/educate non technical people and how to debate effectively with colleagues.</li>
</ul>
<li>It takes a village</li>
<ul>
<li>No body makes it alone.  We all need support from family, friends, and colleagues.</li>
<li>Every freelance book or article I read says to have a partner.</li>
</ul>
<li>Love what you do</li>
<ul>
<li>Great quote from the book: &#8220;Hard work is a prison sentence only if it has no meaning&#8221;</li>
<li>My thoughts: You know if you love your job or not.  Stop thinking about finding a satisfying job.  Update your resume and go find a job you will love.  It won&#8217;t find you, unless you are one of those really lucky people the book mentions.</li>
</ul>
</ul>
<p>Another excellent review of Outliers: <a target="_blank" href="http://www.markhneedham.com/blog/2009/01/06/outliers-book-review/">http://www.markhneedham.com/blog/2009/01/06/outliers-book-review/</a><br />
<h3>Related Posts</h3>
<ul class="related_post">
<li><a href="http://blog.codehangover.com/book-review-nhibernate-2-beginners-guide/" title="NHibernate 2 Beginner&#8217;s Guide &#8211; Book Review">NHibernate 2 Beginner&#8217;s Guide &#8211; Book Review</a></li>
<li><a href="http://blog.codehangover.com/if-you-want-to-have-cities-youve-got-to-build-roads/" title="If You Want to Have Cities You&#8217;ve Got to Build Roads">If You Want to Have Cities You&#8217;ve Got to Build Roads</a></li>
<li><a href="http://blog.codehangover.com/nhibernate-in-action-book-review/" title="NHibernate in Action &#8211; Book Review">NHibernate in Action &#8211; Book Review</a></li>
</ul>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.codehangover.com%2Foutliers-a-non-technical-book-every-freelancerdeveloper-should-read%2F&amp;linkname=Outliers%20%26%238211%3B%20A%20non%20technical%20book%20every%20freelancer%2Fdeveloper%20should%20read"><img src="http://blog.codehangover.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://blog.codehangover.com/outliers-a-non-technical-book-every-freelancerdeveloper-should-read/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>NHibernate in Action &#8211; Book Review</title>
		<link>http://blog.codehangover.com/nhibernate-in-action-book-review/</link>
		<comments>http://blog.codehangover.com/nhibernate-in-action-book-review/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 16:35:48 +0000</pubDate>
		<dc:creator>Welzie</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[book review]]></category>
		<category><![CDATA[NHibernate]]></category>

		<guid isPermaLink="false">http://blog.codehangover.com/?p=435</guid>
		<description><![CDATA[Review of the book "NHibernate In Action".  Pros &#038; cons along with suggestions for who this book would benefit.]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://blog.codehangover.com/nhibernate-in-action-book-review/";</script><p><a style="float: right" href="http://www.amazon.com/gp/product/1932394923?ie=UTF8&amp;tag=1410softwarec-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1932394923"><img src="http://img94.imageshack.us/img94/9959/nhibernateinaction.jpg" border="0" alt="" /><span style="font-size: small;"><br />
<span style="font-size: 8pt;">Book on Amazon</span></span></a><img style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=1410softwarec-20&amp;l=as2&amp;o=1&amp;a=1932394923" border="0" alt="" width="1" height="1" /><br />
All summer I meant to read the book &#8220;NHibernate In Action&#8221;.  I finally got around to it, better late than never I guess. In my opinion this book is aimed at higher level programmers such as lead developers or architects.  The book does not contain clear step by step examples of how to get NHibernate running.  However it does provide in depth conceptual reasoning why anyone would want to use NHibernate along with reference style examples.  If you are trying to learn NHibernate  you are better off reading a few online tutorials first and after that read this book so you can understand exactly what NHibernate is doing and how it does it.  Below are some book pros &amp; cons, NHibernate links, and chapter summaries.</p>
<h4>Pros</h4>
<ul>
<li> Examples are all in c#</li>
<li> Shows config examples for NHibernate 1.2.1 and 2</li>
<li> Promotes proper design patters often references popular pattern books</li>
<li> Makes note of minor current bugs or missing features that may cause issues or confusion</li>
<li> Provides suggestions for when to use something other than the default NHibernate settings</li>
<li> Mentions how NHibernate can use the features of multiple RDMS, not just SQL Server</li>
</ul>
<h4>Cons</h4>
<ul>
<li> Download and install instructions were vague
<ul>
<li> I downloaded <a href="http://sourceforge.net/projects/nhibernate/files/">NHibernate 2.1.0 QA from SourceForge</a> after finally finding the link on nhforge.org.  From there I followed the install notes in the downloaded zip file.</li>
</ul>
</li>
<li> Examples do not use Generics</li>
<li> Doesn&#8217;t provide a link or even a suggestion to where you can download the NHibernate.Mapping.Attributes library which lets you use features similar to the annotations in Hibernate 3
<ul>
<li>I found them here: http://sourceforge.net/projects/nhcontrib/files/NHibernate.Mapping.Attributes/</li>
</ul>
</li>
<li> Shows attribute and xml mapping examples randomly.  In my opinion it would be better if one or the other was used consistently.</li>
<li> Jumps from definitions to examples. No clear step by step examples
<ul>
<li>I would say this book is more of a reference than tutorial</li>
</ul>
</li>
</ul>
<h4>Helpful NHibernate Links</h4>
<ul>
<li><a href="http://nhforge.org">NHibernate community site</a>
<ul>
<li>Great <a href="http://nhforge.org/wikis/howtonh/your-first-nhibernate-based-application.aspx">short tutorial</a></li>
<li><a href="http://nhforge.org/doc/nh/en/index.html">NHibernate docs</a></li>
</ul>
</li>
<li><a href="http://groups.google.com/group/nhusers/">NHibernate Google Group</a></li>
<li><a href="http://stackoverflow.com/questions/tagged/nhibernate">Stackoverflow NHibernate</a> questions and answers</li>
<li>How to use <a href="http://iseesharp.blogspot.com/2006/09/connecting-mysql-and-c.html">MySQL with .NET</a></li>
<li><a href="https://www.hibernate.org/361.html">Databases supported</a> by NHibernate</li>
<li><a href="http://swik.net/tag4sree/Hibernate+-+Objects/Common+nHibernate+exceptions+and+a+question/b4013">Common exceptions </a></li>
</ul>
<h4>Chapter 1</h4>
<ul>
<li> Basic definitions of persistence, sql(sql not sql server) databases, and layered development</li>
<li>Doesn&#8217;t mention the testability benefits of layered development</li>
<li> Compares persistence layer choices available with .Net</li>
<li> Makes the case that LINQ and Entity framework will not replace NHibernate</li>
<li> Definition of ORM</li>
<li> Addresses the performance concerns of using ORMs</li>
<li> Author tries to convince people to use ORMs, this part needs a little salesman ship but I guess if someone is open minded enough to read this book then they don&#8217;t need much of a sales pitch.</li>
</ul>
<h4>Chapter 2</h4>
<ul>
<li> Some basoc instructions for how to download and install the NHibernate dll
<ul>
<li>con: Could use a little details in this section about how to use the versions that don&#8217;t have msi installers yet like the 2.1.0.GA release I downloaded.</li>
</ul>
</li>
<li> Shows very simple examples of saving and loading an entity</li>
<li> Then shows you a basic xml mapping document
<ul>
<li>o Shows a mapping document for versions 1.2 and 2.</li>
</ul>
</li>
<li> Quick glance at the NHibernate api and in depth notes on important interfaces</li>
<li> Very short section on logging with log4net</li>
</ul>
<h4>Chapter 3</h4>
<ul>
<li> Good section on the benefits of having a transparent persistence layer</li>
<li> Discusses the anti xml config file movement.
<ul>
<li>However doesn&#8217;t mention the fact that poorly designed and overly complicated schemas are one reason for the back lash.  Also never mentions CoC.</li>
</ul>
</li>
<li> Discusses using attributes as meta data
<ul>
<li>IMHO way more time should have been spent telling the users how to setup/install the mapping dlls needed to use this feature</li>
<li>Does show many examples of how to use the attributes and what the xml version of the meta data would look like</li>
</ul>
</li>
<li> This chapter provides information about the hibernate mapping elements and options
<ul>
<li>It is a mix between a reference and tutorial.</li>
</ul>
</li>
<li> Good section on object identity vs equality</li>
<li> con:  Gives an explanation of what primary keys are.  Surely anyone reading this book knows already knows what primary keys are.</li>
<li> Good short explanation of the different types of primary key creation that NHibernate supports</li>
<li> Long discussion on database and object model design
<ul>
<li>table per concrete class</li>
<li>table per sub class</li>
<li>table per class hierarchy</li>
</ul>
</li>
</ul>
<h4>Chapter 4</h4>
<ul>
<li> Explains object identity scope.  probably a little high level for low level developers</li>
<li> Explains different options for Equals and HashCode implementations</li>
<li> Automatic dirty checking
<ul>
<li>Changing an object in an ISession and committing will result in those changes being automatically reflected in the database</li>
</ul>
</li>
<li> Clearly denotes the different cascading persistence options</li>
<li> Details the different object retrieval options
<ul>
<li>Retrieving by identifier</li>
<li>HQL</li>
<li>NHibernate Criteria API</li>
<li>Native SQL queries</li>
</ul>
</li>
<li> In depth discussion of fetching strategies and how to implement each one</li>
<li> Short section on batching and how it can speed up queries for selecting collections</li>
<li> Provides common sense ideas for analyzing NHibernate&#8217;s performance</li>
</ul>
<h4>Chapter 5</h4>
<ul>
<li> Background on database transactions, unit of work and conversations</li>
<li> Excellent section on transaction isolation</li>
<li> Background on ORM caching</li>
</ul>
<h4>Chapter 6</h4>
<ul>
<li> Starts with more definitions and comparisons of entities and value types</li>
<li> Nice chart showing how NHibernate mapping types relate to .Net types</li>
<li> Give in depth example of creating a custom mapping type</li>
<li> Nice tips on controlling collection sorting with mapping settings</li>
</ul>
<p><a href="http://www.amazon.com/gp/product/1932394923?ie=UTF8&amp;tag=1410softwarec-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1932394923"><img src="http://img94.imageshack.us/img94/9959/nhibernateinaction.jpg" border="0" alt="" width="50" height="75px" /><br />
</a><br />
<h3>Related Posts</h3>
<ul class="related_post">
<li><a href="http://blog.codehangover.com/book-review-nhibernate-2-beginners-guide/" title="NHibernate 2 Beginner&#8217;s Guide &#8211; Book Review">NHibernate 2 Beginner&#8217;s Guide &#8211; Book Review</a></li>
<li><a href="http://blog.codehangover.com/configuring-nhibernate-in-a-multiple-project-layout/" title="Configuring NHibernate in a Multiple Project Layout">Configuring NHibernate in a Multiple Project Layout</a></li>
<li><a href="http://blog.codehangover.com/asp-net-mvc-musings-and-book-review/" title="ASP.Net MVC Book Review and musings">ASP.Net MVC Book Review and musings</a></li>
</ul>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.codehangover.com%2Fnhibernate-in-action-book-review%2F&amp;linkname=NHibernate%20in%20Action%20%26%238211%3B%20Book%20Review"><img src="http://blog.codehangover.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://blog.codehangover.com/nhibernate-in-action-book-review/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Book Review: xUnit Test Patterns</title>
		<link>http://blog.codehangover.com/book-review-xunit-test-patterns/</link>
		<comments>http://blog.codehangover.com/book-review-xunit-test-patterns/#comments</comments>
		<pubDate>Sat, 22 Aug 2009 04:40:24 +0000</pubDate>
		<dc:creator>RyanStewart</dc:creator>
				<category><![CDATA[Books]]></category>

		<guid isPermaLink="false">http://blog.codehangover.com/?p=346</guid>
		<description><![CDATA[If you write software, this book is an absolute must-read. If you've never written an automated test, it will convince you why you should. If you're <a href="http://junit.sourceforge.net/doc/testinfected/testing.htm">test-infected</a>, it will give you advice and principles to follow that guide you toward more effective testing and, ultimately, more effective software.]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://blog.codehangover.com/book-review-xunit-test-patterns/";</script><p>Well, as I related in <a href="http://shotgunsandpenguins.blogspot.com/2009/07/ive-decided-to-read-technical-book.html">a post on my personal blog</a> before this shared blog came into being, I was going to read a book every two weeks and give a review of it. I should have said that I&#8217;d read 200-300 pages per week instead. My latest book is 800+ pages, and it took me three weeks, even when I skimmed several pieces of it. It was, however, an outstanding book.</p>
<p>If you write software, this book is an absolute must-read. If you&#8217;ve never written an automated test, it will convince you why you should. If you&#8217;re <a href="http://junit.sourceforge.net/doc/testinfected/testing.htm">test-infected</a>, it will give you advice and principles to follow that guide you toward more effective testing and, ultimately, more effective software. For anyone in between, this book has something for you, too. It&#8217;s written in a language-agnostic way and has advice applicable to testing with any of the &#8220;xUnit&#8221; family: any test framework that works along the same lines as Java&#8217;s JUnit.</p>
<p><a href="http://www.amazon.com/gp/product/0131495054?ie=UTF8&amp;tag=shotgandpengu-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0131495054"><img style="float: left;margin-right: 10px" src="http://xunitpatterns.com/Cover-Small.gif" border="0" alt="" /></a><img class=" xelyqofsyqferbxgfozy xelyqofsyqferbxgfozy" style="border:none !important;margin:0px !important" src="http://www.assoc-amazon.com/e/ir?t=shotgandpengu-20&amp;l=as2&amp;o=1&amp;a=0131495054" border="0" alt="" width="1" height="1" /></p>
<p><strong><a href="http://www.amazon.com/dp/0131495054?tag=shotgandpengu-20&amp;camp=213381&amp;creative=390973&amp;linkCode=as4&amp;creativeASIN=0131495054&amp;adid=1G5F18ADQZS781H7EM5G&amp;">xUnit Test Patterns</a></strong><br />
Refactoring Test Code<br />
by Gerard Meszaros</p>
<p>As its name suggests, it&#8217;s a <a href="http://en.wikipedia.org/wiki/Design_pattern_(computer_science)">patterns</a> book, which means that <a href="http://blog.codehangover.com/spring-patterns-best-practices-and-design-strategies-book-review/" target="_self">Mike would like</a> it because a large part of it is a catalog of various test-related patterns that the author has collected. Another chunk of the book is taken up by a catalog of test <a href="http://en.wikipedia.org/wiki/Code_smell">smells</a>. This still leaves plenty of room, though, for Meszaros to provide a thorough introduction to software testing&#8211;primarily <a href="http://en.wikipedia.org/wiki/Unit_testing">unit testing</a>, but with plenty of consideration for other test scopes as well&#8211;and to give a detailed overview of <a href="http://en.wikipedia.org/wiki/Best_practice">best practices</a> in testing.</p>
<p>Part One of the book is the narrative, non-catalog part and could be a book all by itself. It covers a lot of theoretical ground with topics like goals of automated testing, guiding principles to consider when writing tests, and various philosophies of testing along with their pros and cons. On the more &#8220;practical application&#8221; front, there&#8217;s a basic introduction to the internal workings of the xUnit family frameworks, which is foundational knowledge for many patterns, and a ton of practical advice revolving around real-world examples of difficult testing situations and methods of dealing with them. You could read just this part of the book&#8211;under 200 pages&#8211;and come away a better developer for it.</p>
<p>Part Two is the catalog of test smells. Each smell is the formalization of a testing problem that was discussed in Part One. A statement of the problem, its symptoms and possible causes, and various suggested solutions are all collected into a neat, tidy package for easy access. The smells cover a wide variety of things from the seemingly trivial difficult-to-read tests to major systemic problems like unreliable test suites due to sporadic test failures.</p>
<p>Part Three is the pattern catalog, where the solutions to aforementioned problems and best practices are formalized. Each pattern has a brief summary up front, a description of how and when to use it appropriately, examples of how the pattern looks in code (in various languages), and examples of how to refactor problem code to solve the problem effectively with the pattern. The initial summary is highly useful in that you can read through the summaries of all 60 or so of the patterns in a very short time and have a feel for which ones you should look into more deeply for a particular situation.</p>
<p>I have to say one more time that you <strong>must read</strong> this book! It pulls patterns, practices, and more from many other sources and organizes them all in a well-written, easy-to-read reference that will provide a strong foundation for testing efforts in any xUnit framework. Beyond that, I&#8217;ve yet to mention the author&#8217;s efforts to establish a common vocabulary of test patterns by assembling them all in one place with a strict system of names. While this may seem trivial in comparison to the content of the patterns, the lack of such a vocabulary can lead to real difficulties in communication when four people use a name like &#8220;Test Stub&#8221; in four very different ways. Learn a better way.</p>
<p><a href="http://www.amazon.com/dp/0131495054?tag=shotgandpengu-20&amp;camp=213381&amp;creative=390973&amp;linkCode=as4&amp;creativeASIN=0131495054&amp;adid=1G5F18ADQZS781H7EM5G&amp;">Get this book.</a> Read it. Use it. Live it.<br />
<h3>Related Posts</h3>
<ul class="related_post">
<li><a href="http://blog.codehangover.com/php-framework-comparison/" title="PHP Framework Comparison">PHP Framework Comparison</a></li>
<li><a href="http://blog.codehangover.com/read-html-with-java-then-7-fun-things-to-do-to-it/" title="Read HTML with Java &#8211; Then 7 Fun Things to do to It">Read HTML with Java &#8211; Then 7 Fun Things to do to It</a></li>
<li><a href="http://blog.codehangover.com/list-of-version-control-web-sites/" title="List of Version Control Web Sites">List of Version Control Web Sites</a></li>
</ul>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.codehangover.com%2Fbook-review-xunit-test-patterns%2F&amp;linkname=Book%20Review%3A%20xUnit%20Test%20Patterns"><img src="http://blog.codehangover.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://blog.codehangover.com/book-review-xunit-test-patterns/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Spring Patterns: Best Practices and Design Strategies Book Review</title>
		<link>http://blog.codehangover.com/spring-patterns-best-practices-and-design-strategies-book-review/</link>
		<comments>http://blog.codehangover.com/spring-patterns-best-practices-and-design-strategies-book-review/#comments</comments>
		<pubDate>Sun, 16 Aug 2009 18:46:03 +0000</pubDate>
		<dc:creator>MikeNereson</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[book review]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://blog.codehangover.com/?p=352</guid>
		<description><![CDATA[This is a book review of Pro Java™ EE Spring Patterns: Best Practices and Design Strategies Implementing Java EE Patterns with the Spring Framework by Dhrubojyoti Kayal.]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://blog.codehangover.com/spring-patterns-best-practices-and-design-strategies-book-review/";</script><p>This is a book review of <a id="static_txt_preview" href="http://www.amazon.com/gp/product/1430210095?ie=UTF8&amp;tag=72mile-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1430210095">Pro Java™ EE Spring Patterns: Best Practices and Design Strategies Implementing Java EE Patterns with the Spring Framework</a></p>
<h2>About the Book</h2>
<p>Apress describes this book as<br />
<a id="static_txt_preview" href="http://www.amazon.com/gp/product/1430210095?ie=UTF8&amp;tag=72mile-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1430210095"><img src="http://www.apress.com/resource/bookcover/9781430210092?size=medium" style="float: right; padding: 0  0 10px 10px;" border="0" /></a></p>
<blockquote style="padding:12px;"><p><em>Pro Java™ EE Spring Patterns</em> focuses on enterprise patterns, best practices, design strategies, and proven solutions using key Java EE technologies including JSP™, servlets, EJB™, and JMS APIs.<br/><br />
This Java EE patterns resource, catalog, and guide, with it&#8217;s patterns and numerous strategies, documents and promotes best practices for these technologies, implemented in a very pragmatic way using the Spring Framework and it&#8217;s counters.</p>
</blockquote>
<p>The book was written by Dhrubojyoti  Kayal. Dhrubojyoti works as a senior consultant with Capgemini Consulting. He has more than five years of experience developing and designing applications and products leveraging Enterprise Java technologies. His areas of interest include the Spring Framework, ORM, SOA, refactoring, prefactoring, and performance engineering.</p>
<p>In this book the author takes us through the process of refactoring a legacy system built without using patterns or the Spring Framework into a shiny new system leveraging Spring and design patterns. Throughout the book he takes us through this practical, real-word example.</p>
<h2>Introduction to the MVC Pattern</h2>
<p>The first chapter introduces you to the MVC pattern. I think that this book is for a well versed J2EE professional developer, who would probably be familiar with the pattern, so this chapter may have been overkill. However, the basis of this book is to refactor an antiquated web application to use Spring and the Spring MVC, so a clear and thorough understanding of the MVC pattern is necessary. Most readers of this book can probably skip this chapter. On the other hand it is written well enough that it would serve a good resource for any rookie developers that you might be working with who need to learn this pattern.</p>
<h2>Patterns</h2>
<p>Each chapter of this book takes you through the concepts of a common pattern, describes how the Spring Framework is used to implement that pattern, and then replaces the legacy insurance system code with new spring code. Once you get into the patterns, the book is divided into four major sections. These sections are</p>
<ul>
<li>Presentation Tier Design Patterns</li>
<li>Business Tier Design Patterns</li>
<li>Integration Tier Design Patterns</li>
<li>Crosscutting Design Patterns.</li>
</ul>
<p>This division helps to keep the conversation between the author and the reader focused and also makes it easy to find later when you come back to reference this information.<br />
<strong> </strong></p>
<h2>The Best Part</h2>
<p>My favorite part about this book is that it is a patterns book. I like to read books based on patterns more than any other type of book. Patterns books are naturally broken down into small, manageable chunks of information. When written, patterns are usually described using a common, easy to follow template and are small enough to read an entire pattern in one sitting, whether that sitting be while you are eating your lunch or a quick read before hitting the pillow. Because they are written this way, it is easy to read this book very quickly and easy to find what you are looking for when you come back later for specific information. Pattern-based books are great.</p>
<p>I also liked this book because it takes you through all the layers of a real-world system. As developers we all have to work with legacy code. If you don&#8217;t your very lucky. Because this is <em>real world</em> it is very easy to follow along with the author and the project and see the benefits of Spring and refactoring to patterns.</p>
<h2><strong>Needs Refactoring</strong></h2>
<p>It&#8217;s a good, well-written book, but there are some things that I think need to be changed.</p>
<p>First, as with any book with code examples, there is some odd code that should be rewritten or removed. For example, there is a business bean that has a DAO injected into it via a setter. However, this bean also contains a getter for that DAO. This is not common practice and, in my opinion, not recommended.</p>
<p>And second, all of the presentation patterns are in a single chapter, and all of the business and integration patterns are in their own chapters. I think each pattern should have had its own chapter. I just prefer the clearer boundaries between patterns and I think it would make finding these patterns later, when I come to reference the book, a little easier.</p>
<h2>You Should Read this Book</h2>
<p>You should read this book if you are a developer who uses Spring, and especially if you use Spring MVC. This is a great resource and a great way to learn about how Spring utilizes patterns internally to implement its services. Of course it also shows you how to use Spring to add patterns to your current code base. You should read this book if you use an MVC framework that is not Spring MVC and are considering Spring MVC for  your next project or are considering adapting Spring MVC to your current project. While this book deals with more than just the Spring MVC, the entire presentation tier section is based on it.</p>
<h2>Or Not&#8230;</h2>
<p>I do recommend this book to most developers, however you should not read Spring Patterns if you are not well versed with J2EE/JEE and the Spring framework. If you are looking to learn Spring, there are <a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;location=http%3A%2F%2Fwww.amazon.com%2Fs%3Fie%3DUTF8%26x%3D0%26ref%255F%3Dnb%255Fss%26y%3D0%26field-keywords%3Dspring%2520framework%26url%3Dsearch-alias%253Dstripbooks&amp;tag=72mile-20&amp;linkCode=ur2&amp;camp=1789&amp;creative=390957" target="_blank">other books that might be more suitable</a>.</p>
<p>Here are some last notes, straight from Apress, about this book:</p>
<ul>
<li>What you&#8217;ll Learn:
<ul>
<li>Get an introduction to enterprise Java/Java EE application design patterns.</li>
<li>Simplify enterprise Java design using the popular Spring Framework.</li>
<li>Examine presentation, business, web, and integration tier design patterns and best practices, including cross–cutting design patterns, AOP, etc.</li>
<li>See how the enhanced and up–to–date pattern catalog compares to core J2EE design blueprints.</li>
<li>Learn how to use comprehensive source code and configuration information.</li>
<li>Develop order management system requirements for the first in–depth enterprise application case study.</li>
<li>Design your order management system application using the final case study.</li>
</ul>
</li>
</ul>
<h4>Table of Contents</h4>
<p>Finally, here is the table of contents:</p>
<ul style="list-style:none; margin:0 auto; padding:0;float:left;">
<li style="float:left;display:inline;padding:2px;width: 130px;"><a href="http://farm3.static.flickr.com/2480/3827336608_88bbe2bec6_o.png" rel="lightbox[springpatterns]" style=""><br />
<img src="http://farm3.static.flickr.com/2480/3827336608_df45a303fe_m.jpg" border="0" /><br />
</a></li>
<li style="float:left;display:inline;padding:2px;width: 130px;"><a href="http://farm3.static.flickr.com/2672/3827336568_cf7c1c64aa_o.png" rel="lightbox[springpatterns]" style=""><br />
<img src="http://farm3.static.flickr.com/2672/3827336568_690d3568d1_m.jpg" border="0" /><br />
</a></li>
<li style="float:left;display:inline;padding:2px;width: 130px;"><a href="http://farm4.static.flickr.com/3572/3826538477_4e53339bea_o.png" rel="lightbox[springpatterns]" style=""><br />
<img src="http://farm4.static.flickr.com/3572/3826538477_d2d525f132_m.jpg" border="0" /><br />
</a></li>
<li style="float:left;display:inline;padding:2px;width: 130px;"><a href="http://farm4.static.flickr.com/3563/3827336680_b7c363a876_o.png" rel="lightbox[springpatterns]" style=""><br />
<img src="http://farm4.static.flickr.com/3563/3827336680_79666f704d_m.jpg" border="0" /><br />
</a></li>
<li style="float:left;display:inline;padding:2px;width: 130px;"><a href="http://farm4.static.flickr.com/3505/3826538533_4eb9442f45_o.png" rel="lightbox[springpatterns]" style=""><br />
<img src="http://farm4.static.flickr.com/3505/3826538533_0c78123757_m.jpg" border="0" /><br />
</a></li>
<li style="float:left;display:inline;padding:2px;width: 130px;"><a href="http://farm4.static.flickr.com/3548/3827336762_0414939c27_o.png" rel="lightbox[springpatterns]" style=""><br />
<img src="http://farm4.static.flickr.com/3548/3827336762_2f7a968aaf_m.jpg" border="0" /><br />
</a></li>
</ul>
<h3>Related Posts</h3>
<ul class="related_post">
<li><a href="http://blog.codehangover.com/asp-net-mvc-musings-and-book-review/" title="ASP.Net MVC Book Review and musings">ASP.Net MVC Book Review and musings</a></li>
<li><a href="http://blog.codehangover.com/book-review-nhibernate-2-beginners-guide/" title="NHibernate 2 Beginner&#8217;s Guide &#8211; Book Review">NHibernate 2 Beginner&#8217;s Guide &#8211; Book Review</a></li>
<li><a href="http://blog.codehangover.com/outliers-a-non-technical-book-every-freelancerdeveloper-should-read/" title="Outliers &#8211; A non technical book every freelancer/developer should read">Outliers &#8211; A non technical book every freelancer/developer should read</a></li>
</ul>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.codehangover.com%2Fspring-patterns-best-practices-and-design-strategies-book-review%2F&amp;linkname=Spring%20Patterns%3A%20Best%20Practices%20and%20Design%20Strategies%20Book%20Review"><img src="http://blog.codehangover.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://blog.codehangover.com/spring-patterns-best-practices-and-design-strategies-book-review/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>ASP.Net MVC Book Review and musings</title>
		<link>http://blog.codehangover.com/asp-net-mvc-musings-and-book-review/</link>
		<comments>http://blog.codehangover.com/asp-net-mvc-musings-and-book-review/#comments</comments>
		<pubDate>Fri, 14 Aug 2009 05:27:04 +0000</pubDate>
		<dc:creator>Welzie</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[book review]]></category>
		<category><![CDATA[mvc]]></category>

		<guid isPermaLink="false">http://blog.codehangover.com/?p=307</guid>
		<description><![CDATA[My thoughts on ASP.Net MVC followed by a review of the Apress book Pro ASP.NET MVC Framework by Steve Sanderson.]]></description>
			<content:encoded><![CDATA[<script type="text/javascript">dzone_url = "http://blog.codehangover.com/asp-net-mvc-musings-and-book-review/";</script><h2><strong>ASP.Net MVC musings</strong></h2>
<ul>
<li>ASP.Net MVC is a <a href="http://en.wikipedia.org/wiki/Convention_over_configuration">CoC</a> <a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller">MVC</a> framework, it&#8217;s not a &#8220;full stack&#8221; framework.  You still need to implement some type of database layer.</li>
<li>Traditional ASP.net web forms attempts to hide the core parts of web development HTML, JS, CSS.  ASP.Net MVC does not.</li>
<li>Learning a pattern like MVC in web framework that allows developers to be aware of HTML, JS, CSS will only benefit you as a web developer.
<ul>
<li>If you actually understand how web pages work it makes you a better debugger and a more well rounded programmer.   You are able to more easily apply your knowledge and skill set to other languages/platforms.  I know that some web form developers do know the details of web development, but in my opinion most do not.</li>
</ul>
</li>
<li>The fact that ASP.Net MVC makes it easier to test will not appeal to people who have never written a unit test in their life.  You have to convince such people by showing a real world example demonstrating how test coverage can save you loads of time and money in the maintenance phase of application development.  But at that point you will only get architects and project managers to buy in, the lazy developers that fear learning anything new will still avoid ASP.Net MVC like the swine flu.</li>
<li>The fact that the MVC pattern is a common pattern among other web development environments such as Java and PHP will also not appeal to most Microsoft developers.  However the really smart ones will realize that more common knowledge will only help if you ever have to do any type of development other than microsoft development</li>
</ul>
<h2><strong>Book Review &#8211; <a href="http://www.amazon.com/gp/product/1430210079?ie=UTF8&amp;tag=1410softwarec-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1430210079">Pro ASP.Net MVC Framework &#8211; Steven Sanderson</a></strong></h2>
<p style="text-align: left;"><a style="float: right" href="http://www.amazon.com/gp/product/1430210079?ie=UTF8&amp;tag=1410softwarec-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1430210079"><img src="http://img10.imageshack.us/img10/8153/proaspmvcu.jpg" border="0" alt="" /><br/><span style="font-size: 8pt;">Book on Amazon</span></a> I am a Java, PHP, and .Net developer which may make my opinion worthless to some Microsoft zealots but I thought I would type up my thoughts on this book anyway.  Overall I found this book to be a great way to learn ASP.Net MVC.  It has great examples and enough background material to bring people new to the MVC pattern up to speed.  Below are my pros and cons along with notes on chapters 1-13.</p>
<h4>Note about the cover.</h4>
<p>One thing I found interesting is that the cover says &#8220;Discover the biggest innovation in Microsoft web development since asp.net 1.0&#8243;.  I find it amusing that something as old as MVC web frameworks can be called an innovation for asp.net development since MVC frameworks are nothing new to web development.  Heck they are not even new to ASP.Net development.  See <a href="http://www.castleproject.org/monorail/">MonoRail</a> .</p>
<h4>Pros</h4>
<ul>
<li>Provides good definition of MVC and explains why you want to use it</li>
<li>Overall all the examples are clear and concise</li>
<li>Gives examples of how to test every part of ASP.Net MVC</li>
<li>Moves quick enough for someone with MVC experience and slow enough for someone with no MVC experience</li>
<li>Great chapter on web site security</li>
<li>Book often demonstrates C# 3 language features</li>
</ul>
<h4>Cons</h4>
<ul>
<li>Database examples use <a href="http://en.wikipedia.org/wiki/Linq#LINQ_to_SQL" target="_blank">LINQ to SQL</a>.
<ul>
<li>
As many have noted this isn&#8217;t a major con. It was probably used to keep the examples shorter.  Whether you like LINQ to SQL or not that is a good thing.
 </li>
</ul>
</li>
<li>No mention of Mono project or any hints of how to get ASP.Net working with Mono.</li>
<li>Book examples are for the &#8220;real&#8221; version of VS2008 not the free VWDE2008.</li>
<li>Does not provide a good example of using a validation utility such as XVal or Data Annotations</li>
</ul>
<h4>Chapter 1</h4>
<ul>
<li>An adequate history lesson for those unfamiliar with MVC.</li>
</ul>
<h4>Chapter 2</h4>
<ul>
<li>A great chapter that quickly and easily shows you the basics of ASP.Net MVC</li>
</ul>
<h4>Chapter 3</h4>
<div>
<ul>
<li>Gives in depth definition to each part of MVC</li>
<li>Gives good definition of entities <em>vs</em> value objects</li>
<li>Lists design and pattern best practices</li>
<li>Brief discussion of IoC and IoC containers</li>
<li>Brief discussion on automated testing and the TDD movement</li>
<li>Gives example of creating mock implementations for testing</li>
</ul>
<h4>Chapter 4</h4>
<ul>
<li>Goes into medium depth while building a project with unit testing, domain model, and web layer</li>
<li>uses LING to SQL for database interactions</li>
<li>Sets up IoC with Castle Windsor</li>
<li>Shows how to use Nunit and Moq to create unit tests</li>
<li>Good definition of TDD and how the author thinks of it as actually BDD (behaviour driven development)</li>
</ul>
<h4>Chapter 5</h4>
</div>
<div>
<ul>
<li>Examples of how to test every part of ASP.Net MVC</li>
<li>Shows example of how to only expose an interface in your controller to avoid tying the controller to your business logic implementation</li>
</ul>
<h4>Chapter 6</h4>
<ul>
<li>CRuD actions and views are added to the example project</li>
<li>Example of username/password authentication</li>
<li>Shows how to upload an image through a form field</li>
</ul>
<h4>Chapter 7</h4>
<ul>
<li>Detail of asp.net MVC project folder structure
<ul>
<li>Very well done, explains the what/why for each folder</li>
</ul>
</li>
<li>Goes over the naming convention which are  crucial since ASP.Net MVC follows CoC</li>
</ul>
<h4>Chapter 8</h4>
<ul>
<li>Everything you need to know about how url routing works and also how to create links in your application to your controllers/actions</li>
</ul>
<h4>Chapter 9</h4>
<ul>
<li>More details on what code belongs in a controller/action</li>
<li>More details on how the views are rendered</li>
<li>Example of how to use the [Authorize] filter attribute, which is a great way to easily secure your actions individually</li>
</ul>
<h4>Chapter 10</h4>
</div>
<div>
<ul>
<li>Details on how views work specifically how data is passed between layers and tools available to display that data.  Specifically the HTML helpers.</li>
</ul>
<h4>Chapter 11</h4>
<ul>
<li>Everything you need to know about how to modify and configure how data is retrieved from forms and urls and then binded to action parameters and model objects</li>
<li>Validation
<ul>
<li>Author basically suggest using plain c# in the model layer for validation.  doesn&#8217;t list the re-usability and &#8220;all ready done for YOu&#8221; benefits of using a validation utility.</li>
</ul>
</li>
</ul>
<h4>Chapter 12</h4>
<ul>
<li>Simple examples of how to use the AJAX HTML helpers which includes JQuery.</li>
</ul>
<h4>Chapter 13</h4>
<ul>
<li>Demonstrates basics of HTTP requests to help you understand how vulnerable web sites are.  Really good reading for less experienced web developers.
<ul>
<li>Gives example of how to fake an http request</li>
<li>Gives examples of using tools like firebug and fiddler</li>
<li>Details cross-site scripting and html injection</li>
<li>Details how one of the previous chapter examples had a vulnerability and how it can be fixed</li>
</ul>
</li>
</ul>
</div>
<p><a href="http://www.amazon.com/gp/product/1430210079?ie=UTF8&amp;tag=1410softwarec-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1430210079"><img width="55px" height="70px" src="http://img132.imageshack.us/img132/7254/51accymgtlsl110.jpg" border="0" alt="" /><br/><span style="font-size: 8pt;">Book on Amazon</span></a><br />
<h3>Related Posts</h3>
<ul class="related_post">
<li><a href="http://blog.codehangover.com/nhibernate-in-action-book-review/" title="NHibernate in Action &#8211; Book Review">NHibernate in Action &#8211; Book Review</a></li>
<li><a href="http://blog.codehangover.com/spring-patterns-best-practices-and-design-strategies-book-review/" title="Spring Patterns: Best Practices and Design Strategies Book Review">Spring Patterns: Best Practices and Design Strategies Book Review</a></li>
<li><a href="http://blog.codehangover.com/book-review-nhibernate-2-beginners-guide/" title="NHibernate 2 Beginner&#8217;s Guide &#8211; Book Review">NHibernate 2 Beginner&#8217;s Guide &#8211; Book Review</a></li>
</ul>
<script>var dzone_style="2";</script><script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fblog.codehangover.com%2Fasp-net-mvc-musings-and-book-review%2F&amp;linkname=ASP.Net%20MVC%20Book%20Review%20and%20musings"><img src="http://blog.codehangover.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://blog.codehangover.com/asp-net-mvc-musings-and-book-review/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

