<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>ASP.NET</title>
        <link>http://geekswithblogs.net/Podwysocki/category/4523.aspx</link>
        <description>ASP.NET</description>
        <language>en-US</language>
        <copyright>Matthew Podwysocki</copyright>
        <managingEditor>matthew.podwysocki@gmail.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <item>
            <title>RockNUG IoC Container Presentation Wrapup</title>
            <link>http://geekswithblogs.net/Podwysocki/archive/2008/04/10/121175.aspx</link>
            <description>I want to thank the fine folks at the &lt;a href="http://rocknug.org/"&gt;Rockville .NET Users Group (RockNUG)&lt;/a&gt; and &lt;a href="http://www.vpsw.com/blogbaby/default.aspx"&gt;Dean Fiala&lt;/a&gt; for giving me the opportunity to speak last night.  It was a record crowd last night, so I'm glad that people were interested in Loose Coupling, Design Patterns, Test Driven Development, Behavior Driven Development and Inversion of Control containers.  I hope everyone got some good information, and if not interested in using containers, design patterns and such, at least know they exist and have their use.  Based on the feedback I've already received, it was warming and why I like presenting at user groups, so that both of us can learn.&lt;br /&gt;
&lt;br /&gt;
Once again, I'd like to plug my &lt;a href="http://altnet.ent0.com/MainPage.ashx"&gt;DC ALT.NET&lt;/a&gt; group that I run.  Our next meeting is scheduled for April 23rd and the topic will be Continuous Integration with &lt;a href="http://jayflowers.com/joomla/"&gt;Jay Flowers&lt;/a&gt;.  We'll announce the location shortly for our group.  You can go ahead and sign up for our mailing list &lt;a href="http://tech.groups.yahoo.com/group/dcaltnet/"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Anyhow, here are some resources that can help point you in the right direction.  This includes articles, blogs and such that I find will be useful in your journey to better understand these things:&lt;br /&gt;
&lt;ul&gt;
    &lt;li&gt;Articles
    &lt;ul&gt;
        &lt;li&gt;&lt;a href="http://www.objectmentor.com/resources/articles/dip.pdf"&gt;The Dependency Inversion Principle&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="http://www.codeproject.com/KB/architecture/introducingcastle.aspx"&gt;Introducing Castle - Part I&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;Blogs
    &lt;ul&gt;
        &lt;li&gt;&lt;a href="http://www.martinfowler.com/articles/injection.html"&gt;Inversion of Control Containers and the Dependency Injection pattern&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="http://martinfowler.com/bliki/InversionOfControl.html"&gt;MF Bliki - Inversion of Control&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="http://www.hanselman.com/blog/ListOfNETDependencyInjectionContainersIOC.aspx"&gt;List of .NET Dependency Injection Containers (IOC)&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;Books
    &lt;ul&gt;
        &lt;li&gt;&lt;a href="http://www.amazon.com/Principles-Patterns-Practices-Robert-Martin/dp/0131857258/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1207865320&amp;amp;sr=1-1"&gt;Agile Principles, Patterns and Practices in C#&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612"&gt;Design Patterns: Elements of Reusable Object-Oriented Software&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="http://www.amazon.com/Enterprise-Application-Architecture-Addison-Wesley-Signature/dp/0321127420/ref=pd_sim_b_title_5"&gt;Patterns of Enterprise Application Architecture&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
&lt;/ul&gt;
After my &lt;a href="http://www.cmap-online.org/CodeCamp/"&gt;CMAP Code Camp&lt;/a&gt; session over the weekend, I will go ahead and post my slides and code samples for your enjoyment.  So, if you're in the Columbia, MD area this weekend and haven't signed up, go ahead and do so.  Hope to see a great crowd there! &lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.dotnetkicks.com/kick/?url=http://geekswithblogs.net/Podwysocki/archive/2008/04/10/121175.aspx"&gt;&lt;img border="0" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://geekswithblogs.net/Podwysocki/archive/2008/04/10/121175.aspx" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121175"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=121175" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Podwysocki/aggbug/121175.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Matthew Podwysocki</dc:creator>
            <guid>http://geekswithblogs.net/Podwysocki/archive/2008/04/10/121175.aspx</guid>
            <pubDate>Thu, 10 Apr 2008 23:10:21 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Podwysocki/comments/121175.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Podwysocki/archive/2008/04/10/121175.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Podwysocki/comments/commentRss/121175.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Podwysocki/services/trackbacks/121175.aspx</trackback:ping>
        </item>
        <item>
            <title>ASP.NET MVC Source Code Now Available</title>
            <link>http://geekswithblogs.net/Podwysocki/archive/2008/03/21/120686.aspx</link>
            <description>As of yesterday, the &lt;a href="http://www.codeplex.com/aspnet"&gt;ASP.NET MVC Release 2 source code&lt;/a&gt; has been made available on &lt;a href="http://www.codeplex.com"&gt;CodePlex&lt;/a&gt;.  &lt;a href="http://weblogs.asp.net/scottgu/"&gt;ScottGu&lt;/a&gt; made the &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/03/21/asp-net-mvc-source-code-now-available.aspx"&gt;source drop announcement&lt;/a&gt; earlier this morning.  Congrats to &lt;a href="http://haacked.com/"&gt;Phil Haack&lt;/a&gt; and the ASP.NET MVC Team for shipping the source code.  It's worth noting, it's not Open Source in the way that it's just a zip file and no outside patches are to be accepted, unlike IronRuby.  The plan going forward is to make incremental drops of the source code going forward.    &lt;br /&gt;
&lt;br /&gt;
As always, check out &lt;a href="http://codebetter.com/blogs/jeffrey.palermo"&gt;Jeffrey Palermo's&lt;/a&gt; &lt;a href="http://www.codeplex.com/MVCContrib"&gt;MVCContrib project&lt;/a&gt; for contributions to the code base, which is open source.
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.dotnetkicks.com/kick/?url=http://geekswithblogs.net/Podwysocki/archive/2008/03/21/120686.aspx"&gt;&lt;img border="0" alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://geekswithblogs.net/Podwysocki/archive/2008/03/21/120686.aspx" /&gt;&lt;/a&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120686"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120686" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Podwysocki/aggbug/120686.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Matthew Podwysocki</dc:creator>
            <guid>http://geekswithblogs.net/Podwysocki/archive/2008/03/21/120686.aspx</guid>
            <pubDate>Fri, 21 Mar 2008 18:34:49 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Podwysocki/comments/120686.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Podwysocki/archive/2008/03/21/120686.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Podwysocki/comments/commentRss/120686.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Podwysocki/services/trackbacks/120686.aspx</trackback:ping>
        </item>
        <item>
            <title>Videos and Interviews from MIX08</title>
            <link>http://geekswithblogs.net/Podwysocki/archive/2008/03/10/120441.aspx</link>
            <description>Well, I've had the urge to find all the videos I could and watch them to find out all the goodies I missed while not at MIX08.  If you missed any of the main sessions, you can find out more about them &lt;a href="http://sessions.visitmix.com/"&gt;here&lt;/a&gt;.   Note that there are 88 sessions recorded here, so it's a lot of good viewing material.  &lt;br /&gt;
