<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="2.0">
  <channel>
    <title>jon torresdal - Comments</title>
    <link>http://blog.torresdal.net/</link>
    <description />
    <copyright>Jon Arild Tørresdal</copyright>
    <lastBuildDate>Wed, 17 Feb 2010 19:35:02 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>blog@torresdal.net</managingEditor>
    <webMaster>blog@torresdal.net</webMaster>
    <item>
      <author>suppressed@unknown.org (Jon Arild T&amp;#248;rresdal)</author>
      <title>Comment by Jon Arild T&amp;#248;rresdal on "Start Using More Value Objects!"</title>
      <guid isPermaLink="false">becbfcb6-8b39-4788-b39b-5ee5ffdaf015</guid>
      <link>http://blog.torresdal.net/CommentView,guid,DAE65808-C259-41D2-AEAA-14B78D60A94D.aspx#becbfcb6-8b39-4788-b39b-5ee5ffdaf015</link>
      <pubDate>Wed, 17 Feb 2010 19:35:02 GMT</pubDate>
      <description>Hi Herman,

I absolutely agree. In the domain model we've created we don't use interfaces for entities and value object, unless there is a really good reason for it. It's defiantly not by default, so very good point.&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://blog.torresdal.net"&gt;Jon Arild T&amp;#248;rresdal&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,DAE65808-C259-41D2-AEAA-14B78D60A94D.aspx#becbfcb6-8b39-4788-b39b-5ee5ffdaf015</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Herman Chan)</author>
      <title>Comment by Herman Chan on "Start Using More Value Objects!"</title>
      <guid isPermaLink="false">451ce520-c1df-4a10-b53c-96e08953fa36</guid>
      <link>http://blog.torresdal.net/CommentView,guid,DAE65808-C259-41D2-AEAA-14B78D60A94D.aspx#451ce520-c1df-4a10-b53c-96e08953fa36</link>
      <pubDate>Wed, 17 Feb 2010 18:02:31 GMT</pubDate>
      <description>Hi Jon,


Just stumbled upon this link from a co-worker's email. Good introductory articles on value object. Just wanted to noted that having a interface for every single domain object is consider a anti-pattern for many.

http://www.lostechies.com/blogs/jagregory/archive/2009/05/09/entity-interface-anti-pattern.aspx

&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://www.bugwriter.me"&gt;Herman Chan&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,DAE65808-C259-41D2-AEAA-14B78D60A94D.aspx#451ce520-c1df-4a10-b53c-96e08953fa36</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (JustinB)</author>
      <title>Comment by JustinB on "3 Monitor Setup With Two Computers And One Keyboard"</title>
      <guid isPermaLink="false">91ce85fc-3f79-4097-b27a-cd9ddd36a683</guid>
      <link>http://blog.torresdal.net/CommentView,guid,40F6C89A-E4A5-4FA0-A304-744C4864B9CC.aspx#91ce85fc-3f79-4097-b27a-cd9ddd36a683</link>
      <pubDate>Tue, 09 Feb 2010 21:46:51 GMT</pubDate>
      <description>I was a devoted Synergy user for quite some time, but I found a piece of software that blows it out of the water: MaxiVista.

MaxiVista can, at a minimum, do exactly what synergy does. Where it veers into &amp;quot;holy crap&amp;quot; territory is its ability to actually extend your current machine's desktop onto another machine, using VNC and some driver-level trickery to make it happen. Essentially it creates a &amp;quot;soft&amp;quot; monitor and then displays the contents on a remote machine. 

With a flip of a switch on the system tray icon, the extended desktop is hidden, and your main computer has synergy-style control of the remote system. Pretty amazing stuff :)

The cheapo $40 version can handle one external monitor and doesn't support synergy-style remote control. The $50 version supports up to three external monitors (even if some are already in multi-monitor setup on their host computer). The $99 version adds &amp;quot;desktop mirroring and &amp;quot;maximized display performance&amp;quot;, which seems superfluous to me, since it's already fast enough that I can play video content on the remote monitor. Smart money's on the $50 version, of course.

There are two notable downsides compared to synergy:
1. You lose Aero Glass while the external monitor is connected. A fair trade-off, IMO.
2. MaxiVista is Windows Only. One of the best things about synergy is that you can control a mac, linux, and windows machine from the same console. I use MaxiVista at work (a Microsoft shop), so it's not a big deal for me. Still, I'd love to see them develop a remote client for Mac/Linux.

http://www.maxivista.com
&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://bleh.com"&gt;JustinB&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,40F6C89A-E4A5-4FA0-A304-744C4864B9CC.aspx#91ce85fc-3f79-4097-b27a-cd9ddd36a683</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Jon Arild T&amp;#248;rresdal)</author>
      <title>Comment by Jon Arild T&amp;#248;rresdal on "3 Monitor Setup With Two Computers And One Keyboard"</title>
      <guid isPermaLink="false">19940328-8732-401a-8e40-c9d04aeed154</guid>
      <link>http://blog.torresdal.net/CommentView,guid,40F6C89A-E4A5-4FA0-A304-744C4864B9CC.aspx#19940328-8732-401a-8e40-c9d04aeed154</link>
      <pubDate>Thu, 28 Jan 2010 19:53:15 GMT</pubDate>
      <description>Lomox: Input Director looks good. I'll check it out.&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://blog.torresdal.net"&gt;Jon Arild T&amp;#248;rresdal&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,40F6C89A-E4A5-4FA0-A304-744C4864B9CC.aspx#19940328-8732-401a-8e40-c9d04aeed154</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (lomox)</author>
      <title>Comment by lomox on "3 Monitor Setup With Two Computers And One Keyboard"</title>
      <guid isPermaLink="false">fc6133d0-c0d8-4604-9711-7777e0d9e0cc</guid>
      <link>http://blog.torresdal.net/CommentView,guid,40F6C89A-E4A5-4FA0-A304-744C4864B9CC.aspx#fc6133d0-c0d8-4604-9711-7777e0d9e0cc</link>
      <pubDate>Thu, 28 Jan 2010 05:41:40 GMT</pubDate>
      <description>There is also a software called Input Director&lt;br /&gt;&lt;br /&gt;Posted by: lomox</description>
      <comments>http://blog.torresdal.net/CommentView,guid,40F6C89A-E4A5-4FA0-A304-744C4864B9CC.aspx#fc6133d0-c0d8-4604-9711-7777e0d9e0cc</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Jon Arild T&amp;#248;rresdal)</author>
      <title>Comment by Jon Arild T&amp;#248;rresdal on "ASP.NET MVC in Action"</title>
      <guid isPermaLink="false">8c9ad095-4492-4d11-99da-1a6374d327e9</guid>
      <link>http://blog.torresdal.net/CommentView,guid,930686EA-3511-469E-86D3-9520C491B321.aspx#8c9ad095-4492-4d11-99da-1a6374d327e9</link>
      <pubDate>Fri, 01 Jan 2010 12:32:58 GMT</pubDate>
      <description>Thanks Torbj&amp;#248;rn.&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://jon.torresdal.net"&gt;Jon Arild T&amp;#248;rresdal&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,930686EA-3511-469E-86D3-9520C491B321.aspx#8c9ad095-4492-4d11-99da-1a6374d327e9</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Torbj&amp;#248;rn Mar&amp;#248;)</author>
      <title>Comment by Torbj&amp;#248;rn Mar&amp;#248; on "ASP.NET MVC in Action"</title>
      <guid isPermaLink="false">7879233d-ccb0-4659-b618-7f7f54460b56</guid>
      <link>http://blog.torresdal.net/CommentView,guid,930686EA-3511-469E-86D3-9520C491B321.aspx#7879233d-ccb0-4659-b618-7f7f54460b56</link>
      <pubDate>Thu, 10 Dec 2009 06:26:14 GMT</pubDate>
      <description>Great interview, Jon - some excellent questions, and obviously some good answers. It was interesting to see what they had to say about Rails as well, since that's what I'm exploring right now. &lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://blog.kjempekjekt.com"&gt;Torbj&amp;#248;rn Mar&amp;#248;&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,930686EA-3511-469E-86D3-9520C491B321.aspx#7879233d-ccb0-4659-b618-7f7f54460b56</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Khoa Do)</author>
      <title>Comment by Khoa Do on "WiX and DTF: Using a Custom Action to list available web sites on IIS"</title>
      <guid isPermaLink="false">ff62153c-8571-4232-9e28-ef9e102297f5</guid>
      <link>http://blog.torresdal.net/CommentView,guid,FE27427F-FF4F-4056-BC50-C98E23227C6D.aspx#ff62153c-8571-4232-9e28-ef9e102297f5</link>
      <pubDate>Wed, 02 Dec 2009 13:09:39 GMT</pubDate>
      <description>Regarding the Custom Action Project - Just To Be Super Clear...

