<?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: Autumn of Agile Iteration 01 - Part C Screencast is now Available</title>
	<atom:link href="http://unhandled-exceptions.com/blog/index.php/2008/12/02/autumn-of-agile-iteration-01-part-c-screencast-is-now-available/feed/" rel="self" type="application/rss+xml" />
	<link>http://unhandled-exceptions.com/blog/index.php/2008/12/02/autumn-of-agile-iteration-01-part-c-screencast-is-now-available/</link>
	<description>Miscellaneous musings on life, .NET development, and related things that don't really matter</description>
	<pubDate>Thu, 17 May 2012 21:33:42 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: anna laser tandblekninng</title>
		<link>http://unhandled-exceptions.com/blog/index.php/2008/12/02/autumn-of-agile-iteration-01-part-c-screencast-is-now-available/comment-page-5/#comment-130170</link>
		<dc:creator>anna laser tandblekninng</dc:creator>
		<pubDate>Wed, 28 Mar 2012 14:38:03 +0000</pubDate>
		<guid isPermaLink="false">http://unhandled-exceptions.com/blog/index.php/2008/12/02/autumn-of-agile-iteration-01-part-c-screencast-is-now-available/#comment-130170</guid>
		<description>&lt;strong&gt;anna laser tandblekninng...&lt;/strong&gt;

[...]u We like the points that this web blog has.  Enjoy this wonderful sunday eve p2[...]...</description>
		<content:encoded><![CDATA[<p><strong>anna laser tandblekninng&#8230;</strong></p>
<p>[...]u We like the points that this web blog has.  Enjoy this wonderful sunday eve p2[...]&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ryan H</title>
		<link>http://unhandled-exceptions.com/blog/index.php/2008/12/02/autumn-of-agile-iteration-01-part-c-screencast-is-now-available/comment-page-1/#comment-21217</link>
		<dc:creator>Ryan H</dc:creator>
		<pubDate>Tue, 22 Sep 2009 22:00:27 +0000</pubDate>
		<guid isPermaLink="false">http://unhandled-exceptions.com/blog/index.php/2008/12/02/autumn-of-agile-iteration-01-part-c-screencast-is-now-available/#comment-21217</guid>
		<description>@Steve

My comment was intended to go under the Guid discussion post, but I must have not had enough coffee when I posted.  

Thanks for the reply, it makes perfect sense.  The only thing that I wonder is how else you would select something like a conference when the PK value is all that would provide you a sure unique value to select by?  For Employees I can see the client having their own HR unique key for each employee that you can use, 1) because the employee is likely to know their employee number and 2) doesn't expose the PK as you say.  But what about entities that are created only in the software?  I know you leveraged an Employee service to get the currently logged in user, but what about editing the details of a skill type?  Would you not expose the PK to the Edit Action in order to get back the values for the form?</description>
		<content:encoded><![CDATA[<p>@Steve</p>
<p>My comment was intended to go under the Guid discussion post, but I must have not had enough coffee when I posted.  </p>
<p>Thanks for the reply, it makes perfect sense.  The only thing that I wonder is how else you would select something like a conference when the PK value is all that would provide you a sure unique value to select by?  For Employees I can see the client having their own HR unique key for each employee that you can use, 1) because the employee is likely to know their employee number and 2) doesn&#8217;t expose the PK as you say.  But what about entities that are created only in the software?  I know you leveraged an Employee service to get the currently logged in user, but what about editing the details of a skill type?  Would you not expose the PK to the Edit Action in order to get back the values for the form?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: sbohlen</title>
		<link>http://unhandled-exceptions.com/blog/index.php/2008/12/02/autumn-of-agile-iteration-01-part-c-screencast-is-now-available/comment-page-1/#comment-20743</link>
		<dc:creator>sbohlen</dc:creator>
		<pubDate>Thu, 10 Sep 2009 14:58:38 +0000</pubDate>
		<guid isPermaLink="false">http://unhandled-exceptions.com/blog/index.php/2008/12/02/autumn-of-agile-iteration-01-part-c-screencast-is-now-available/#comment-20743</guid>
		<description>Ryan:

This is an interesting observation, but not one that has crossed my path largely because I consider exposing PK values to users to be a pretty big anti-pattern (e.g., one of the reasons that GUIDs are 'acceptable' to me as PK values is that I don't EVER want my users to see them under really any circumstances).  In the synthetic- vs. natural-PK database design debate, I come down pretty strongly on the synthetic side, meaning that PKs never have any semantic business meaning to me.

In a URL, if (as you quite correctly suggest) its often valuable to expose some business meaning-value, I would *still* permit the user to see Controller/Action/4 but in this case '4' would *never* be the PK of the thing I wanted to list but would instead be the 'customer number' or some other value with business meaning to my users.

IMO the canonical example of an exposed MVC URL of the form Controller/Action/id is a horrendously poor design decision to expose the PK of your records to the user of the system.  PKs are an implementation detail that shouldn't be exposed to users.  I don't mind seeing Controller/Action/4 at all as it can make the app easier to navigate, to link to, etc. but in this case '4' would never be the PK value.

I seem to recall from memory that in this series of screencasts, I *was* exposing the PK as part of the URL at the early-stage design of the app (largely b/c it made testing it simpler for the time being) but by the end of the development cycle, the URL would certainly be adapted such that the 'id' part of the routing definition wouldn't be the PK of the record in the DB.

Hope this makes sense and helps clarify my (eventual) intent with that approach.

-Steve B.</description>
		<content:encoded><![CDATA[<p>Ryan:</p>
<p>This is an interesting observation, but not one that has crossed my path largely because I consider exposing PK values to users to be a pretty big anti-pattern (e.g., one of the reasons that GUIDs are &#8216;acceptable&#8217; to me as PK values is that I don&#8217;t EVER want my users to see them under really any circumstances).  In the synthetic- vs. natural-PK database design debate, I come down pretty strongly on the synthetic side, meaning that PKs never have any semantic business meaning to me.</p>
<p>In a URL, if (as you quite correctly suggest) its often valuable to expose some business meaning-value, I would *still* permit the user to see Controller/Action/4 but in this case &#8216;4&#8242; would *never* be the PK of the thing I wanted to list but would instead be the &#8216;customer number&#8217; or some other value with business meaning to my users.</p>
<p>IMO the canonical example of an exposed MVC URL of the form Controller/Action/id is a horrendously poor design decision to expose the PK of your records to the user of the system.  PKs are an implementation detail that shouldn&#8217;t be exposed to users.  I don&#8217;t mind seeing Controller/Action/4 at all as it can make the app easier to navigate, to link to, etc. but in this case &#8216;4&#8242; would never be the PK value.</p>
<p>I seem to recall from memory that in this series of screencasts, I *was* exposing the PK as part of the URL at the early-stage design of the app (largely b/c it made testing it simpler for the time being) but by the end of the development cycle, the URL would certainly be adapted such that the &#8216;id&#8217; part of the routing definition wouldn&#8217;t be the PK of the record in the DB.</p>
<p>Hope this makes sense and helps clarify my (eventual) intent with that approach.</p>
<p>-Steve B.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ryan H</title>
		<link>http://unhandled-exceptions.com/blog/index.php/2008/12/02/autumn-of-agile-iteration-01-part-c-screencast-is-now-available/comment-page-1/#comment-20627</link>
		<dc:creator>Ryan H</dc:creator>
		<pubDate>Mon, 07 Sep 2009 23:34:11 +0000</pubDate>
		<guid isPermaLink="false">http://unhandled-exceptions.com/blog/index.php/2008/12/02/autumn-of-agile-iteration-01-part-c-screencast-is-now-available/#comment-20627</guid>
		<description>@Steve

One of the pieces to this conversation that might be more trivial, but relevant none the less, is the use of Guid's in the url.  You no longer have Controller/Action/4, but Controller/Action/44444444-4444-4444-44444444.  The logical URLs in the MVC pattern are one of the positives in my opinion and this complicates it.  Would be curious to hear your opinion on this.

Regards</description>
		<content:encoded><![CDATA[<p>@Steve</p>
<p>One of the pieces to this conversation that might be more trivial, but relevant none the less, is the use of Guid&#8217;s in the url.  You no longer have Controller/Action/4, but Controller/Action/44444444-4444-4444-44444444.  The logical URLs in the MVC pattern are one of the positives in my opinion and this complicates it.  Would be curious to hear your opinion on this.</p>
<p>Regards</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Richard</title>
		<link>http://unhandled-exceptions.com/blog/index.php/2008/12/02/autumn-of-agile-iteration-01-part-c-screencast-is-now-available/comment-page-1/#comment-17253</link>
		<dc:creator>Richard</dc:creator>
		<pubDate>Thu, 18 Jun 2009 18:40:17 +0000</pubDate>
		<guid isPermaLink="false">http://unhandled-exceptions.com/blog/index.php/2008/12/02/autumn-of-agile-iteration-01-part-c-screencast-is-now-available/#comment-17253</guid>
		<description>Hi Steve

Firstly, thanks for a great series on Agile so far - I'm looking forward to the rest!!

Its not directly related to your example application as I'm primarily focussed on Winforms appls, so I'm not sure if you're going to be able to help me, but I am hopeful that you can give me a couple of pointers.

My question is around using Rhino.Commons with a Winforms application.

I'm a little confused - mostly because I've looked at various posts on this and I can't find a clear answer.  

With WinForms I presume I still need to do the IoC initialization, but I'm not sure where to place this in my code.  Do I do this once i.e. in Program.cs or a base class, per form,etc??

I guess some of my problem is following a screencast designed for a different application architecture.  I'm also very new to NHibernate and have never used Rhino.Commons before.  Not to mention I'm looing at agile for the first time.

Well there you go.  Thanks again for the great series and I appreciate any advice you may be able to offer.</description>
		<content:encoded><![CDATA[<p>Hi Steve</p>
<p>Firstly, thanks for a great series on Agile so far - I&#8217;m looking forward to the rest!!</p>
<p>Its not directly related to your example application as I&#8217;m primarily focussed on Winforms appls, so I&#8217;m not sure if you&#8217;re going to be able to help me, but I am hopeful that you can give me a couple of pointers.</p>
<p>My question is around using Rhino.Commons with a Winforms application.</p>
<p>I&#8217;m a little confused - mostly because I&#8217;ve looked at various posts on this and I can&#8217;t find a clear answer.  </p>
<p>With WinForms I presume I still need to do the IoC initialization, but I&#8217;m not sure where to place this in my code.  Do I do this once i.e. in Program.cs or a base class, per form,etc??</p>
<p>I guess some of my problem is following a screencast designed for a different application architecture.  I&#8217;m also very new to NHibernate and have never used Rhino.Commons before.  Not to mention I&#8217;m looing at agile for the first time.</p>
<p>Well there you go.  Thanks again for the great series and I appreciate any advice you may be able to offer.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: mynkow</title>
		<link>http://unhandled-exceptions.com/blog/index.php/2008/12/02/autumn-of-agile-iteration-01-part-c-screencast-is-now-available/comment-page-1/#comment-6142</link>
		<dc:creator>mynkow</dc:creator>
		<pubDate>Thu, 11 Dec 2008 17:14:14 +0000</pubDate>
		<guid isPermaLink="false">http://unhandled-exceptions.com/blog/index.php/2008/12/02/autumn-of-agile-iteration-01-part-c-screencast-is-now-available/#comment-6142</guid>
		<description>@Steve

Hi again. I didn't watch the last screen cast. My notebook is broken ;(. I am not sure if you included the SEO part in the new video lesson. I want to add something and this is the multi-language support. So what do you think about the constructing URLs for different languages? May be a custom routing. I think it is important for SEO the multi-lang support to comes from the URL. Do you have experience about this? Can you talk about Multi-lang and SEO or post some static guide? 

Thank you.</description>
		<content:encoded><![CDATA[<p>@Steve</p>
<p>Hi again. I didn&#8217;t watch the last screen cast. My notebook is broken ;(. I am not sure if you included the SEO part in the new video lesson. I want to add something and this is the multi-language support. So what do you think about the constructing URLs for different languages? May be a custom routing. I think it is important for SEO the multi-lang support to comes from the URL. Do you have experience about this? Can you talk about Multi-lang and SEO or post some static guide? </p>
<p>Thank you.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: bydlo</title>
		<link>http://unhandled-exceptions.com/blog/index.php/2008/12/02/autumn-of-agile-iteration-01-part-c-screencast-is-now-available/comment-page-1/#comment-6028</link>
		<dc:creator>bydlo</dc:creator>
		<pubDate>Mon, 08 Dec 2008 01:35:06 +0000</pubDate>
		<guid isPermaLink="false">http://unhandled-exceptions.com/blog/index.php/2008/12/02/autumn-of-agile-iteration-01-part-c-screencast-is-now-available/#comment-6028</guid>
		<description>@sbohlen

Thanks for the clarification. I agree that it is VERY nice that Rhino allows you to choose how in your face the UoW is. 

Thinking further on this, I can see your point about why being as explicit as possible with Flush() is probably a good thing...and certainly there are times when you would want to flush the transaction before the end of the request.

(That said, I'm glad that you are planning on looking at this further as the series progresses. :D)</description>
		<content:encoded><![CDATA[<p>@sbohlen</p>
<p>Thanks for the clarification. I agree that it is VERY nice that Rhino allows you to choose how in your face the UoW is. </p>
<p>Thinking further on this, I can see your point about why being as explicit as possible with Flush() is probably a good thing&#8230;and certainly there are times when you would want to flush the transaction before the end of the request.</p>
<p>(That said, I&#8217;m glad that you are planning on looking at this further as the series progresses. :D)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: sbohlen</title>
		<link>http://unhandled-exceptions.com/blog/index.php/2008/12/02/autumn-of-agile-iteration-01-part-c-screencast-is-now-available/comment-page-1/#comment-6022</link>
		<dc:creator>sbohlen</dc:creator>
		<pubDate>Sun, 07 Dec 2008 21:38:06 +0000</pubDate>
		<guid isPermaLink="false">http://unhandled-exceptions.com/blog/index.php/2008/12/02/autumn-of-agile-iteration-01-part-c-screencast-is-now-available/#comment-6022</guid>
		<description>@bydlo:

You are indeed correct that there are several implementation patterns for the (Rhino)UnitOfWork and I have shown but one.  Rest assured that before the application is complete, we will have bumped into the need for several (if not all) of the others that you mentioned (including the With.Transaction(...)

In general, I prefer to be explicit about when I intend to flush my UoW within my controller methods rather than just letting the 'ambient' UoW handle it per-request.  This may put me at odds with most Rhino users, but I'm ok with that :D

I usually find that while at first glance it may seem that this is 'noise' in the body of the controller method as you suggest, I think that the UoW (at least in re: when its flushed, etc.) is more of a business concern rather than a persistence concern and so I don't 'mind' it appearing in my controller methods.  It also makes the code easier to follow for anyone reading through it and provides a simple extension-point in the code should there be a need to change the implementation to start a nested UoW rather than simply hook into the ambient HTTP-request parent UoW (e.g., the originally-intended 'scope' of the UoW is already delimited by the using(...) block).

As you say, there are actually many different ways to use the Rhino UoW abstraction (frankly that's one of its strengths IMHO) and which one you choose is *sometimes* largely a matter of personal taste.  For example others might look @ the controller methods and say "I would prefer that even the fact that there IS a UoW is abstracted away from me" and in this case you can simply use the ambient UoW without explicitly invoking it.

Hope this helps clarify a bit,

-Steve B.</description>
		<content:encoded><![CDATA[<p>@bydlo:</p>
<p>You are indeed correct that there are several implementation patterns for the (Rhino)UnitOfWork and I have shown but one.  Rest assured that before the application is complete, we will have bumped into the need for several (if not all) of the others that you mentioned (including the With.Transaction(&#8230;)</p>
<p>In general, I prefer to be explicit about when I intend to flush my UoW within my controller methods rather than just letting the &#8216;ambient&#8217; UoW handle it per-request.  This may put me at odds with most Rhino users, but I&#8217;m ok with that <img src='http://unhandled-exceptions.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>I usually find that while at first glance it may seem that this is &#8216;noise&#8217; in the body of the controller method as you suggest, I think that the UoW (at least in re: when its flushed, etc.) is more of a business concern rather than a persistence concern and so I don&#8217;t &#8216;mind&#8217; it appearing in my controller methods.  It also makes the code easier to follow for anyone reading through it and provides a simple extension-point in the code should there be a need to change the implementation to start a nested UoW rather than simply hook into the ambient HTTP-request parent UoW (e.g., the originally-intended &#8217;scope&#8217; of the UoW is already delimited by the using(&#8230;) block).</p>
<p>As you say, there are actually many different ways to use the Rhino UoW abstraction (frankly that&#8217;s one of its strengths IMHO) and which one you choose is *sometimes* largely a matter of personal taste.  For example others might look @ the controller methods and say &#8220;I would prefer that even the fact that there IS a UoW is abstracted away from me&#8221; and in this case you can simply use the ambient UoW without explicitly invoking it.</p>
<p>Hope this helps clarify a bit,</p>
<p>-Steve B.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: bydlo</title>
		<link>http://unhandled-exceptions.com/blog/index.php/2008/12/02/autumn-of-agile-iteration-01-part-c-screencast-is-now-available/comment-page-1/#comment-6011</link>
		<dc:creator>bydlo</dc:creator>
		<pubDate>Sun, 07 Dec 2008 15:45:21 +0000</pubDate>
		<guid isPermaLink="false">http://unhandled-exceptions.com/blog/index.php/2008/12/02/autumn-of-agile-iteration-01-part-c-screencast-is-now-available/#comment-6011</guid>
		<description>Steve, thanks again for the great content. Let me echo everyone else here in saying that the length of the screencasts is not a problem...its like a bonus ;)

I have a couple questions about how you are using the Unit of Work in your controllers. (EmployeeController line 88)

- Looking at the code for UnitOfWorkApplication, it seems like a UoW is started at the beginning of each request, and disposed at the end of the request. Given this, would you still recommend always explicitly calling UnitOfWork.Start() and Flush() within the controller methods? I can see that these explicit calls communicate intent, but for simple things they also seem to add a bit of 'noise' to the code.

- I noticed that Rhino provides a couple other ways to do things within a Unit of Work - the With.Transaction((() =&#62; //do stuff); syntax and also a facility for using [Transaction] in castle. Would you recommend using either of these as alternatives to explicit calls to UnitOfWork?

Thanks again,
Ben</description>
		<content:encoded><![CDATA[<p>Steve, thanks again for the great content. Let me echo everyone else here in saying that the length of the screencasts is not a problem&#8230;its like a bonus <img src='http://unhandled-exceptions.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>I have a couple questions about how you are using the Unit of Work in your controllers. (EmployeeController line 88)</p>
<p>- Looking at the code for UnitOfWorkApplication, it seems like a UoW is started at the beginning of each request, and disposed at the end of the request. Given this, would you still recommend always explicitly calling UnitOfWork.Start() and Flush() within the controller methods? I can see that these explicit calls communicate intent, but for simple things they also seem to add a bit of &#8216;noise&#8217; to the code.</p>
<p>- I noticed that Rhino provides a couple other ways to do things within a Unit of Work - the With.Transaction((() =&gt; //do stuff); syntax and also a facility for using [Transaction] in castle. Would you recommend using either of these as alternatives to explicit calls to UnitOfWork?</p>
<p>Thanks again,<br />
Ben</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: mynkow</title>
		<link>http://unhandled-exceptions.com/blog/index.php/2008/12/02/autumn-of-agile-iteration-01-part-c-screencast-is-now-available/comment-page-1/#comment-5979</link>
		<dc:creator>mynkow</dc:creator>
		<pubDate>Sat, 06 Dec 2008 14:56:38 +0000</pubDate>
		<guid isPermaLink="false">http://unhandled-exceptions.com/blog/index.php/2008/12/02/autumn-of-agile-iteration-01-part-c-screencast-is-now-available/#comment-5979</guid>
		<description>@steve

Thank you.</description>
		<content:encoded><![CDATA[<p>@steve</p>
<p>Thank you.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