&lt;br /&gt;
Best of all are &lt;a href="http://www.hanselman.com/blog/"&gt;Scott Hanselman's&lt;/a&gt; MVC Videos can be seen &lt;a href="http://www.hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx"&gt;here&lt;/a&gt;.  He also covers the MVC Mock Helpers which better allow for unit tests using various Mock frameworks including Rhino Mocks, TypeMock.NET and Moq. &lt;br /&gt;
&lt;a href="http://codebetter.com/blogs/david_laribee/"&gt;&lt;br /&gt;
Dave Laribee&lt;/a&gt; was great on Twitter to make sure we were all kept up to date with all the good things that were happening.  &lt;a href="http://codebetter.com/blogs/brendan.tompkins/"&gt;Brendan Tompkins&lt;/a&gt; supplied Dave with a video phone so that he could capture impromptu videos and such.  But, best of all they were broadcasted live.  He was able to talk to guys like &lt;a href="http://blog.wekeroad.com/"&gt;Rob Conery&lt;/a&gt;, &lt;a href="http://haacked.com/"&gt;Phil Haack&lt;/a&gt;, &lt;a href="http://stevenharman.net/"&gt;Steve Harman&lt;/a&gt;, &lt;a href="http://www.tirania.org/blog/"&gt;Miguel&lt;/a&gt;, &lt;a href="http://www.iunknown.com/"&gt;John Lam&lt;/a&gt;, &lt;a href="http://www.hanselman.com/blog/"&gt;Scott Hanselman&lt;/a&gt; and &lt;a href="http://www.joshholmes.com/"&gt;Josh Holmes&lt;/a&gt;.  Very cool stuff!  They were pretty good and entertaining, although the video wasn't always superb and sometimes you needed motion sickness pills.  But, the sessions of note are:&lt;br /&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://qik.com/video/32308"&gt;Phil Haack interview&lt;/a&gt;&lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href="http://qik.com/video/32260"&gt;Capturing Hanselminutes&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://qik.com/video/31741"&gt;Rob Conery and Steve Harman interview&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://qik.com/video/31733"&gt;Miguel de Icaza interview&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://qik.com/video/31684"&gt;Pablo Castro interview&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://qik.com/video/31679"&gt;John Lam interview&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://qik.com/video/31678"&gt;Microsoft Surface demo&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://qik.com/video/31661"&gt;Josh Holmes interview&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
More of them can be found &lt;a href="http://qik.com/codebetter"&gt;here&lt;/a&gt;.  And it's enough to make Phil think that he has enough of a fidgeting problem...  Well, enjoy! &lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.dotnetkicks.com/kick/?url=http://geekswithblogs.net/Podwysocki/archive/2008/03/10/120441.aspx"&gt;&lt;img border="0" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://geekswithblogs.net/Podwysocki/archive/2008/03/10/120441.aspx" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120441"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120441" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Podwysocki/aggbug/120441.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Matthew Podwysocki</dc:creator>
            <guid>http://geekswithblogs.net/Podwysocki/archive/2008/03/10/120441.aspx</guid>
            <pubDate>Tue, 11 Mar 2008 00:21:46 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Podwysocki/comments/120441.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Podwysocki/archive/2008/03/10/120441.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Podwysocki/comments/commentRss/120441.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Podwysocki/services/trackbacks/120441.aspx</trackback:ping>
        </item>
        <item>
            <title>ASP.NET Team Releases for Mix 2008</title>
            <link>http://geekswithblogs.net/Podwysocki/archive/2008/03/06/120327.aspx</link>
            <description>For all those interested in the information and the latest bits from the ASP.NET Team, here are the latest links.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold; text-decoration: underline;"&gt;Downloads:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://download.microsoft.com/download/7/9/a/79a7153c-4cb4-4898-a984-6f01d565cba9/AspNetMVCPreview2-setup.msi"&gt;ASP.NET MVC Preview 2&lt;/a&gt;&lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=E0BAE58E-9C0B-4090-A1DB-F134D9F095FD&amp;amp;displaylang=en"&gt;Silverlight tools including ASP.NET Server Controls&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=a9c6bc06-b894-4b11-8300-35bd2f8fc908&amp;amp;displaylang=en"&gt;ASP.NET 3.5 Extensions Preview from December&lt;/a&gt;&lt;br /&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;ASP.NET Updates:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://www.asp.net/ "&gt;ASP.NET Home Page Announcement&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.asp.net/downloads/3.5-extensions/ "&gt;ASP.NET 3.5 Extensions Download Page&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://quickstarts.asp.net/3-5-extensions/default.aspx "&gt;ASP.NET 3.5 Extensions Quickstarts&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.asp.net/downloads/3.5-extensions/readme/Preview2.aspx "&gt;ASP.NET Preview 2 (MIX) readme&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://forums.asp.net/default.aspx?GroupID=7"&gt;ASP.NET Updated Forums&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://forums.asp.net/1147.aspx"&gt;ASP.NET Server Controls for Silverlight Forum&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.asp.net/learn/3.5-extensions-videos/default.aspx#mvc "&gt;ASP.NET 3.5 Extensions Videos&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;a href="http://codebetter.com/blogs/jeffrey.palermo/"&gt;Jeffrey Palermo&lt;/a&gt;, the founder of &lt;a href="http://mvccontrib.org/"&gt;MVCContrib&lt;/a&gt; and &lt;a href="http://codecampserver.org/"&gt;CodeCampServer&lt;/a&gt; has posted the changes from what he can gather &lt;a href="http://codebetter.com/blogs/jeffrey.palermo/archive/2008/03/05/new-drop-of-asp-net-mvc-framework-now-available.aspx"&gt;here&lt;/a&gt;.  As noted, you must uninstall the old bits first before installing the new ones.&lt;br /&gt;