The custom action project that you should add should not be just any old project.  It needs to be a Project types = &amp;quot;WiX&amp;quot;, Visual Studio installed templates = &amp;quot;C# Custom Action Project&amp;quot;.  Not realizing this, I almost mentally crashed trying to figure out how you got MakeSfxCA to run itself automagically.&lt;br /&gt;&lt;br /&gt;Posted by: Khoa Do</description>
      <comments>http://blog.torresdal.net/CommentView,guid,FE27427F-FF4F-4056-BC50-C98E23227C6D.aspx#ff62153c-8571-4232-9e28-ef9e102297f5</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Jon Arild T&amp;#248;rresdal)</author>
      <title>Comment by Jon Arild T&amp;#248;rresdal on "WiX and DTF: Debug a Managed Custom Action and how to generate an MSI log"</title>
      <guid isPermaLink="false">bd8cc1ba-0e4d-466f-9162-0dda3201932c</guid>
      <link>http://blog.torresdal.net/CommentView,guid,BFEBE347-AD82-4C76-A96E-1C22AA39EFC9.aspx#bd8cc1ba-0e4d-466f-9162-0dda3201932c</link>
      <pubDate>Tue, 20 Oct 2009 18:36:45 GMT</pubDate>
      <description>Ralf,

&lt;blockquote&gt;
  [CustomAction]
  public static ActionResult SomeCustomAction(Session session)
  {
  session.Log(&amp;quot;Some log message&amp;quot;);
  }
&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://blog.torresdal.net"&gt;Jon Arild T&amp;#248;rresdal&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,BFEBE347-AD82-4C76-A96E-1C22AA39EFC9.aspx#bd8cc1ba-0e4d-466f-9162-0dda3201932c</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Ralf)</author>
      <title>Comment by Ralf on "WiX and DTF: Debug a Managed Custom Action and how to generate an MSI log"</title>
      <guid isPermaLink="false">9c0ef514-78ef-4932-9342-3850b55ec0a9</guid>
      <link>http://blog.torresdal.net/CommentView,guid,BFEBE347-AD82-4C76-A96E-1C22AA39EFC9.aspx#9c0ef514-78ef-4932-9342-3850b55ec0a9</link>
      <pubDate>Tue, 20 Oct 2009 12:44:54 GMT</pubDate>
      <description>speaking of the log file and managed customactions.
You do not happen to know how to log from a managed CustomAction?&lt;br /&gt;&lt;br /&gt;Posted by: Ralf</description>
      <comments>http://blog.torresdal.net/CommentView,guid,BFEBE347-AD82-4C76-A96E-1C22AA39EFC9.aspx#9c0ef514-78ef-4932-9342-3850b55ec0a9</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Scott)</author>
      <title>Comment by Scott on "WiX and DTF: Debug a Managed Custom Action and how to generate an MSI log"</title>
      <guid isPermaLink="false">a69f2fba-9394-4d3f-ace5-bf5aaa2ccba3</guid>
      <link>http://blog.torresdal.net/CommentView,guid,BFEBE347-AD82-4C76-A96E-1C22AA39EFC9.aspx#a69f2fba-9394-4d3f-ace5-bf5aaa2ccba3</link>
      <pubDate>Fri, 16 Oct 2009 16:56:30 GMT</pubDate>
      <description>The only way to get the breakpoint to hit, besides everything mentioned here, was to include the debug version of the custom action DLL in, my case, Installshield.

Breakpoints didn't seem to work with &amp;quot;Release&amp;quot; custom action DLL versions.&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://www.smartsignal.com"&gt;Scott&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,BFEBE347-AD82-4C76-A96E-1C22AA39EFC9.aspx#a69f2fba-9394-4d3f-ace5-bf5aaa2ccba3</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (ChrisC)</author>
      <title>Comment by ChrisC on "WiX and DTF: Using a Custom Action to list available web sites on IIS"</title>
      <guid isPermaLink="false">993c51b0-ec3f-4a31-9e98-2502360aa962</guid>
      <link>http://blog.torresdal.net/CommentView,guid,FE27427F-FF4F-4056-BC50-C98E23227C6D.aspx#993c51b0-ec3f-4a31-9e98-2502360aa962</link>
      <pubDate>Fri, 16 Oct 2009 10:41:53 GMT</pubDate>
      <description>Very good article, my need was just to avoid conflicting bindings for a deferred CA website setup...

One comment above is regarding the enumeration in a UAC secured (eg W2k8) environment. This seems indeed to be a problem as immediate CAs run in (restricted) user context rather than as SYSTEM. 

Even using passing usr,pwd into the DirectoryEntry does not help. Doesn't seem to be any way round this short of running the whole installer (using manifest) as admin, unless anyone knows better??? &lt;br /&gt;&lt;br /&gt;Posted by: ChrisC</description>
      <comments>http://blog.torresdal.net/CommentView,guid,FE27427F-FF4F-4056-BC50-C98E23227C6D.aspx#993c51b0-ec3f-4a31-9e98-2502360aa962</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Dave)</author>
      <title>Comment by Dave on "WiX and DTF: Using a Custom Action to list available web sites on IIS"</title>
      <guid isPermaLink="false">17f92f22-bc33-48f5-8750-6be40d3253cd</guid>
      <link>http://blog.torresdal.net/CommentView,guid,FE27427F-FF4F-4056-BC50-C98E23227C6D.aspx#17f92f22-bc33-48f5-8750-6be40d3253cd</link>
      <pubDate>Sun, 11 Oct 2009 05:36:34 GMT</pubDate>
      <description>OK, upon further inspection I see there is a special project for a wix custom action that adds a wix target to the build. I added this and now build the special dll wrapped around my assembly. THanks, Dave&lt;br /&gt;&lt;br /&gt;Posted by: Dave</description>
      <comments>http://blog.torresdal.net/CommentView,guid,FE27427F-FF4F-4056-BC50-C98E23227C6D.aspx#17f92f22-bc33-48f5-8750-6be40d3253cd</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Dave)</author>
      <title>Comment by Dave on "WiX and DTF: Using a Custom Action to list available web sites on IIS"</title>
      <guid isPermaLink="false">e8d417b4-118b-4e93-a1e7-63c3a5d107dc</guid>
      <link>http://blog.torresdal.net/CommentView,guid,FE27427F-FF4F-4056-BC50-C98E23227C6D.aspx#e8d417b4-118b-4e93-a1e7-63c3a5d107dc</link>
      <pubDate>Sun, 11 Oct 2009 05:16:18 GMT</pubDate>
      <description>I don't see how MakeSfxCA runs automagically in VS2008. Chris Painter even talks about adding a post build step. If there is a way to have this run automatically I would like to know what it is. Thanks, Dave&lt;br /&gt;&lt;br /&gt;Posted by: Dave</description>
      <comments>http://blog.torresdal.net/CommentView,guid,FE27427F-FF4F-4056-BC50-C98E23227C6D.aspx#e8d417b4-118b-4e93-a1e7-63c3a5d107dc</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Sathish)</author>
      <title>Comment by Sathish on "WiX and DTF: Using WiX to author MSI installations"</title>
      <guid isPermaLink="false">0ad85c7c-51af-4372-b6a4-dc56f4fac722</guid>
      <link>http://blog.torresdal.net/CommentView,guid,28C6E6E5-DAEE-4742-AE9C-3F58440FB10E.aspx#0ad85c7c-51af-4372-b6a4-dc56f4fac722</link>
      <pubDate>Fri, 04 Sep 2009 11:56:55 GMT</pubDate>
      <description>Hi Jaspreet,

