<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/"><channel><title>patterns and practices</title><link>http://www.agileprogrammer.com/dotnetguy/category/108.aspx</link><description>patterns and practices</description><managingEditor>Brad Wilson</managingEditor><dc:language>en-US</dc:language><generator>.Text Version 0.95.2005.109</generator><item><dc:creator>Brad Wilson</dc:creator><title>p&amp;amp;p Summit, Redmond WA, Nov 5-9</title><link>http://www.agileprogrammer.com/dotnetguy/archive/2007/10/20/23600.aspx</link><pubDate>Sat, 20 Oct 2007 18:27:00 GMT</pubDate><guid>http://www.agileprogrammer.com/dotnetguy/archive/2007/10/20/23600.aspx</guid><description>&lt;p&gt;It's hard to believe that another &lt;a href="http://www.pnpsummit.com/west2007.aspx"&gt;p&amp;amp;p Summit is almost here&lt;/a&gt;... the time has really flown by. This year I'll be co-presenting twice. The line-up of keynote talks looks positively awesome this year! (Despite Scott Hansleman's protestations to the contrary, he does belong in that group of intelligent and talented people. ;)&lt;/p&gt; &lt;p&gt;The first talk, "Yet another agile talk on agility", is one where &lt;a href="http://www.peterprovost.org/"&gt;Peter&lt;/a&gt; and I will answer questions from the audience about our experiences running agile teams, inside and outside of Microsoft. We run the talk just like an agile project, a technique that I first saw used by &lt;a href="http://www.agileprogrammer.com/oneagilecoder/"&gt;Brian Button&lt;/a&gt;. You start by creating an initial backlog (i.e., people ask questions and you write them down), then you go through an iterative stack-ranking and execution (i.e., answer them) process with time-boxed iterations (i.e., 5 minutes). It's pretty interesting process and never yields the same talk twice. It's also awesome in its ability to require no prepartion. ;)&lt;/p&gt; &lt;p&gt;The second talk, "Dependency Injection Frameworks", is one where &lt;a href="http://www.agileprogrammer.com/scottden/"&gt;Scott&lt;/a&gt; and I will talk about the work we've done evolving ObjectBuilder 2.0, as well as some sample containers that we have on the &lt;a href="http://www.codeplex.com/ObjectBuilder"&gt;ObjectBuilder CodePlex project space&lt;/a&gt;. A lot of the work there has come from real container needs in the wild, and some of the concerns about the complicated architecture of ObjectBuilder 1.0 have been addressed. In addition to our new containers and new architecture, we'll show off some of the new core features we've added, including a lightweight version of the CAB EventBroker and a method-interception system modeled after Enterprise Library's Policy Injection App Block.&lt;/p&gt; &lt;p&gt;I'm trying to make a commitment to be there all through the first 3 days so that people can sideline me both before and after the talks. Unfortunately, I won't be able to be there for the last 2 days. If you're going to be there, and want to talk about any of the projects I've got going on right now (&lt;a href="http://www.codeplex.com/"&gt;CodePlex&lt;/a&gt;, ObjectBuilder, &lt;a href="http://www.codeplex.com/xunit"&gt;xUnit.net&lt;/a&gt;, etc.) please don't hesitate to find me. You can also use the &lt;a href="http://www.agileprogrammer.com/dotnetguy/contact.aspx"&gt;Contact&lt;/a&gt; page here on the blog if you want to make sure I find time for you.&lt;/p&gt; &lt;p&gt;Hope to see you there!&lt;/p&gt;&lt;img src ="http://www.agileprogrammer.com/dotnetguy/aggbug/23600.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Brad Wilson</dc:creator><title>CAB is dead! Long live CAB!</title><link>http://www.agileprogrammer.com/dotnetguy/archive/2007/06/06/22858.aspx</link><pubDate>Wed, 06 Jun 2007 09:50:00 GMT</pubDate><guid>http://www.agileprogrammer.com/dotnetguy/archive/2007/06/06/22858.aspx</guid><description>&lt;p&gt;When I left p&amp;amp;p, one of the teams I was considering was the &lt;a href="http://windowsclient.net/Acropolis/Default.aspx"&gt;Acropolis&lt;/a&gt; team. It would've been an opportunity to go do CAB as a fully supported development environment enabled thing, rather than just a raw framework from a few people. I'm glad they've announced it now, so people can see the direction that Microsoft is headed in. Glenn Block from p&amp;amp;p has a post about the &lt;a href="http://blogs.msdn.com/gblock/archive/2007/06/06/acropolis-the-future-of-smart-client.aspx"&gt;future of the smart client p&amp;amp;p deliverables&lt;/a&gt; in light of this announcement, too.&lt;/p&gt; &lt;p&gt;I wonder if there's someone on the net who thinks he can re-implement Acropolis in 15 minutes? ;)&lt;/p&gt;&lt;img src ="http://www.agileprogrammer.com/dotnetguy/aggbug/22858.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Brad Wilson</dc:creator><title>ObjectBuilder and CodePlex</title><link>http://www.agileprogrammer.com/dotnetguy/archive/2007/06/01/22833.aspx</link><pubDate>Fri, 01 Jun 2007 16:17:00 GMT</pubDate><guid>http://www.agileprogrammer.com/dotnetguy/archive/2007/06/01/22833.aspx</guid><description>&lt;p&gt;In my 15 months at patterns &amp;amp; practices, I spent most of my time working on CAB and Smart Client Software Factory. A big part of time I spent on CAB was working on &lt;a href="http://www.codeplex.com/ObjectBuilder"&gt;ObjectBuilder&lt;/a&gt;, a framework for making dependency injection containers. At CodePlex, we use ObjectBuilder in some of our deliverables, including our source control client (which is what I've been working on for the last 6 months, give or take).&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.agileprogrammer.com/scottden"&gt;Scott Densmore&lt;/a&gt; and I have spent the last couple days doing significant refactoring over the ObjectBuilder core itself, in the context of our CodePlex Container. Although you'll find this code in the Samples area of the ObjectBuilder project, it's more than just a simple sample. This is actually the live working space for the container we use in CodePlex. We uploaded the source code a couple days ago, and just checked in our biggest refactoring today.&lt;/p&gt; &lt;p&gt;In addition to these changes, there are two major things we'd like to do with this container. First will be method interception, based loosely on p&amp;amp;p's Policy Injection Application Block. The other is an Event Broker that doesn't require the use of CAB or WinForms.&lt;/p&gt; &lt;p&gt;If you'd like to follow our progress, we'll be &lt;a href="http://www.codeplex.com/ObjectBuilder/Thread/View.aspx?ThreadId=10844"&gt;posting about it here&lt;/a&gt;.&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:4ada7dce-1d9d-413d-8b59-2dbfad13dd90" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;i&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/ObjectBuilder" rel="tag"&gt;ObjectBuilder&lt;/a&gt;, &lt;a href="http://technorati.com/tags/IoC" rel="tag"&gt;IoC&lt;/a&gt;, &lt;a href="http://technorati.com/tags/dependency%20injection" rel="tag"&gt;dependency injection&lt;/a&gt;, &lt;a href="http://technorati.com/tags/patterns%20&amp;amp;%20practices" rel="tag"&gt;patterns &amp;amp; practices&lt;/a&gt;, &lt;a href="http://technorati.com/tags/CAB" rel="tag"&gt;CAB&lt;/a&gt;, &lt;a href="http://technorati.com/tags/CodePlex" rel="tag"&gt;CodePlex&lt;/a&gt;&lt;/i&gt;&lt;/div&gt;&lt;img src ="http://www.agileprogrammer.com/dotnetguy/aggbug/22833.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Brad Wilson</dc:creator><title>Frameworks vs. Libraries</title><link>http://www.agileprogrammer.com/dotnetguy/archive/2007/05/30/22819.aspx</link><pubDate>Wed, 30 May 2007 00:03:00 GMT</pubDate><guid>http://www.agileprogrammer.com/dotnetguy/archive/2007/05/30/22819.aspx</guid><description>&lt;P&gt;There's a bit of heat about CAB and p&amp;amp;p going on right now, and I haven't decided if I want to jump in yet.&lt;/P&gt;
&lt;P&gt;I do, though, want to address &lt;A href="http://codebetter.com/blogs/jeremy.miller/archive/2007/05/28/a-train-of-thought-may-21-28-2007-edition.aspx"&gt;a point by Jeremy Miller&lt;/A&gt;:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;Tools that amount to "just something that you use" like NHibernate, or log4net (but I'm not letting them off the hook for the versioning and breaking API hell a couple years ago) are not intrusive.&amp;nbsp; You just use them when you need the service that they provide.&amp;nbsp; Tools and frameworks that are intrusive into your code, or even worse, require you to wrap your application around their opinionated structure are a different story altogether.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://www.peterprovost.org/"&gt;Peter&lt;/A&gt; describes the former (log4net, etc.) and libraries and the latter (CAB) as frameworks.&lt;/P&gt;
&lt;P&gt;I can take an existing application and add logging with log4net, because it makes very few demands on me. I basically make calls to it. Using CAB in an application is a commitment, because it describes the way you should build your application. It's a framework, and in most cases, it's calling me rather than me calling it. Peter's "easy test" to tell a framework from a library is the Hollywood principal: if the thing is always saying "Don't call me, I'll call you", then it's a framework.&lt;/P&gt;
&lt;P&gt;There's no question that the investment required to use a framework is significantly larger than the investment required to use a library.&lt;/P&gt;
&lt;P&gt;And, my 2c, is if there is any single failing of Enterprise Library, it is where it tries to behave like a framework where it should instead be acting like a library. Baking the configuration system into EntLib and making it hard to use without it is the most obvious example of this behavior. &lt;A href="http://www.agileprogrammer.com/scottden/"&gt;Scott&lt;/A&gt; and I (and others) have had many discussions about this in the past (read &lt;A href="http://www.agileprogrammer.com/scottden/archive/2007/05/23/22721.aspx"&gt;his latest blog post&lt;/A&gt; for some in-depth thinking about it).&lt;/P&gt;&lt;img src ="http://www.agileprogrammer.com/dotnetguy/aggbug/22819.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Brad Wilson</dc:creator><title>Policy Injection App Block</title><link>http://www.agileprogrammer.com/dotnetguy/archive/2007/02/23/22252.aspx</link><pubDate>Fri, 23 Feb 2007 10:19:00 GMT</pubDate><guid>http://www.agileprogrammer.com/dotnetguy/archive/2007/02/23/22252.aspx</guid><description>&lt;p&gt;patterns &amp;amp; practices will soon be releasing a CTP of EntLib which includes a new block: the Policy Injection Application Block. This is a block that is all about helping you enable cross-cutting concerns without disrupting your existing development process.&lt;/p&gt; &lt;p&gt;I'm very excited about this block because there are immediate places we could put this to work in CodePlex, both for testing code and production code.&lt;/p&gt; &lt;p&gt;And, of course, I hope that they decide to roll the infrastructure pieces into the ObjectBuilder code base where it belongs. ;)&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/tomholl/archive/2007/02/23/announcing-the-policy-injection-application-block.aspx"&gt;Tom Hollander's announcement post&lt;/a&gt;&lt;br&gt;&lt;a href="http://blogs.msdn.com/edjez/archive/2007/02/23/policy-injection-app-block-behind-the-scenes.aspx"&gt;EdJez's technical details post&lt;/a&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:0e534121-41de-4b2f-a1d2-6cd257d405b3" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;i&gt;Tags: &lt;a href="http://technorati.com/tags/ObjectBuilder" rel="tag"&gt;ObjectBuilder&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Enterprise%20Library" rel="tag"&gt;Enterprise Library&lt;/a&gt;, &lt;a href="http://technorati.com/tags/patterns%20&amp;amp;%20practices" rel="tag"&gt;patterns &amp; practices&lt;/a&gt;, &lt;a href="http://technorati.com/tags/dependency%20injection" rel="tag"&gt;dependency injection&lt;/a&gt;, &lt;a href="http://technorati.com/tags/CodePlex" rel="tag"&gt;CodePlex&lt;/a&gt;, &lt;a href="http://technorati.com/tags/policy%20injection" rel="tag"&gt;policy injection&lt;/a&gt;&lt;/i&gt;&lt;/div&gt;&lt;img src ="http://www.agileprogrammer.com/dotnetguy/aggbug/22252.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Brad Wilson</dc:creator><title>P&amp;P Summit: Presenting the Model</title><link>http://www.agileprogrammer.com/dotnetguy/archive/2006/10/12/20082.aspx</link><pubDate>Thu, 12 Oct 2006 08:32:00 GMT</pubDate><guid>http://www.agileprogrammer.com/dotnetguy/archive/2006/10/12/20082.aspx</guid><description>&lt;p&gt;My slides and code from my talk "Presenting the Model" are available for &lt;a href="http://www.agileprogrammer.com/uploads/bradwils/pnp-summit-redmond-2006-mvp.zip"&gt;download&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Now playing:&lt;/strong&gt; &lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?artistTerm=Dave Matthews Band"&gt;Dave Matthews Band&lt;/a&gt; - &lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?songTerm=If I Had It All&amp;amp;artistTerm=Dave Matthews Band"&gt;If I Had It All&lt;/a&gt;&lt;/p&gt;&lt;img src ="http://www.agileprogrammer.com/dotnetguy/aggbug/20082.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Brad Wilson</dc:creator><title>P&amp;P Summit: Micro-Pairing</title><link>http://www.agileprogrammer.com/dotnetguy/archive/2006/10/12/20081.aspx</link><pubDate>Thu, 12 Oct 2006 08:32:00 GMT</pubDate><guid>http://www.agileprogrammer.com/dotnetguy/archive/2006/10/12/20081.aspx</guid><description>&lt;p&gt;The&amp;nbsp;slides and code from our talk "Micro-Pairing" are available for &lt;a href="http://www.agileprogrammer.com/uploads/bradwils/pnp-summit-redmond-2006-micropairing.zip"&gt;download&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Now playing:&lt;/strong&gt; &lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?artistTerm=Dave Matthews Band"&gt;Dave Matthews Band&lt;/a&gt; - &lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?songTerm=If I Had It All&amp;amp;artistTerm=Dave Matthews Band"&gt;If I Had It All&lt;/a&gt;&lt;/p&gt;&lt;img src ="http://www.agileprogrammer.com/dotnetguy/aggbug/20081.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Brad Wilson</dc:creator><title>P&amp;P Summit: Dependency Injection Architecture</title><link>http://www.agileprogrammer.com/dotnetguy/archive/2006/10/10/20039.aspx</link><pubDate>Tue, 10 Oct 2006 07:32:00 GMT</pubDate><guid>http://www.agileprogrammer.com/dotnetguy/archive/2006/10/10/20039.aspx</guid><description>&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I've posted my slides and source code from the Dependency Injection talk yesterday, to the &lt;a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=ObjectBuilder"&gt;ObjectBuilder space on CodePlex&lt;/a&gt; [&lt;a href="http://www.codeplex.com/Project/FileDownload.aspx?ProjectName=ObjectBuilder&amp;amp;DownloadId=3085"&gt;download&lt;/a&gt;].&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Now playing:&lt;/strong&gt; &lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?artistTerm=Opeth"&gt;Opeth&lt;/a&gt; - &lt;a href="http://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?songTerm=Reverie/Harlequin Forest&amp;amp;artistTerm=Opeth"&gt;Reverie/Harlequin Forest&lt;/a&gt;&lt;/p&gt;&lt;img src ="http://www.agileprogrammer.com/dotnetguy/aggbug/20039.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Brad Wilson</dc:creator><title>Speaking at p&amp;p Summit in Redmond</title><link>http://www.agileprogrammer.com/dotnetguy/archive/2006/09/26/19655.aspx</link><pubDate>Tue, 26 Sep 2006 10:24:00 GMT</pubDate><guid>http://www.agileprogrammer.com/dotnetguy/archive/2006/09/26/19655.aspx</guid><description>&lt;p&gt;&lt;a href="http://www.pnpsummit.com/west2006schedule.aspx"&gt;&lt;img alt="patterns and practices Summit" src="http://www.pnpsummit.com/images/pnpSummitHero.jpg" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.hanselman.com/blog/PatternsPracticesSummitWest2006.aspx"&gt;Scott's post&lt;/a&gt; reminded me that I've been a bit of a slacker in not mentioning that I'll be speaking at the p&amp;amp;p Summit in Redmond in a couple weeks. This year I'll be giving three talks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Dependency Injection Architecture&lt;/strong&gt; talks about what dependency injection is, why people use it, and how to use p&amp;amp;p's &lt;a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=ObjectBuilder"&gt;ObjectBuilder&lt;/a&gt; to make your own dependency injection frameworks for your application. This talk will be similar to the talk I gave in Boston earlier this year.&lt;br /&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Presenting the Model&lt;/strong&gt; (still listed with its old title,&amp;nbsp;"TDD for GUIs") talks about how write testable code&amp;nbsp;right up to the UI layer (sometimes called "testing under the glass"). I'll show the Model-View-Presenter design pattern and use Windows Forms as an example of writing testable GUI applications.&lt;br /&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Micro-Pairing&lt;/strong&gt; (co-presented with Peter Provost) describes our refinement of the eXtreme Programming practices of Pair Programming and Test Driven Development into a fun development practices that feels less like work and more like playing. It encourages frequent micro-discussions about design and implementation direction to help you get the most out of your coding session.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Hope to see you there!&lt;/p&gt;&lt;img src ="http://www.agileprogrammer.com/dotnetguy/aggbug/19655.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Brad Wilson</dc:creator><title>Smart Client Software Factory Ships</title><link>http://www.agileprogrammer.com/dotnetguy/archive/2006/07/01/16561.aspx</link><pubDate>Sat, 01 Jul 2006 11:59:00 GMT</pubDate><guid>http://www.agileprogrammer.com/dotnetguy/archive/2006/07/01/16561.aspx</guid><description>&lt;P&gt;The last project I worked on at p&amp;amp;p was the &lt;A href="http://codegallery.gotdotnet.com/scbat"&gt;Smart Client Software Factory&lt;/A&gt; (previously known as Smart Client Baseline Architecture Toolkit, or SC-BAT).&lt;/P&gt;
&lt;P&gt;I just got the notice that &lt;A href="http://msdn.microsoft.com/smartclientfactory"&gt;they shipped to MSDN&lt;/A&gt; yesterday. Congratulations to the team!&lt;/P&gt;&lt;img src ="http://www.agileprogrammer.com/dotnetguy/aggbug/16561.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>