&lt;br /&gt;
I've been playing with the bits for a little bit lately and I must admit it's a lot better now.  But, I'm noticing that it seems that the ASP.NET team wants us to use more of the &lt;a href="http://www.martinfowler.com/eaaDev/SupervisingPresenter.html"&gt;Supervising Controller/Presenter Pattern&lt;/a&gt; and less of the &lt;a href="http://www.martinfowler.com/eaaDev/PassiveScreen.html"&gt;Passive View Pattern&lt;/a&gt;.  &lt;a href="http://bradwilson.typepad.com/"&gt;Brad Wilson&lt;/a&gt; also notes that &lt;a href="http://bradwilson.typepad.com/blog/2008/03/death-of-passiv.html"&gt;here&lt;/a&gt;.  It hasn't dampened my usage of it yet as I have adapted my designs since then.  After all, you have to be a little flexible when using a CTP.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.dotnetkicks.com/kick/?url=http://geekswithblogs.net/Podwysocki/archive/2008/03/06/120327.aspx"&gt;&lt;img border="0" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://geekswithblogs.net/Podwysocki/archive/2008/03/06/120327.aspx" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120327"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=120327" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Podwysocki/aggbug/120327.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Matthew Podwysocki</dc:creator>
            <guid>http://geekswithblogs.net/Podwysocki/archive/2008/03/06/120327.aspx</guid>
            <pubDate>Fri, 07 Mar 2008 00:46:00 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Podwysocki/comments/120327.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Podwysocki/archive/2008/03/06/120327.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Podwysocki/comments/commentRss/120327.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Podwysocki/services/trackbacks/120327.aspx</trackback:ping>
        </item>
        <item>
            <title>RockNUG Meeting - ASP.NET MVC + Updates</title>
            <link>http://geekswithblogs.net/Podwysocki/archive/2008/02/13/119554.aspx</link>
            <description>Tonight, put on the DVR and come out to the &lt;a href="http://rocknug.org/"&gt;Rockville .NET Users Group (RockNUG)&lt;/a&gt; for a presentation by &lt;a href="http://thequeue.net/blog/"&gt;Jeff Schoolcraft&lt;/a&gt; on &lt;a href="http://asp.net/downloads/3.5-extensions/"&gt;ASP.NET MVC&lt;/a&gt;.  &lt;br /&gt;
&lt;br /&gt;
The timing of course couldn't be more appropriate as &lt;a href="http://weblogs.asp.net/scottgu/"&gt;ScottGu&lt;/a&gt; has recently posted about the &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/02/12/asp-net-mvc-framework-road-map-update.aspx"&gt;ASP.NET MVC Framework Update&lt;/a&gt; in which he talks about a few pain points I know I've been having as well as others such as:&lt;br /&gt;
&lt;ul&gt;
    &lt;li&gt;Can be deployed in partial trust in the \bin directory&lt;/li&gt;
    &lt;li&gt;Improved routing features and infrastructure&lt;/li&gt;
    &lt;li&gt;Test wizard now supports and probably one of my favorite features&lt;br /&gt;
    &lt;ul&gt;
        &lt;li&gt;MSTest&lt;/li&gt;
        &lt;li&gt;NUnit&lt;/li&gt;
        &lt;li&gt;MbUnit&lt;/li&gt;
        &lt;li&gt;XUnit.NET&lt;/li&gt;
    &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;Removing ControllerAction Attribute requirement from controllers, instead all public members will be controller actions.  Another nice thing to remove a pain point&lt;/li&gt;
    &lt;li&gt;Filter Support for Controllers and Action methods&lt;/li&gt;
    &lt;li&gt;HTML Helpers now built in&lt;/li&gt;
    &lt;li&gt;And so on...&lt;/li&gt;
&lt;/ul&gt;
The plan is to release a new preview at MIX08, so it should be pretty exciting to get the hands on the new bits.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://haacked.com/archive/2008/02/12/asp.net-mvc-update.aspx"&gt;Phil Haack&lt;/a&gt; has also covered this with his comments on &lt;a href="http://haacked.com/archive/2008/02/12/asp.net-mvc-update.aspx"&gt;ASP.NET MVC Update&lt;/a&gt; and &lt;a href="http://haacked.com/archive/2008/02/12/asp.net-mvc-blocking-direct-access-to-views.aspx"&gt;Blocking Direct Access to Views in ASP.NET MVC&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Anyhow, back to the original intent of the post, the details are as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-style: italic;"&gt;An Introduction to ASP.NET MVC&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;
&lt;span style="font-style: italic;"&gt;presented by Jeff Schoolcraft&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;
&lt;br style="font-style: italic;" /&gt;
&lt;span style="font-style: italic;"&gt;Come walk with me as I lead you on a gentle, relaxed tour of the ASP.NET MVC Framework. I'll demystify the forest of three letter acronyms. Then we'll take a journey through the hall of ancestors--and cousins--to discuss some influences and other players in the MVC space. We'll end up at the Grove of Hello World and, like habitat for softwarity, we'll build a demo application. Along the way we might run into some tangential trolls, but we'll cross that bridge when we come to it.&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;
&lt;br style="font-style: italic;" /&gt;
&lt;span style="font-style: italic;"&gt;Jeff Schoolcraft is the founder of The Queue, Incorporated; a consulting shop that writes software and helps write software better. He has been in the .NET space from nearly the beginning and is still, mostly, writing web applications in C#. He tries to organize a couple Code Camps a year and is hoping to find a developer community that isn't over an hour away. When he's not immersed in code he enjoys spending time with his wife and two daughters. &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Time:&lt;/span&gt;&lt;br /&gt;
Wednesday, February 13, 2007 6:30-9:00 PM&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Location:&lt;/span&gt;&lt;br /&gt;
Montgomery College, Rockville&lt;br /&gt;
Humanities Building - Room 103 &lt;br /&gt;
Rockville, MD&lt;br /&gt;
Click &lt;a href="http://rocknug.org/Default.aspx?tabid=116"&gt;here&lt;/a&gt; for details....&lt;br /&gt;
&lt;br /&gt;
Come and support the organization if you're in the area!  Should be a great session! &lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.dotnetkicks.com/kick/?url=http://geekswithblogs.net/Podwysocki/archive/2008/02/13/119554.aspx"&gt;&lt;img border="0" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://geekswithblogs.net/Podwysocki/archive/2008/02/13/119554.aspx" alt="kick it on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119554"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119554" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Podwysocki/aggbug/119554.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Matthew Podwysocki</dc:creator>
            <guid>http://geekswithblogs.net/Podwysocki/archive/2008/02/13/119554.aspx</guid>
            <pubDate>Thu, 14 Feb 2008 00:54:37 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Podwysocki/comments/119554.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Podwysocki/archive/2008/02/13/119554.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Podwysocki/comments/commentRss/119554.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Podwysocki/services/trackbacks/119554.aspx</trackback:ping>
        </item>
        <item>
            <title>RockNUG Meeting 2/13 - ASP.NET MVC</title>
            <link>http://geekswithblogs.net/Podwysocki/archive/2008/02/01/119212.aspx</link>
            <description>The &lt;a href="http://rocknug.org/"&gt;Rockville .NET Users Group (RockNUG)&lt;/a&gt; will be holding their Februrary meeting on the 13th at 6:30PM-9PM.  This month, &lt;a href="http://thequeue.net/blog/"&gt;Jeff Schoolcraft&lt;/a&gt; will give an introduction to &lt;a href="http://asp.net/downloads/3.5-extensions/"&gt;ASP.NET MVC&lt;/a&gt; that we have all come to know and love, to a point of course...  &lt;br /&gt;