Can u say where do u put all the UI part dialogs..
Through which path does WIXUI_INSTALLDIR refer to other dialogs..?

Please help me out of this. Refer the previous post of mine to see my files location.

Thanks,
Sathish&lt;br /&gt;&lt;br /&gt;Posted by: Sathish</description>
      <comments>http://blog.torresdal.net/CommentView,guid,28C6E6E5-DAEE-4742-AE9C-3F58440FB10E.aspx#0ad85c7c-51af-4372-b6a4-dc56f4fac722</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Jaspreet Singh)</author>
      <title>Comment by Jaspreet Singh on "WiX and DTF: Using WiX to author MSI installations"</title>
      <guid isPermaLink="false">bcc7e757-69a7-43a5-9437-7ea1dfcb4e11</guid>
      <link>http://blog.torresdal.net/CommentView,guid,28C6E6E5-DAEE-4742-AE9C-3F58440FB10E.aspx#bcc7e757-69a7-43a5-9437-7ea1dfcb4e11</link>
      <pubDate>Thu, 03 Sep 2009 11:36:48 GMT</pubDate>
      <description>Hi Jon, Thanks for the wornderful article. I was googling for the last two days for a good article. Now it comes to an end. 

I have tried Wix by refering your article. Everything goes fine except : 

1) Updation of app.config file. When I run installer it says &amp;quot;Failed to open XML file system error-2147024786&amp;quot;

2) Virtual directories are created sucessfully under default web site, but when I try to uninstall the package, it is deleting Default Web Site as well with virtual directories ! This in turns delete all other virtual directories which are not the part of installer. 

Please let me know how can I get rid of these problems.

Thanks
Jaspreet&lt;br /&gt;&lt;br /&gt;Posted by: Jaspreet Singh</description>
      <comments>http://blog.torresdal.net/CommentView,guid,28C6E6E5-DAEE-4742-AE9C-3F58440FB10E.aspx#bcc7e757-69a7-43a5-9437-7ea1dfcb4e11</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Jaspreet Singh)</author>
      <title>Comment by Jaspreet Singh on "WiX and DTF: Debug a Managed Custom Action and how to generate an MSI log"</title>
      <guid isPermaLink="false">80876abb-117b-4e34-a11f-c61c445c5790</guid>
      <link>http://blog.torresdal.net/CommentView,guid,BFEBE347-AD82-4C76-A96E-1C22AA39EFC9.aspx#80876abb-117b-4e34-a11f-c61c445c5790</link>
      <pubDate>Thu, 03 Sep 2009 10:43:51 GMT</pubDate>
      <description>Thanks a ton ...Its really a good example&lt;br /&gt;&lt;br /&gt;Posted by: Jaspreet Singh</description>
      <comments>http://blog.torresdal.net/CommentView,guid,BFEBE347-AD82-4C76-A96E-1C22AA39EFC9.aspx#80876abb-117b-4e34-a11f-c61c445c5790</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Sathish)</author>
      <title>Comment by Sathish on "WiX and DTF: Using WiX to author MSI installations"</title>
      <guid isPermaLink="false">aed6600f-2738-47e7-b121-87857885947f</guid>
      <link>http://blog.torresdal.net/CommentView,guid,28C6E6E5-DAEE-4742-AE9C-3F58440FB10E.aspx#aed6600f-2738-47e7-b121-87857885947f</link>
      <pubDate>Fri, 28 Aug 2009 13:45:29 GMT</pubDate>
      <description>Hi Jon,

I have installed wix in this location,
C:\Program Files\Windows Installer XML v3

And i extracted the binaries which i downloaded in this location,
C:\WIX
Then various dialogs will be in this location,
C:\WIX\src\ext\UIExtension\wixlib
Hope u know this.

Then i refered the WixUIExtension.DLL from the location,
C:\Program Files\Windows Installer XML v3\bin

Is anything wrong with these things or have to change..?
Please report for this too.Thanks in advance.

Regards,
Sathish&lt;br /&gt;&lt;br /&gt;Posted by: Sathish</description>
      <comments>http://blog.torresdal.net/CommentView,guid,28C6E6E5-DAEE-4742-AE9C-3F58440FB10E.aspx#aed6600f-2738-47e7-b121-87857885947f</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Sathish)</author>
      <title>Comment by Sathish on "WiX and DTF: Using WiX to author MSI installations"</title>
      <guid isPermaLink="false">1bc71d78-2b61-41e1-9bb3-1f2b46885699</guid>
      <link>http://blog.torresdal.net/CommentView,guid,28C6E6E5-DAEE-4742-AE9C-3F58440FB10E.aspx#1bc71d78-2b61-41e1-9bb3-1f2b46885699</link>
      <pubDate>Fri, 28 Aug 2009 13:35:51 GMT</pubDate>
      <description>Hi Jon,

I did my first wix project by following ur steps.In my project i included licence agreement too. 
But after creating the .msi file, i tried to install it.Afetr the licence agreement window it doesn't move to &amp;quot;InstallDirDlg&amp;quot;.
It throws an error like this, 
&amp;quot;The installer has encountered an unexpected error installing this package.This may indicate a problem with this package.The Error code is 2819&amp;quot;
I dont know what this meant to.
Please say wats it........wat to do for overcoming it.


Then how do our product.wxs file in project refer to other dialogs(welcomedlg,licenceagreementDlg)through wixui_installDir.
Where do we put those dialogs...?

Regards,
Sathish&lt;br /&gt;&lt;br /&gt;Posted by: Sathish</description>
      <comments>http://blog.torresdal.net/CommentView,guid,28C6E6E5-DAEE-4742-AE9C-3F58440FB10E.aspx#1bc71d78-2b61-41e1-9bb3-1f2b46885699</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Jon Arild T&amp;#248;rresdal)</author>
      <title>Comment by Jon Arild T&amp;#248;rresdal on "Are SharePoint Developers Unable To Be Real Craftsmen?"</title>
      <guid isPermaLink="false">636c32d2-0d61-4987-8023-8846cde06b3c</guid>
      <link>http://blog.torresdal.net/CommentView,guid,6EB830B7-E4A4-44FC-BE7B-331665FD8FA4.aspx#636c32d2-0d61-4987-8023-8846cde06b3c</link>
      <pubDate>Mon, 24 Aug 2009 21:22:20 GMT</pubDate>
      <description>Einar,

Let me know how that works out for you. Would be interesting. Also, maybe an interesting talk for NNUG? Clean code in SharePoint?&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://blog.torresdal.net"&gt;Jon Arild T&amp;#248;rresdal&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,6EB830B7-E4A4-44FC-BE7B-331665FD8FA4.aspx#636c32d2-0d61-4987-8023-8846cde06b3c</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Einar Ingebrigtsen)</author>
      <title>Comment by Einar Ingebrigtsen on "Are SharePoint Developers Unable To Be Real Craftsmen?"</title>
      <guid isPermaLink="false">4d60ebe4-cc55-4f38-8677-1856122c55cb</guid>
      <link>http://blog.torresdal.net/CommentView,guid,6EB830B7-E4A4-44FC-BE7B-331665FD8FA4.aspx#4d60ebe4-cc55-4f38-8677-1856122c55cb</link>
      <pubDate>Mon, 24 Aug 2009 06:22:24 GMT</pubDate>
      <description>Great post and point. 

This topic is something that worries me a lot these days. I'm most likely scheduled to start on a SharePoint project for the first time, and really need to figure out how I can still be a craftsman in that area. Typemock seems to be the only real alternative, I'd love to see Microsoft include something like that and create some guidelines and best practices around it for their next release of SharePoint. &lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://www.ingebrigtsen.info"&gt;Einar Ingebrigtsen&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,6EB830B7-E4A4-44FC-BE7B-331665FD8FA4.aspx#4d60ebe4-cc55-4f38-8677-1856122c55cb</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Jon Arild T&amp;#248;rresdal)</author>
      <title>Comment by Jon Arild T&amp;#248;rresdal on "Are SharePoint Developers Unable To Be Real Craftsmen?"</title>
      <guid isPermaLink="false">ad5c3c95-b32f-463f-8f2b-56206089da40</guid>
      <link>http://blog.torresdal.net/CommentView,guid,6EB830B7-E4A4-44FC-BE7B-331665FD8FA4.aspx#ad5c3c95-b32f-463f-8f2b-56206089da40</link>
      <pubDate>Sat, 22 Aug 2009 23:06:03 GMT</pubDate>
      <description>Andrew,

I hear you. I can't disagree cause as I said I don't develop in/for SharePoint. However, I would like to see a better SharePoint solution in the future where one (end user solution) does not exclude the other (developer friendly platform).

My main reason for this is that SharePoint developers working in .NET (especially new devs) will adapt practices which is not accepted on other projects.&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://blog.torresdal.net"&gt;Jon Arild T&amp;#248;rresdal&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,6EB830B7-E4A4-44FC-BE7B-331665FD8FA4.aspx#ad5c3c95-b32f-463f-8f2b-56206089da40</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Andrew Woodward)</author>
      <title>Comment by Andrew Woodward on "Are SharePoint Developers Unable To Be Real Craftsmen?"</title>
      <guid isPermaLink="false">74cd88b4-67cc-4a96-b085-69867f52e207</guid>
      <link>http://blog.torresdal.net/CommentView,guid,6EB830B7-E4A4-44FC-BE7B-331665FD8FA4.aspx#74cd88b4-67cc-4a96-b085-69867f52e207</link>
      <pubDate>Sat, 22 Aug 2009 22:54:43 GMT</pubDate>
      <description>Jon,  its refreshing such a change to hear people talking about software craftmanship.

I agree SharePoint as a enterprise application platform is not ideal,  tools like Typemock aid with this (they cost, but so does SharePoint).  I think being a software craftsman you aim to have to tools, design practices and thought process in place to deal with often difficult (nee wicked) problems.

SharePoint is not unique here, and you do ask the right question.  The aim of any developer is to add value to the business,  if the platform achieves much of this then the extra effort in doing SharePoint development right definately is worth it.

IMHO

Andrew&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://www.21apps.com"&gt;Andrew Woodward&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,6EB830B7-E4A4-44FC-BE7B-331665FD8FA4.aspx#74cd88b4-67cc-4a96-b085-69867f52e207</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Blair Murri)</author>
      <title>Comment by Blair Murri on "WiX and DTF: Using a Custom Action to list available web sites on IIS"</title>
      <guid isPermaLink="false">2892d60f-9918-4ab9-95ff-6461771d60ad</guid>
      <link>http://blog.torresdal.net/CommentView,guid,FE27427F-FF4F-4056-BC50-C98E23227C6D.aspx#2892d60f-9918-4ab9-95ff-6461771d60ad</link>
      <pubDate>Mon, 17 Aug 2009 22:52:56 GMT</pubDate>
      <description>Regarding your &amp;quot;bogus&amp;quot; row in your AvailableWebSites custom table, you don't need that. Remove the &amp;lt;Row&amp;gt; (and &amp;lt;Data&amp;gt;) elements, and after the &amp;lt;CustomTable&amp;gt; row add this:

&amp;lt;EnsureTable Id=&amp;quot;AvailableWebSites&amp;quot;&amp;gt;
&lt;br /&gt;&lt;br /&gt;Posted by: Blair Murri</description>
      <comments>http://blog.torresdal.net/CommentView,guid,FE27427F-FF4F-4056-BC50-C98E23227C6D.aspx#2892d60f-9918-4ab9-95ff-6461771d60ad</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Jon Arild T&amp;#248;rresdal)</author>
      <title>Comment by Jon Arild T&amp;#248;rresdal on "Refactoring TryParse Into a Value Object"</title>
      <guid isPermaLink="false">d7b2f3f3-7474-4398-ba2f-79d48542ac08</guid>
      <link>http://blog.torresdal.net/CommentView,guid,C6B90404-B253-4663-98DC-89033E90D27D.aspx#d7b2f3f3-7474-4398-ba2f-79d48542ac08</link>
      <pubDate>Fri, 14 Aug 2009 07:50:30 GMT</pubDate>
      <description>Paul,

Yes! That's what happens when you code i Live Writer :-) Thanks for letting me know. I've fixed it.&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://blog.torresdal.net"&gt;Jon Arild T&amp;#248;rresdal&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,C6B90404-B253-4663-98DC-89033E90D27D.aspx#d7b2f3f3-7474-4398-ba2f-79d48542ac08</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Paul)</author>
      <title>Comment by Paul on "Refactoring TryParse Into a Value Object"</title>
      <guid isPermaLink="false">bdeff60f-dbbb-4447-8f8c-2735cdaca0aa</guid>
      <link>http://blog.torresdal.net/CommentView,guid,C6B90404-B253-4663-98DC-89033E90D27D.aspx#bdeff60f-dbbb-4447-8f8c-2735cdaca0aa</link>
      <pubDate>Fri, 14 Aug 2009 07:35:53 GMT</pubDate>
      <description>
typo?