&lt;br /&gt;
The details are as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-style: italic;"&gt;An Introduction to ASP.NET MVC&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;
&lt;span style="font-style: italic;"&gt;presented by Jeff Schoolcraft&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;
&lt;br style="font-style: italic;" /&gt;
&lt;span style="font-style: italic;"&gt;Come walk with me as I lead you on a gentle, relaxed tour of the ASP.NET MVC Framework. I'll demystify the forest of three letter acronyms. Then we'll take a journey through the hall of ancestors--and cousins--to discuss some influences and other players in the MVC space. We'll end up at the Grove of Hello World and, like habitat for softwarity, we'll build a demo application. Along the way we might run into some tangential trolls, but we'll cross that bridge when we come to it.&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;
&lt;br style="font-style: italic;" /&gt;
&lt;span style="font-style: italic;"&gt;Jeff Schoolcraft is the founder of The Queue, Incorporated; a consulting shop that writes software and helps write software better. He has been in the .NET space from nearly the beginning and is still, mostly, writing web applications in C#. He tries to organize a couple Code Camps a year and is hoping to find a developer community that isn't over an hour away. When he's not immersed in code he enjoys spending time with his wife and two daughters. &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Time:&lt;/span&gt;&lt;br /&gt;
Wednesday, February 13, 2007 6:30-9:00 PM&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Location:&lt;/span&gt;&lt;br /&gt;
Montgomery College, Rockville&lt;br /&gt;
Humanities Building - Room 103 &lt;br /&gt;
Rockville, MD&lt;br /&gt;
Click &lt;a href="http://rocknug.org/Default.aspx?tabid=116"&gt;here&lt;/a&gt; for details....&lt;br /&gt;
&lt;br /&gt;
Come and support the organization if you're in the area!  Should be a great session!
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.dotnetkicks.com/kick/?url=http://geekswithblogs.net/Podwysocki/archive/2008/02/01/119212.aspx"&gt;&lt;img border="0" alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://geekswithblogs.net/Podwysocki/archive/2008/02/01/119212.aspx" /&gt;&lt;/a&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119212"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=119212" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Podwysocki/aggbug/119212.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Matthew Podwysocki</dc:creator>
            <guid>http://geekswithblogs.net/Podwysocki/archive/2008/02/01/119212.aspx</guid>
            <pubDate>Fri, 01 Feb 2008 23:11:24 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Podwysocki/comments/119212.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Podwysocki/archive/2008/02/01/119212.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Podwysocki/comments/commentRss/119212.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Podwysocki/services/trackbacks/119212.aspx</trackback:ping>
        </item>
        <item>
            <title>Grokking the Model View Presenter (MVP) Variations</title>
            <link>http://geekswithblogs.net/Podwysocki/archive/2008/01/23/118813.aspx</link>
            <description>For many of my current ASP.NET projects, I've been using the Model View Presenter (MVP) for this.  However, there are many ways to implement this and if you ask someone, you'll likely get a differing opinion each and every time.  Such as the case with the Model View Presenter.  I've covered this before, but in the context of SharePoint, so now I'm just going to stick with ASP.NET and the concepts itself.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;The Model View Presenter&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Martin Fowler came up with the concept for the &lt;a href="http://martinfowler.com/eaaDev/ModelViewPresenter.html"&gt;Model View Presenter&lt;/a&gt; back in 2004.  The Model View Presenter is a slight variation of the Model View Controller that we've heard so much about with such frameworks as ASP.NET MVC, MonoRail, Struts and of course Ruby on Rails.  The basic idea is that the model stores the data, the view shows a representation of the model, and the presenter handles the interaction between the two.  The main reason for the use of this framework is that you can use the existing ASP.NET infrastructure to support this without any additional libraries unlike ASP.NET MVC and MonoRail.&lt;br /&gt;
&lt;br /&gt;
The key benefits of course is testability and separation of concerns.  The view is basically dumb and does nothing but what the presenter tells it to do.  This allows for easy testing with mock views or test doubles.  Now questions arise when you start handling events in these presenters.   &lt;a href="http://www.codeproject.com/KB/architecture/ModelViewPresenter.aspx"&gt;Billy McAfferty&lt;/a&gt; has a good writeup on the subject which is still a great reference.&lt;br /&gt;
&lt;br /&gt;
But since then, Martin Fowler split the Model View Presenter into two, the &lt;a href="http://www.martinfowler.com/eaaDev/PassiveScreen.html"&gt;Passive View&lt;/a&gt; and the &lt;a href="http://www.martinfowler.com/eaaDev/SupervisingPresenter.html"&gt;Supervising Controller (Presenter)&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;The Passive View&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The intent of the Passive View is that it is a rather dumb view.  This means the majority of the code used for setting up the view and all the logic is moved into the presenter.  The view is just a thin wrapper around the presenter with no behaviors defined.  Basically, it just defines the contract of the data to display, and no real concept of what the model is.  &lt;a href="http://codebetter.com/blogs/jeremy.miller/"&gt;Jeremy Miller&lt;/a&gt; has a great writeup of this in his series "Build Your Own Cab" with Part #4 covering the &lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2007/05/30/build-your-own-cab-part-4-the-passive-view.aspx"&gt;Passive View&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
So, to put it succinctly, the main points of the Passive View are:&lt;br /&gt;
&lt;ul&gt;
    &lt;li&gt;The view should not know about the model&lt;/li&gt;
    &lt;li&gt;The view should be simple as possible&lt;/li&gt;
    &lt;li&gt;The view should implement an interface so you can mock it&lt;/li&gt;
    &lt;li&gt;If the view needs to use a complex type, then use an adapter to break it down&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Below is a basic example of a search screen for a given employee to return employee information for the given employee ID.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: rgb(0, 0, 255);"&gt;public interface&lt;/span&gt; &lt;span style="color: rgb(0, 128, 128);"&gt;IEmployeeSearchView&lt;/span&gt;&lt;br /&gt;
{&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;string &lt;/span&gt;EmployeeId { &lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;; }&lt;br /&gt;
&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;string &lt;/span&gt;FirstName { &lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;; }&lt;br /&gt;
&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;string &lt;/span&gt;Lastname { &lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;; }&lt;br /&gt;
&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;int &lt;/span&gt;Level { &lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
And then we can define the presenter with just a stub so that we can test our interaction.  Note that our model is defined through the IEmployeeTasks interface and I'm not really going to cover what that does.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: rgb(0, 0, 255);"&gt;public class&lt;/span&gt; &lt;span style="color: rgb(0, 128, 128);"&gt;EmployeeSearchPresenter&lt;/span&gt;&lt;br /&gt;
{&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;private &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;IEmployeeTasks &lt;/span&gt;tasks;&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;private &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;IEmployeeSearchView &lt;/span&gt;view;&lt;br /&gt;
&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;public &lt;/span&gt;EmployeeSearchPresenter(&lt;span style="color: rgb(0, 128, 128);"&gt;IEmployeeSearchView &lt;/span&gt;view, &lt;span style="color: rgb(0, 128, 128);"&gt;IEmployeeTasks &lt;/span&gt;tasks)&lt;br /&gt;
     {&lt;br /&gt;
          &lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;.view = view;&lt;br /&gt;
          &lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;.tasks = tasks;&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;public void&lt;/span&gt; InitializeView()&lt;br /&gt;
     {&lt;br /&gt;
          &lt;span style="color: rgb(0, 128, 128);"&gt;Employee &lt;/span&gt;employee = tasks.GetEmployee(view.EmployeeId);&lt;br /&gt;
          view.FirstName = employee.GivenName;&lt;br /&gt;
          view.Lastname = employee.Surname;&lt;br /&gt;
          view.Level = employee.Rank;&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Well, if we were truly doing TDD, we would have just left InitializeView to do nothing, then made it fail, then put in the code to make it pass, but that's a bit much for a blog post and more for a webcast and so on.  As you can note from our presenter, it has no idea about events or when it gets invoked.  In other words, the presenter gets invoked at certain times during the page such as an Click event.  &lt;br /&gt;
&lt;br /&gt;
Now, I'm not happy with the above code, because I'm setting the Employee object and doing that mapping of the view from the employee object and it just has a code smell to it.  So, where can we move that logic?  How about into the view itself?  Let's modify the view to include more things.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: rgb(0, 0, 255);"&gt;public interface&lt;/span&gt; &lt;span style="color: rgb(0, 128, 128);"&gt;IEmployeeSearchView&lt;/span&gt;&lt;br /&gt;
{&lt;br /&gt;
     &lt;span style="color: rgb(51, 153, 102);"&gt;// Same as above plus this&lt;/span&gt;&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;void &lt;/span&gt;SetEmployee(&lt;span style="color: rgb(0, 128, 128);"&gt;Employee &lt;/span&gt;employee);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Now, this makes the view have some logic in it, or does it?  We'll use an adapter approach to fix that.&lt;br /&gt;
&lt;br style="color: rgb(0, 0, 255);" /&gt;
&lt;span style="color: rgb(0, 0, 255);"&gt;public static class&lt;/span&gt; &lt;span style="color: rgb(0, 128, 128);"&gt;EmployeeAdapter&lt;/span&gt;&lt;br /&gt;
{&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;public static void&lt;/span&gt; SetEmployee(&lt;span style="color: rgb(0, 128, 128);"&gt;IEmployeeSearchView &lt;/span&gt;view, &lt;span style="color: rgb(0, 128, 128);"&gt;Employee &lt;/span&gt;employee)&lt;br /&gt;
     {&lt;br /&gt;
          view.FirstName = employee.GivenName;&lt;br /&gt;
          view.LastName = employee.Surname;&lt;br /&gt;
          view.Level = employee.Rank;&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Now, the implementing view must do this for the SetEmployee method.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: rgb(0, 0, 255);"&gt;public void&lt;/span&gt; SetEmployee(&lt;span style="color: rgb(0, 128, 128);"&gt;Employee &lt;/span&gt;employee)&lt;br /&gt;
{&lt;br /&gt;
     &lt;span style="color: rgb(0, 128, 128);"&gt;EmployeeAdapter&lt;/span&gt;.SetEmployee(&lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;, employee);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
And in turn, we modify our InitializeView method to incorporate this change as well:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: rgb(0, 0, 255);"&gt;public void&lt;/span&gt; InitializeView()&lt;br /&gt;
{&lt;br /&gt;
     &lt;span style="color: rgb(0, 128, 128);"&gt;Employee &lt;/span&gt;employee = tasks.GetEmployee(view.EmployeeId);&lt;br /&gt;
     view.SetEmployee(employee);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
So, as you can see, it's made our mapper code a bit more clearer and it's a better approach when tackling the Passive View.  &lt;br /&gt;
&lt;br /&gt;
Now, let's move onto the Supervising Controller.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Supervising Controller&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Now in more complicated scenarios where you need to handle events, that's where the Supervising Controller comes into play.  Both &lt;a href="http://haacked.com/archive/2006/08/09/ASP.NETSupervisingControllerModelViewPresenterFromSchematicToUnitTestsToCode.aspx"&gt;Phil Haack&lt;/a&gt; and &lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2007/05/25/build-you-own-cab-part-3-the-supervising-controller-pattern.aspx"&gt;Jeremy Miller&lt;/a&gt; have great writeups on this.  Phil's approach uses the ASP.NET Event Model to control this through defining a base view that can be applicable to all views and then implementing a custom view on top of this.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: rgb(0, 0, 255);"&gt;public interface&lt;/span&gt; IView&lt;br /&gt;
{&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;event &lt;/span&gt;EventHandler Init;&lt;br /&gt;
&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;event &lt;/span&gt;EventHandler Load;&lt;br /&gt;
&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;bool &lt;/span&gt;IsPostBack { &lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;; }&lt;br /&gt;
&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;void &lt;/span&gt;DataBind();&lt;br /&gt;
&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;bool &lt;/span&gt;IsValid { &lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;;}&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: rgb(0, 0, 255);"&gt;public class&lt;/span&gt; &lt;span style="color: rgb(0, 128, 128);"&gt;IEmployeeEditView : IView&lt;/span&gt;&lt;br /&gt;
{&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;string &lt;/span&gt;EmployeeId { &lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;; }&lt;br /&gt;
&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;string &lt;/span&gt;FirstName { &lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;; &lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;; }&lt;br /&gt;
&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;string &lt;/span&gt;LastName { &lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;; &lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;; }&lt;br /&gt;
&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;int &lt;/span&gt;Level { &lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;; &lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;; }&lt;br /&gt;
&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;event &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;EventHandler &lt;/span&gt;EmployeeSaved;&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
So, as you can see, the real differences start to emerge when you start handling the events and such and you subscribe through the presenter itself.  We'' stub out what the presenter will look like.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: rgb(0, 0, 255);"&gt;public class&lt;/span&gt; &lt;span style="color: rgb(0, 128, 128);"&gt;EmployeeEditPresenter&lt;/span&gt;&lt;br /&gt;
{&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;private &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;IEmployeeEditView &lt;/span&gt;view;&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;private &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;IEmployeeTasks &lt;/span&gt;tasks;&lt;br /&gt;
&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;public &lt;/span&gt;EmployeeEditPresenter(&lt;span style="color: rgb(0, 128, 128);"&gt;IEmployeeEditView &lt;/span&gt;view, &lt;span style="color: rgb(0, 128, 128);"&gt;IEmployeeTasks &lt;/span&gt;tasks)&lt;br /&gt;
     {&lt;br /&gt;
          &lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;.view = view;&lt;br /&gt;
          &lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;.tasks = tasks;&lt;br /&gt;
          SubscribeToEvents();&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;private void&lt;/span&gt; SubscribeToEvents()&lt;br /&gt;
     {&lt;br /&gt;
          view.EmployeeSaved += OnEmployeeSaved;&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;private void&lt;/span&gt; OnEmployeeSaved(&lt;span style="color: rgb(0, 0, 255);"&gt;object &lt;/span&gt;sender, &lt;span style="color: rgb(0, 128, 128);"&gt;EventArgs &lt;/span&gt;e)&lt;br /&gt;
     {&lt;br /&gt;
          &lt;span style="color: rgb(0, 128, 128);"&gt;Employee &lt;/span&gt;employee = new Employee(view.EmployeeId);&lt;br /&gt;
          employee.GivenName = view.FirstName;&lt;br /&gt;
          employee.Surname = view.LastName;&lt;br /&gt;
          employee.Rank = view.Level;&lt;br /&gt;
          tasks.SaveEmployee(employee);&lt;br /&gt;
         DataBind();&lt;br /&gt;
     }&lt;br /&gt;
&lt;br /&gt;
     // More code here&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Once again, I went ahead and wrote the code before the tests because once again, this is a blog post and not a web cast.  Anyhow, so we've seen two basic ways of defining your views and presenters.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Variations on the Theme&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
So, basically we have two ways of attacking the problem:&lt;br /&gt;
&lt;ol&gt;
    &lt;li&gt;Expose events off the view to which the presenter can subscribe.  This of course ties it to the event model as defined in ASP.NET or your UI of choice.  This is using the Supervising Controller approach.&lt;br /&gt;
    &lt;/li&gt;
    &lt;li&gt;Have the presenter methods called within the events in your UI as noted in the Passive View approach.&lt;/li&gt;
&lt;/ol&gt;
Some might object to the Supervising Controller approach as it ties you to the ASP.NET event model.  They criticize this approach because they may want to substitute a Web UI with a Windows Forms application, with a WPF application, etc.  But, how realistic is that scenario where you want both options for a UI to use the same logic and so on?&lt;br /&gt;
&lt;br /&gt;
Let's take another approach as well.  Jim Bolla posted about what he calls &lt;a href="http://devlicio.us/blogs/jim_bolla/archive/2006/10/03/ObservableViewPattern.aspx"&gt;the Observable View Pattern&lt;/a&gt;.  This uses the observer pattern and it very much like the Passive View but with events on the view.  Let's walk through a simple example:&lt;br /&gt;
&lt;br /&gt;
Note that we're using the IView interface from above.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: rgb(0, 0, 255);"&gt;public class&lt;/span&gt; &lt;span style="color: rgb(0, 128, 128);"&gt;IEmployeeEditView : IView&lt;/span&gt;&lt;br /&gt;
{&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;string &lt;/span&gt;EmployeeId { &lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;; }&lt;br /&gt;
&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;string &lt;/span&gt;FirstName { &lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;; &lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;; }&lt;br /&gt;
&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;string &lt;/span&gt;LastName { &lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;; &lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;; }&lt;br /&gt;
&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;int &lt;/span&gt;Level { &lt;span style="color: rgb(0, 0, 255);"&gt;get&lt;/span&gt;; &lt;span style="color: rgb(0, 0, 255);"&gt;set&lt;/span&gt;; }&lt;br /&gt;
&lt;br /&gt;
     &lt;span style="color: rgb(0, 0, 255);"&gt;event &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;EventHandler &lt;/span&gt;EmployeeSaved;&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
Now, let's see what the page might look like.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: rgb(0, 0, 255);"&gt;public class&lt;/span&gt; &lt;span style="color: rgb(0, 128, 128);"&gt;EditEmployee &lt;/span&gt;: &lt;span style="color: rgb(0, 128, 128);"&gt;Page&lt;/span&gt;, &lt;span style="color: rgb(0, 128, 128);"&gt;IEmployeeEditView&lt;/span&gt;&lt;br /&gt;
{&lt;br /&gt;
       &lt;span style="color: rgb(0, 0, 255);"&gt;protected void&lt;/span&gt; OnSaveButtonClick(&lt;span style="color: rgb(0, 0, 255);"&gt;object &lt;/span&gt;sender, &lt;span style="color: rgb(0, 128, 128);"&gt;EventArgs &lt;/span&gt;e)&lt;br /&gt;
       {&lt;br /&gt;
           if (EmployeeSaved != &lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;)&lt;br /&gt;
               EmployeeSaved(&lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;, &lt;span style="color: rgb(0, 128, 128);"&gt;EventArgs&lt;/span&gt;.Empty);&lt;br /&gt;
       }&lt;br /&gt;
&lt;br /&gt;
      &lt;span style="color: rgb(0, 0, 255);"&gt;protected override void&lt;/span&gt; OnInit(&lt;span style="color: rgb(0, 128, 128);"&gt;EventArgs &lt;/span&gt;e)&lt;br /&gt;
      {&lt;br /&gt;
           &lt;span style="color: rgb(0, 0, 255);"&gt;new &lt;/span&gt;EditEmployeeViewObserver().Observe(&lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;);&lt;br /&gt;
  &lt;br /&gt;
           &lt;span style="color: rgb(0, 0, 255);"&gt;if &lt;/span&gt;(Init != &lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;)&lt;br /&gt;
               Init (&lt;span style="color: rgb(0, 0, 255);"&gt;this&lt;/span&gt;, &lt;span style="color: rgb(0, 128, 128);"&gt;EventArgs&lt;/span&gt;.Empty);&lt;br /&gt;
      }&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
And in turn, our EditEmployeeViewObserver would look like this:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: rgb(0, 0, 255);"&gt;public class&lt;/span&gt; &lt;span style="color: rgb(0, 128, 128);"&gt;EditEmployeeViewObserver &lt;/span&gt;&lt;br /&gt;
{&lt;br /&gt;
       &lt;span style="color: rgb(0, 0, 255);"&gt;public void&lt;/span&gt; Observe(&lt;span style="color: rgb(0, 128, 128);"&gt;IEmployeeEditView&lt;/span&gt; view)&lt;br /&gt;
       {&lt;br /&gt;
           view.Init += &lt;span style="color: rgb(0, 0, 255);"&gt;delegate&lt;/span&gt;&lt;br /&gt;
           {&lt;br /&gt;
               &lt;span style="color: rgb(0, 0, 255);"&gt;new &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;EditEmployeeViewInitializationProcess&lt;/span&gt;(view).Execute();&lt;br /&gt;
           };&lt;br /&gt;
  &lt;br /&gt;
           view.EmployeeSaved += &lt;span style="color: rgb(0, 0, 255);"&gt;delegate&lt;/span&gt;&lt;br /&gt;
           {&lt;br /&gt;
                &lt;span style="color: rgb(0, 0, 255);"&gt;new &lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;EditEmployeeSavedProcess&lt;/span&gt;(view).Execute();&lt;br /&gt;
           };&lt;br /&gt;
       }&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
The key to this approach is using events.  This has the view creating the observer and then forgetting about it after the Observe method.  It shouldn't fall out of scope during the setup here after that.  The observer then forwards to the process class which in turn implements the Command pattern.  It's a pretty interesting approach I must say.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Conclusion&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
So, the question then arises, which to use and when?  Well, Martin Fowler gives the answers in his links from above, but it's down to personal preference.  I've followed more of Phil Haack's approach to the Supervising Controller.  Mostly the view doesn't do anything, as the presenter subscribes to the view's events.  Jeremy Miller thinks a different way as well as noted &lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2007/06/04/build-your-own-cab-part-6-view-to-presenter-communication.aspx"&gt;here&lt;/a&gt;.  But, at the end of the day it's down to preference.  Each approach works and has its pluses and minuses.  &lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.dotnetkicks.com/kick/?url=http://geekswithblogs.net/Podwysocki/archive/2008/01/23/118813.aspx"&gt;&lt;img border="0" alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http://geekswithblogs.net/Podwysocki/archive/2008/01/23/118813.aspx" /&gt;&lt;/a&gt;&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118813"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118813" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Podwysocki/aggbug/118813.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Matthew Podwysocki</dc:creator>
            <guid>http://geekswithblogs.net/Podwysocki/archive/2008/01/23/118813.aspx</guid>
            <pubDate>Wed, 23 Jan 2008 06:38:46 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Podwysocki/comments/118813.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Podwysocki/archive/2008/01/23/118813.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://geekswithblogs.net/Podwysocki/comments/commentRss/118813.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Podwysocki/services/trackbacks/118813.aspx</trackback:ping>
        </item>
        <item>
            <title>CMAP Meeting 1/2/2008 - ASP.NET MVC</title>
            <link>http://geekswithblogs.net/Podwysocki/archive/2008/01/02/118135.aspx</link>
            <description>Today, the &lt;a href="http://www.cmap-online.org"&gt;CMAP user group&lt;/a&gt; will hold their first meeting of 2008.  This meeting will be a Visual Studio 2008 InstallFest.  If you hadn't registered already, too late, it's already booked up, but feel free to attend the ASP.NET MVC portion of this event.&lt;br /&gt;
&lt;br /&gt;
Also, DC ALT.NET is announcing our meeting for January at this event.  I will have a writeup of this later on today and post here.  Tentatively it is scheduled for January 15th, so sign up at &lt;a href="http://tech.groups.yahoo.com/group/dcaltnet/"&gt;our site&lt;/a&gt; and participate!&lt;br /&gt;
&lt;br /&gt;
Anyhow, the topic this month is ASP.NET MVC presented by a great guy and member of &lt;a href="http://tech.groups.yahoo.com/group/dcaltnet/"&gt;DC ALT.NET&lt;/a&gt;, &lt;a href="http://odetocode.com/blogs/scott/"&gt;Scott Allen&lt;/a&gt;.  &lt;br /&gt;
&lt;br /&gt;
Below are the details:&lt;br /&gt;
&lt;a href="http://www.cmap-online.org/Meetings/Details/2008-01-02.aspx"&gt;CMAP January 2nd Meeting&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-style: italic;"&gt;Topic:&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;
&lt;span style="font-style: italic;"&gt;The ASP.NET MVC Framework&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;
&lt;span style="font-style: italic;"&gt;By: Scott Allen&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;
&lt;br style="font-style: italic;" /&gt;
&lt;span style="font-style: italic;"&gt;The ASP.NET MVC framework is an alternative framework for building web applications with ASP.NET. In this introduction to the new framework, we will see how the Model View Controller design pattern helps us to maintain a separation of concerns and produce testable, maintainable software. We will also look at the URL routing system and discuss the implications of the new framework for .NET web developers.&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;
&lt;br style="font-style: italic;" /&gt;
&lt;span style="font-style: italic;"&gt;Time:&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;
&lt;span style="font-style: italic;"&gt;1/2/2008 – 6:30PM&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;
&lt;br style="font-style: italic;" /&gt;
&lt;span style="font-style: italic;"&gt;Location:&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;
&lt;span style="font-style: italic;"&gt;HCC Business Training Center&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;
&lt;span style="font-style: italic;"&gt;6751 Columbia Gateway Drive&lt;/span&gt;&lt;br style="font-style: italic;" /&gt;
&lt;span style="font-style: italic;"&gt;Columbia, MD 21046&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Hope to see a great crowd there!&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118135"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=118135" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Podwysocki/aggbug/118135.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Matthew Podwysocki</dc:creator>
            <guid>http://geekswithblogs.net/Podwysocki/archive/2008/01/02/118135.aspx</guid>
            <pubDate>Wed, 02 Jan 2008 07:21:33 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Podwysocki/comments/118135.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Podwysocki/archive/2008/01/02/118135.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Podwysocki/comments/commentRss/118135.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Podwysocki/services/trackbacks/118135.aspx</trackback:ping>
        </item>
        <item>
            <title>ASP.NET Extensions and MVC Code Samples</title>
            <link>http://geekswithblogs.net/Podwysocki/archive/2007/12/18/117806.aspx</link>
            <description>As noted in some of my previous posts, there is a lot of excitement around the ASP.NET 3.5 extensions including MVC, Dynamic Data, Silverlight and so on.  I have a few samples I'll be posting within the week using ASP.NET MVC with such things as Spring.NET, Castle Windsor, Object Builder and so on.  In the mean time, I'm still working on the Spec# posts and some SharePoint Model View Presenter I hope to get out soon.&lt;br /&gt;
&lt;br /&gt;
Anyhow, there are some great links out there for doing cool stuff with ASP.NET MVC:&lt;br /&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/12/14/new-asp-net-dynamic-data-support.aspx"&gt;ASP.NET Dynamic Data Support&lt;/a&gt; - ScottGu builds dynamic web pages using LINQ to SQL object model without having to create any pages manuall&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://chadmyers.com/Blog/archive/2007/12/13/using-jquery-with-asp.net-mvc.aspx"&gt;Using jQuery with ASP.NET MVC&lt;/a&gt; - Chad Myers uses &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt; to demo the Edit in Place demo using ASP.NET MVC.&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.chadmyers.com/Blog/archive/2007/12/10/using-script.aculo.us-with-asp.net-mvc.aspx"&gt;Using script.aculo.us with ASP.NET MVC&lt;/a&gt; - Chad Myers once again tries to get &lt;a href="http://wiki.script.aculo.us/scriptaculous/"&gt;script.aculo.us&lt;/a&gt; to work with ASP.NET MVC.&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://blog.wekeroad.com/2007/12/14/aspnet-mvc-choosing-your-data-access-method/"&gt;ASP.NET MVC Choose Your Data Access&lt;/a&gt; - Rob Conery, an ASP.NET team member discusses using &lt;a href="http://msdn2.microsoft.com/en-us/library/bb425822.aspx"&gt;LinqToSql&lt;/a&gt;, &lt;a href="http://www.nhibernate.org/"&gt;NHibernate&lt;/a&gt;, and &lt;a href="http://www.subsonicproject.com/"&gt;Subsonic&lt;/a&gt; as the data access models for ASP.NET MVC.&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://aspadvice.com/lists/SignUp/list.aspx?l=275&amp;amp;c=17"&gt;ASP.NET MVC Mailing List&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://forums.asp.net/1146.aspx"&gt;ASP.NET MVC Forum&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://codeeleven.blogspot.com/2007/12/aspnet-mvc-routebuilder-httpmodule.html"&gt;ASP.NET MVC RouteBuilder HTTPModule&lt;/a&gt; released - Jonathan Holland with the help of &lt;a href="http://weblogs.asp.net/leftslipper/default.aspx"&gt;Elion Lipton&lt;/a&gt; worked on createing an HTTPModule to allow storing of routing rules in the web.config instead of the Route using an anonymous class.  &lt;a href="http://www.codeplex.com/RouteBuilder"&gt;RouteBuilder&lt;/a&gt; is availble on Codeplex.&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://myheadsexploding.com/archive/2007/12/13/routing-revisited.aspx"&gt;Routing Revisited&lt;/a&gt; - Sean Lynch talks about new routing scenarios and where the current Route object falls short.&lt;/li&gt;
&lt;/ul&gt;
Develop, mentor and inspire!&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117806"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117806" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Podwysocki/aggbug/117806.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Matthew Podwysocki</dc:creator>
            <guid>http://geekswithblogs.net/Podwysocki/archive/2007/12/18/117806.aspx</guid>
            <pubDate>Tue, 18 Dec 2007 19:35:11 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Podwysocki/comments/117806.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Podwysocki/archive/2007/12/18/117806.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Podwysocki/comments/commentRss/117806.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Podwysocki/services/trackbacks/117806.aspx</trackback:ping>
        </item>
        <item>
            <title>MVC Contrib Progress</title>
            <link>http://geekswithblogs.net/Podwysocki/archive/2007/12/14/117709.aspx</link>
            <description>In a previous post, I mentioned that &lt;a href="http://codebetter.com/blogs/jeffrey.palermo/"&gt;Jeffrey Palermo&lt;/a&gt; launched &lt;a href="http://mvccontrib.org"&gt;MVCContrib&lt;/a&gt; to serve as community contributions to the &lt;a href="http://asp.net/downloads/3.5-extensions/"&gt;ASP.NET MVC ASP.NET extensions&lt;/a&gt;.  Since that time, there has been a lot of activity on that front.  &lt;br /&gt;
&lt;br /&gt;
Current contributions include:&lt;br /&gt;
&lt;ul&gt;
    &lt;li&gt;IoC container controller factories for  containers: StructureMap, Windsor, Spring.Net and ObjectBuilder&lt;/li&gt;
    &lt;li&gt;Extra View Helpers&lt;/li&gt;
    &lt;li&gt;Generic Test Doubles for Unit Testing&lt;/li&gt;
&lt;/ul&gt;
Very cool stuff and let's see more contributions on that front.  Develop with passion!&lt;p&gt;&lt;a href="http://www.pheedo.com/click.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117709"&gt;&lt;img src="http://www.pheedo.com/img.phdo?x=6cda6ad746d942b9a1110d0715a4fa12&amp;u=117709" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;iframe src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;PageID=31016&amp;amp;SiteID=1" width=1 height=1 Marginwidth=0 Marginheight=0 Hspace=0 Vspace=0 Frameborder=0 Scrolling=No&gt;
&lt;script language='javascript1.1' src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Browser=NETSCAPE4&amp;amp;NoCache=True&amp;PageID=31016&amp;amp;SiteID=1"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;a href="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Click&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" target="_blank"&gt;
&lt;img src="http://ads.geekswithblogs.net/a.aspx?ZoneID=5&amp;amp;Task=Get&amp;amp;Mode=HTML&amp;amp;SiteID=1&amp;amp;PageID=31016" width="1" height="1" border="0"  alt=""&gt;&lt;/a&gt;
&lt;/noscript&gt;
&lt;/iframe&gt;
&lt;img src="http://geekswithblogs.net/Podwysocki/aggbug/117709.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Matthew Podwysocki</dc:creator>
            <guid>http://geekswithblogs.net/Podwysocki/archive/2007/12/14/117709.aspx</guid>
            <pubDate>Fri, 14 Dec 2007 19:10:35 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Podwysocki/comments/117709.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Podwysocki/archive/2007/12/14/117709.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Podwysocki/comments/commentRss/117709.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Podwysocki/services/trackbacks/117709.aspx</trackback:ping>
        </item>
    </channel>
</rss>