public &lt;strike&gt;void&lt;/strike&gt; Amount(string amount)
    {
      _isValid = decimal.TryParse(amount, out _value);
    }&lt;br /&gt;&lt;br /&gt;Posted by: Paul</description>
      <comments>http://blog.torresdal.net/CommentView,guid,C6B90404-B253-4663-98DC-89033E90D27D.aspx#bdeff60f-dbbb-4447-8f8c-2735cdaca0aa</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Paul)</author>
      <title>Comment by Paul on "Refactoring TryParse Into a Value Object"</title>
      <guid isPermaLink="false">2fc68602-53d1-475c-b3d3-1b433501e3ae</guid>
      <link>http://blog.torresdal.net/CommentView,guid,C6B90404-B253-4663-98DC-89033E90D27D.aspx#2fc68602-53d1-475c-b3d3-1b433501e3ae</link>
      <pubDate>Fri, 14 Aug 2009 07:07:58 GMT</pubDate>
      <description>Nice work Jon! This must be the most elegant solution I have seen so far!&lt;br /&gt;&lt;br /&gt;Posted by: Paul</description>
      <comments>http://blog.torresdal.net/CommentView,guid,C6B90404-B253-4663-98DC-89033E90D27D.aspx#2fc68602-53d1-475c-b3d3-1b433501e3ae</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Eric Smith)</author>
      <title>Comment by Eric Smith on "Replace Comments With Code"</title>
      <guid isPermaLink="false">2c3f2c74-b102-10bb-8da3-181bfb0ae9dc</guid>
      <link>http://blog.torresdal.net/CommentView,guid,B2C34507-244A-424B-BC2A-D886201A4502.aspx#2c3f2c74-b102-10bb-8da3-181bfb0ae9dc</link>
      <pubDate>Thu, 06 Aug 2009 18:07:18 GMT</pubDate>
      <description>Comments in code are simply a path into the land of &lt;a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself"&gt;DRY&lt;/a&gt;-Violation.  They should be used &lt;em&gt;where appropriate&lt;/em&gt; and where it isn't possible to express the intent clearly through code.  I agree with Jon's argument wholeheartedly--expend effort on writing clean, intelligable code long before writing comments that may just be an excuse for "refactoring laziness".&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://thelimberlambda.com/"&gt;Eric Smith&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,B2C34507-244A-424B-BC2A-D886201A4502.aspx#2c3f2c74-b102-10bb-8da3-181bfb0ae9dc</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Jon Arild T&amp;#248;rresdal)</author>
      <title>Comment by Jon Arild T&amp;#248;rresdal on "Replace Comments With Code"</title>
      <guid isPermaLink="false">2c3f2c74-b102-40ba-8da3-181bfb0ae9df</guid>
      <link>http://blog.torresdal.net/CommentView,guid,B2C34507-244A-424B-BC2A-D886201A4502.aspx#2c3f2c74-b102-40ba-8da3-181bfb0ae9df</link>
      <pubDate>Thu, 06 Aug 2009 05:32:18 GMT</pubDate>
      <description>Thanks for all your feedback guys! 

I'm not saying never use comments. I'm saying replace them with code where possible. Jason's example with complex algorithms I completely support, thought I also suggest looking into how to simplify this code. Sometimes complex code remains complex because the problem being solved IS complex.

My main point is to not litter your code with comments, because they'll be in your way. Use comments where needed and focus on naming variables, methods and classes properly to avoid unnecessary comments.

Gareth have a point in regards to intellisense, which is nice sometimes. Though I've noticed I'm looking for intellisense when the name of that property, class or method don't communicate its intent properly. Naming is hard. Use this type of comments when you're just unable to name things better, but don't avoid focusing on naming just because you can add its intent in comments.&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://blog.torresdal.net"&gt;Jon Arild T&amp;#248;rresdal&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,B2C34507-244A-424B-BC2A-D886201A4502.aspx#2c3f2c74-b102-40ba-8da3-181bfb0ae9df</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Jason Short)</author>
      <title>Comment by Jason Short on "Replace Comments With Code"</title>
      <guid isPermaLink="false">ad029d99-c238-4228-8aa1-fdbd1da8ec59</guid>
      <link>http://blog.torresdal.net/CommentView,guid,B2C34507-244A-424B-BC2A-D886201A4502.aspx#ad029d99-c238-4228-8aa1-fdbd1da8ec59</link>
      <pubDate>Wed, 05 Aug 2009 23:50:01 GMT</pubDate>
      <description>I think maybe you are used to see poor comments.  

So how do you explain complex algorithms in code?  You have to have things like Lists, Nodes, etc.  But explaining why a page is being split in 2/3 rather than some other strategy...  

Comments are the only way to explain logic reasons - not the logic that is preset.

I can SEE that you did something - but not understand the WHY.

WHY you do something or chose a particular algorithm in the comments can save someone hundreds of hours from trying to change that algorithm years later only to learn what you already knew in the first place - it didn't work for this problem.

Yes, you can put them in design docs, wikis, etc.  But the developers are going to be looking at the code.  If they see something that they think is a poor algorithm choice they will want to change it.  I have seem some companies where the checkin - revert cycle on particular subsystems is quite large because every new programmer coming in thought they knew a better algorithm only to be shot down with actual runtime tests.

You can delete those comments above, none of them help me understand why you were doing anything anyway.
&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://www.vistadb.net/blog"&gt;Jason Short&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,B2C34507-244A-424B-BC2A-D886201A4502.aspx#ad029d99-c238-4228-8aa1-fdbd1da8ec59</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Bob Saggett)</author>
      <title>Comment by Bob Saggett on "Replace Comments With Code"</title>
      <guid isPermaLink="false">ed7987e8-e73a-4079-9201-e428c2da257d</guid>
      <link>http://blog.torresdal.net/CommentView,guid,B2C34507-244A-424B-BC2A-D886201A4502.aspx#ed7987e8-e73a-4079-9201-e428c2da257d</link>
      <pubDate>Wed, 05 Aug 2009 19:01:05 GMT</pubDate>
      <description>I too am a comment advocate where they are used properly. The problem with this type of post is that it doesn't explore the argument fully. It always mentions the API documentation style comments. They also always come up with things like your first example (where I couldn't agree more - this comment is pointless).

One they miss out is the explanation comment. Let's say that the calculation for an interest payment in a method is slightly different from what you would expect to see and that there are no comments. Does this mean that there is a bug? Or does the company actually use a different method for a reason. A good comment would be: &lt;i&gt;// calculates using non-standard interest calculation as per.....&lt;/i&gt;

The other thing I dislike about the anti-comment movement that is around at the moment is that many are 100% certain that there should be exactly zero comments. &amp;quot;If the code is well written, you don't need comments because you can just read the code&amp;quot;. I disagree strongly here. My belief is that you should not have to read and understand a whole bunch of methods when trying to maintain the code. I would much rather have a comment to read in five seconds than have to spend ten minutes reading. My time is more valuable than that and it would be a disservice to my customers to make them pay for such inefficiency.&lt;br /&gt;&lt;br /&gt;Posted by: Bob Saggett</description>
      <comments>http://blog.torresdal.net/CommentView,guid,B2C34507-244A-424B-BC2A-D886201A4502.aspx#ed7987e8-e73a-4079-9201-e428c2da257d</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Gunnar Peipman)</author>
      <title>Comment by Gunnar Peipman on "Replace Comments With Code"</title>
      <guid isPermaLink="false">4fc9c08c-73ae-4448-ae83-7053a2022228</guid>
      <link>http://blog.torresdal.net/CommentView,guid,B2C34507-244A-424B-BC2A-D886201A4502.aspx#4fc9c08c-73ae-4448-ae83-7053a2022228</link>
      <pubDate>Tue, 04 Aug 2009 21:58:18 GMT</pubDate>
      <description>Thanks for feedback, Jon! :)
(Just in time when I'm writing blog entry about code documentation)

Two things

1) I consider code comments and documentation as different things. Code documentation is powerful think in Visual Studio as it integrates to IntelliSense and can be source of compiled documentation. You may think that inside same team code documentation is not important but my experiences show something else. When you have to return to code you wrote months ago you are suddenly both developer and client of your old code. I think this day you thank God if you wrote code documentation. Question is not if there is point to document your code - question is how to write useful documentation.

2) I agree that pointless code comments are bad thing. They can cause more harm than good. But there are cases when code comments may help a lot. I think &lt;a href="http://weblogs.asp.net/gunnarpeipman/archive/2008/06/16/code-complete-2.aspx"&gt;Code Complete 2&lt;/a&gt; (the best book I have read this far about coding) illustrates these issues best.&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://weblogs.asp.net/gunnarpeipman/"&gt;Gunnar Peipman&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,B2C34507-244A-424B-BC2A-D886201A4502.aspx#4fc9c08c-73ae-4448-ae83-7053a2022228</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Mark Nijhof)</author>
      <title>Comment by Mark Nijhof on "Replace Comments With Code"</title>
      <guid isPermaLink="false">c97a66a7-d508-4a85-82b5-974dcc0d992d</guid>
      <link>http://blog.torresdal.net/CommentView,guid,B2C34507-244A-424B-BC2A-D886201A4502.aspx#c97a66a7-d508-4a85-82b5-974dcc0d992d</link>
      <pubDate>Tue, 04 Aug 2009 14:59:56 GMT</pubDate>
      <description>The biggest problem with commenting the obvious or commenting where self documenting code could be applied is that when you do need to use a comment (because you cannot do everything in code) it blends in with the other none meaning full comments and thus a very important comment gets lost.&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://blog.fohjin.com"&gt;Mark Nijhof&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,B2C34507-244A-424B-BC2A-D886201A4502.aspx#c97a66a7-d508-4a85-82b5-974dcc0d992d</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (jnappi)</author>
      <title>Comment by jnappi on "Replace Comments With Code"</title>
      <guid isPermaLink="false">d5430ca2-96b8-4aa5-b302-14ea2c9d2435</guid>
      <link>http://blog.torresdal.net/CommentView,guid,B2C34507-244A-424B-BC2A-D886201A4502.aspx#d5430ca2-96b8-4aa5-b302-14ea2c9d2435</link>
      <pubDate>Tue, 04 Aug 2009 13:09:09 GMT</pubDate>
      <description>I agree and stress self-documenting code over code comments with my team.  There are worse examples of superfluous comments than the one Jon gives, and worse side effects.  I've seen comments that just state the obvious, for instance in a loop through Orders, I might see a comment saying &amp;quot;looping through orders&amp;quot;.  The worse side-effect of over commenting is that when the code changes people seldom change their comments, so you have comments that don't even describe the behavior, which creates confusion.&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://blog.nappisite.com"&gt;jnappi&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,B2C34507-244A-424B-BC2A-D886201A4502.aspx#d5430ca2-96b8-4aa5-b302-14ea2c9d2435</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Gareth)</author>
      <title>Comment by Gareth on "Replace Comments With Code"</title>
      <guid isPermaLink="false">3de39be1-faf8-4bd6-a49b-86d7d333c853</guid>
      <link>http://blog.torresdal.net/CommentView,guid,B2C34507-244A-424B-BC2A-D886201A4502.aspx#3de39be1-faf8-4bd6-a49b-86d7d333c853</link>
      <pubDate>Tue, 04 Aug 2009 12:42:14 GMT</pubDate>
      <description>:-) This is definitely an on going debate that has been lingering and rumbling for many many years. However I'm afraid I'm a comment advocate! Predominately the reason is that the no comment process is dependent on the correct implementation the first time (or you have access to the programmer at a time they actually recall what they wrote - i.e. within 6 months). Your example is certainly nice and neat and gives a compelling argument - however I've been dealing with code that was initially written 10+ years ago and had many hands in the support pot dealing with it. More often than not the comments give the 'intent' of the programmer at the time, rather than what they are actually doing! The key to me is that comments shouldn't be an either or

* Read the comments to understand what the module is doing 
OR
* Read the code to understand what it is doing

The code should be read (code + comments) to determine what the programmer was intending to be doing and find any differences between the comments and the actual implementation. The intent of code rarely changes, however the implementation often changes.

Finally you didnt mention that the API documentation has one useful side effect even if you don't have the compiled CHM (which most people dont do) is that Intellisense displays the information in the tool tip. This can be quite helpful when using code you are not 100% familiar with.

Any way - good article :-)&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://www.csharphacker.com"&gt;Gareth&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,B2C34507-244A-424B-BC2A-D886201A4502.aspx#3de39be1-faf8-4bd6-a49b-86d7d333c853</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Jon Arild T&amp;#248;rresdal)</author>
      <title>Comment by Jon Arild T&amp;#248;rresdal on "Replace Comments With Code"</title>
      <guid isPermaLink="false">274e90af-2056-4318-a84d-2d94e7d0d163</guid>
      <link>http://blog.torresdal.net/CommentView,guid,B2C34507-244A-424B-BC2A-D886201A4502.aspx#274e90af-2056-4318-a84d-2d94e7d0d163</link>
      <pubDate>Mon, 03 Aug 2009 16:37:15 GMT</pubDate>
      <description>Thomas,

I've given up on Mort a long time ago ;-)&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://blog.torresdal.net"&gt;Jon Arild T&amp;#248;rresdal&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,B2C34507-244A-424B-BC2A-D886201A4502.aspx#274e90af-2056-4318-a84d-2d94e7d0d163</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Thomas Eyde)</author>
      <title>Comment by Thomas Eyde on "Replace Comments With Code"</title>
      <guid isPermaLink="false">bc55a885-e7df-469b-acac-bb0f55b0d43d</guid>
      <link>http://blog.torresdal.net/CommentView,guid,B2C34507-244A-424B-BC2A-D886201A4502.aspx#bc55a885-e7df-469b-acac-bb0f55b0d43d</link>
      <pubDate>Mon, 03 Aug 2009 13:41:57 GMT</pubDate>
      <description>My thoughts exactly :-)

However, the objections to remove these comments, or even not write them in the first place, never stops.

The first one popping to my mind is: &amp;quot;But, if you don't want to see them, you can collapse them and problem solved.&amp;quot;

How do I successfully challenge that?&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://thomaseyde.blogspot.com"&gt;Thomas Eyde&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,B2C34507-244A-424B-BC2A-D886201A4502.aspx#bc55a885-e7df-469b-acac-bb0f55b0d43d</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Mark Nijhof)</author>
      <title>Comment by Mark Nijhof on "Replace Comments With Code"</title>
      <guid isPermaLink="false">9c545097-db0e-435a-9527-514d597add82</guid>
      <link>http://blog.torresdal.net/CommentView,guid,B2C34507-244A-424B-BC2A-D886201A4502.aspx#9c545097-db0e-435a-9527-514d597add82</link>
      <pubDate>Mon, 03 Aug 2009 12:11:00 GMT</pubDate>
      <description>Couldn't agree more: http://blog.fohjin.com/blog/2009/7/3/Hey_Developer_the_product_you_create_is_your_code

-Mark&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://blog.fohjin.com"&gt;Mark Nijhof&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,B2C34507-244A-424B-BC2A-D886201A4502.aspx#9c545097-db0e-435a-9527-514d597add82</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Einar Ingebrigtsen)</author>
      <title>Comment by Einar Ingebrigtsen on "Refactoring TryParse Into a Value Object"</title>
      <guid isPermaLink="false">2469938c-34c9-4702-93ce-d58cb29d301a</guid>
      <link>http://blog.torresdal.net/CommentView,guid,C6B90404-B253-4663-98DC-89033E90D27D.aspx#2469938c-34c9-4702-93ce-d58cb29d301a</link>
      <pubDate>Mon, 27 Jul 2009 11:52:25 GMT</pubDate>
      <description>Not all objects would suit this, but in quite a few domains you have value objects that are truely value objects that can be discarded and used like structs would have. 

I need to explore it a little bit more before I have a proper conclusion. :) 

Late answer - I'm in a holiday mode these days, not so trigger-happy on the keys. One more week and I'm back in the rythm..&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://www.ingebrigtsen.info"&gt;Einar Ingebrigtsen&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,C6B90404-B253-4663-98DC-89033E90D27D.aspx#2469938c-34c9-4702-93ce-d58cb29d301a</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Jon Arild T&amp;#248;rresdal)</author>
      <title>Comment by Jon Arild T&amp;#248;rresdal on "Refactoring TryParse Into a Value Object"</title>
      <guid isPermaLink="false">2144371f-2b58-4963-a5bc-e4ba78c110c5</guid>
      <link>http://blog.torresdal.net/CommentView,guid,C6B90404-B253-4663-98DC-89033E90D27D.aspx#2144371f-2b58-4963-a5bc-e4ba78c110c5</link>
      <pubDate>Thu, 23 Jul 2009 13:32:45 GMT</pubDate>
      <description>Einar,

When you say &amp;quot;true value objects&amp;quot; do you mean it in the sense of DDD? I'm not sure I would implement all my value objects as structs. For one you loose polymorphism since structs are value types, secondly I usually find structs to be useful when I need a lot of that type created (like 1500 instances in a collection or something).&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://blog.torresdal.net"&gt;Jon Arild T&amp;#248;rresdal&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,C6B90404-B253-4663-98DC-89033E90D27D.aspx#2144371f-2b58-4963-a5bc-e4ba78c110c5</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Einar Ingebrigtsen)</author>
      <title>Comment by Einar Ingebrigtsen on "Refactoring TryParse Into a Value Object"</title>
      <guid isPermaLink="false">645eb1ce-4a86-4b4e-8d64-49e31af14acd</guid>
      <link>http://blog.torresdal.net/CommentView,guid,C6B90404-B253-4663-98DC-89033E90D27D.aspx#645eb1ce-4a86-4b4e-8d64-49e31af14acd</link>
      <pubDate>Thu, 23 Jul 2009 13:24:46 GMT</pubDate>
      <description>Nice!

I'm exploring the same ideas these days, but want to look into using true value objects; structs. I'm not sure if there is a point to doing it with structs, other than they are in fact value objects - and the difference will become clearer.&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://www.ingebrigtsen.info"&gt;Einar Ingebrigtsen&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,C6B90404-B253-4663-98DC-89033E90D27D.aspx#645eb1ce-4a86-4b4e-8d64-49e31af14acd</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Torbj&amp;#248;rn Mar&amp;#248;)</author>
      <title>Comment by Torbj&amp;#248;rn Mar&amp;#248; on "Start Using More Value Objects!"</title>
      <guid isPermaLink="false">ad82fd59-b20a-44ba-8eab-8255a674fe29</guid>
      <link>http://blog.torresdal.net/CommentView,guid,DAE65808-C259-41D2-AEAA-14B78D60A94D.aspx#ad82fd59-b20a-44ba-8eab-8255a674fe29</link>
      <pubDate>Mon, 20 Jul 2009 12:29:02 GMT</pubDate>
      <description>Just a side note: Remember that there are domains where it makes sense to have addresses as entities. In one of my previous jobs working with direct marketing it made perfect sense.&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://blog.kjempekjekt.com"&gt;Torbj&amp;#248;rn Mar&amp;#248;&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,DAE65808-C259-41D2-AEAA-14B78D60A94D.aspx#ad82fd59-b20a-44ba-8eab-8255a674fe29</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Mark Nijhof)</author>
      <title>Comment by Mark Nijhof on "Different Ways of Refactoring Switch/Case"</title>
      <guid isPermaLink="false">3b63bb4e-e21c-4a98-80c0-60f0b0e9a82d</guid>
      <link>http://blog.torresdal.net/CommentView,guid,41C6C3CF-77EF-4954-90BD-8BC4F526138D.aspx#3b63bb4e-e21c-4a98-80c0-60f0b0e9a82d</link>
      <pubDate>Sun, 19 Jul 2009 22:29:31 GMT</pubDate>
      <description>I am just saying that even if your classes have much more behavior, I could still go for a Dictionary if I am looking for different behavior depending on the type that doesn't belong in the class. Sort of your visitor pattern.&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://blog.fohjin.com"&gt;Mark Nijhof&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,41C6C3CF-77EF-4954-90BD-8BC4F526138D.aspx#3b63bb4e-e21c-4a98-80c0-60f0b0e9a82d</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Mark Nijhof)</author>
      <title>Comment by Mark Nijhof on "Start Using More Value Objects!"</title>
      <guid isPermaLink="false">1ea64377-907d-4b7c-b3b8-9d2e1a8278c8</guid>
      <link>http://blog.torresdal.net/CommentView,guid,DAE65808-C259-41D2-AEAA-14B78D60A94D.aspx#1ea64377-907d-4b7c-b3b8-9d2e1a8278c8</link>
      <pubDate>Sun, 19 Jul 2009 22:26:05 GMT</pubDate>
      <description>Perhaps my example would be better if I said:

User user1 = UserRepository.Get(1);
User user2 = UserRepository.Get(1);
User user3 = UserRepository.Get(2);

user1 == user2
user2 != user3&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://blog.fohjin.com"&gt;Mark Nijhof&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,DAE65808-C259-41D2-AEAA-14B78D60A94D.aspx#1ea64377-907d-4b7c-b3b8-9d2e1a8278c8</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Jon Arild T&amp;#248;rresdal)</author>
      <title>Comment by Jon Arild T&amp;#248;rresdal on "Different Ways of Refactoring Switch/Case"</title>
      <guid isPermaLink="false">ceb906e6-d75a-4903-a834-5e61651fb18b</guid>
      <link>http://blog.torresdal.net/CommentView,guid,41C6C3CF-77EF-4954-90BD-8BC4F526138D.aspx#ceb906e6-d75a-4903-a834-5e61651fb18b</link>
      <pubDate>Sun, 19 Jul 2009 22:23:21 GMT</pubDate>
      <description>Mark,

You have a point, but most of all because of my trivial example (which I regret :-)). Since my classes only has the responsibility of returning a message as string, it's not much behavior. Though in a real scenario the system classes would probably have more stuff in it, making a dictionary a bad candidate.

There is of course a reason why I showed the dictionary example (except from it being a common solution to the switch refactoring). The reason for why I'm argue strongly for using polymorphism though, is I find that to be better in the long run if that's a valid option.&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://blog.torresdal.net"&gt;Jon Arild T&amp;#248;rresdal&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,41C6C3CF-77EF-4954-90BD-8BC4F526138D.aspx#ceb906e6-d75a-4903-a834-5e61651fb18b</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Mark Nijhof)</author>
      <title>Comment by Mark Nijhof on "Start Using More Value Objects!"</title>
      <guid isPermaLink="false">bd852844-44bd-4212-8d32-bff3e2f69076</guid>
      <link>http://blog.torresdal.net/CommentView,guid,DAE65808-C259-41D2-AEAA-14B78D60A94D.aspx#bd852844-44bd-4212-8d32-bff3e2f69076</link>
      <pubDate>Sun, 19 Jul 2009 22:22:41 GMT</pubDate>
      <description>The difference between Entities and Value Objects is that an Entity has an ID to identify it self and a Value Object identifies it as a whole (my understanding of it anyway) So that you can have two different objects representing the same data:

Entity
User user1 = new User(1);
User user2 = new User(1);
User user3 = new User(2);

user1 == user2
user2 != user3

Value Object
Address address1 = new Address(&amp;quot;street&amp;quot;, 1);
Address address2 = new Address(&amp;quot;street&amp;quot;, 1);
Address address3 = new Address(&amp;quot;lane&amp;quot;, 1);

address1 == address2
address2 != address3

I know very dirty, but an example it is :)

And yes both Entities and Value Objects implement the interface, and no I wouldn't do it for very simple types, but the more complex ones yes why not. And this also shows that an Address doesn't need and ID ever (I done it wrong many times myself).

-Mark&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://blog.fohjin.com"&gt;Mark Nijhof&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,DAE65808-C259-41D2-AEAA-14B78D60A94D.aspx#bd852844-44bd-4212-8d32-bff3e2f69076</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Mark Nijhof)</author>
      <title>Comment by Mark Nijhof on "Different Ways of Refactoring Switch/Case"</title>
      <guid isPermaLink="false">d7b688e4-57c9-4439-9770-57c29bd6116f</guid>
      <link>http://blog.torresdal.net/CommentView,guid,41C6C3CF-77EF-4954-90BD-8BC4F526138D.aspx#d7b688e4-57c9-4439-9770-57c29bd6116f</link>
      <pubDate>Sun, 19 Jul 2009 22:15:15 GMT</pubDate>
      <description>Well if you get rid of the enums anyway then you could improve the Dictionary a little bit by using Dictionary&amp;lt;type, Func&amp;lt;string&amp;gt;&amp;gt; The good thing about using the Dictionary solution vs the custom classes is that now your custom classes don't need to know anything about a message, this can be outside their responsibility. 

So depending whether or not the ISystemStrategy should know about what it should do in the re-factored switch I would go for either of the solutions.

Does that make sense?

-Mark



&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://blog.fohjin.com"&gt;Mark Nijhof&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,41C6C3CF-77EF-4954-90BD-8BC4F526138D.aspx#d7b688e4-57c9-4439-9770-57c29bd6116f</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Jon Arild T&amp;#248;rresdal)</author>
      <title>Comment by Jon Arild T&amp;#248;rresdal on "Start Using More Value Objects!"</title>
      <guid isPermaLink="false">ffc0a01c-8b94-4cae-98b5-f6648066a293</guid>
      <link>http://blog.torresdal.net/CommentView,guid,DAE65808-C259-41D2-AEAA-14B78D60A94D.aspx#ffc0a01c-8b94-4cae-98b5-f6648066a293</link>
      <pubDate>Sun, 19 Jul 2009 22:08:23 GMT</pubDate>
      <description>Mark,

I never said Address is not (or never) a Value Object. I merely said it serves (in my opinion) as a bad example, meaning there are better examples where the reader does not associate it with something that might have an Id.

As for using IEquatable that is an interesting concept, but it is not about what a VO is. I defiantly see its value, but I'm not sure I would enforce a rule on my VO's to implement it. Maybe (and I know my blog comment windows is not optimized for code) an example of usage would convince me otherwise, but my current understanding does not.&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://blog.torresdal.net"&gt;Jon Arild T&amp;#248;rresdal&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,DAE65808-C259-41D2-AEAA-14B78D60A94D.aspx#ffc0a01c-8b94-4cae-98b5-f6648066a293</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Mark Nijhof)</author>
      <title>Comment by Mark Nijhof on "Start Using More Value Objects!"</title>
      <guid isPermaLink="false">310cf625-4468-4e16-aa2d-4eb636c1b8c9</guid>
      <link>http://blog.torresdal.net/CommentView,guid,DAE65808-C259-41D2-AEAA-14B78D60A94D.aspx#310cf625-4468-4e16-aa2d-4eb636c1b8c9</link>
      <pubDate>Sun, 19 Jul 2009 21:55:47 GMT</pubDate>
      <description>Good read, and a very useful concept for sure :) I however don't agree with you on the Address statement. I think an Address is a Value Object, just because it has an ID in many implementations basically means those implementations are wrong ;)

One other thing I believe an Value Object should implement is the IEquatable&amp;lt;T&amp;gt; interface so you can compare different instances and override the == and != operators.

public class Address : IEquatable&amp;lt;Address&amp;gt;
{
  public string Street { get; private set; }
  public int Number { get; private set; }
  public string ZipCode { get; private set; }
  public string City { get; private set; }

  public Address(string street, int number, string zipCode, string city)
  {
    Street = street;
    Number = number;
    ZipCode = zipCode;
    City = city;
  }

  public virtual bool Equals(Address other)
  {
    if (ReferenceEquals(null, other)) return false;
    if (ReferenceEquals(this, other)) return true;

    if (Street != other.Street) return false;
    if (Number != other.Number) return false;
    if (ZipCode != other.ZipCode) return false;
    if (City != other.City) return false;

    return true;
  }

  public override bool Equals(object obj)
  {
    if (ReferenceEquals(null, obj)) return false;
    if (ReferenceEquals(this, obj)) return true;
    if (obj.GetType() != GetType()) return false;
    return Equals((Address) obj);
  }

  public override int GetHashCode()
  {
    return SomeHashCodeGenerator;
  }

  public static bool operator ==(Address left, Address right)
  {
    return Equals(left, right);
  }

  public static bool operator !=(Address left, Address right)
  {
    return !Equals(left, right);
  }
}

hmmm I don't know how to do code formatting here :) so it looks like crap, and it was written without compiler check so crap it is, but you get the idea :)

-Mark
&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://blog.fohjin.com"&gt;Mark Nijhof&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,DAE65808-C259-41D2-AEAA-14B78D60A94D.aspx#310cf625-4468-4e16-aa2d-4eb636c1b8c9</comments>
    </item>
    <item>
      <author>suppressed@unknown.org (Jon Arild T&amp;#248;rresdal)</author>
      <title>Comment by Jon Arild T&amp;#248;rresdal on "Start Using More Value Objects!"</title>
      <guid isPermaLink="false">745928fe-0160-4edf-ba63-89cd4df4c6b0</guid>
      <link>http://blog.torresdal.net/CommentView,guid,DAE65808-C259-41D2-AEAA-14B78D60A94D.aspx#745928fe-0160-4edf-ba63-89cd4df4c6b0</link>
      <pubDate>Sun, 19 Jul 2009 14:20:39 GMT</pubDate>
      <description>Thanks Torbj&amp;#248;rn. I agree that the behaviour is the important part, though sometimes it's nice to have a general name for things, which I find Value Object is. It might even be/become a buzzword, but that's OK as long as this type of thinking gets communicated/picked up by Mort.&lt;br /&gt;&lt;br /&gt;Posted by: &lt;a href="http://blog.torresdal.net"&gt;Jon Arild T&amp;#248;rresdal&lt;/a&gt;</description>
      <comments>http://blog.torresdal.net/CommentView,guid,DAE65808-C259-41D2-AEAA-14B78D60A94D.aspx#745928fe-0160-4edf-ba63-89cd4df4c6b0</comments>
    </item>
  </channel>
</rss>