Tuesday, May 29, 2007
« Persistence and Tracking Service for Wor... | Main | Google Gears makes web apps work offline... »
Over the weekend there was quit a flurry of heated discussion about the Composite UI Application Block (CAB) that was developed by the Patterns and Practices group at Microsoft.  It started with Ayende's " Why I don't like Patterns & Practices efforts " post, and continued with Sam On CAB and P&P and More on CAB and PAG .  Things continued with Ayende's Sam Gentile is mad at me , and On the CAB Again, and Be Silent they are Agile.  Not wanting to leave all the fun to Sam and Ayende, Hammet (of Castle fame) responded with The CAB way, and signs of community immaturity , Chris Holmes jumped in with his Ayende Bashes P&P and finally Adi offers a caution with his Caution: This blog contains personal opinions post.

From my perspective, there is a bit of complexity with CAB.  However, as some others have pointed out in the comments to the posts mentioned above, thats more due to the fact that CAB encompasses a couple different components that utilize patterns that not everyone who is starting out with CAB is comfortable with.  When you get past the initial hurdles, CAB can be broken down pretty simply.  It provides dependency injection so that the various components within your application can be loosely coupled and injected at runtime (similar to Windsor, Spring, etc).  It provides an eventing infrastructure that allows for the events and event handlers within your application to be loosely coupled (you might be able to think of it as a message bus for your UI), and it provides a number of infrastructure services that allow for your application to be broken up into a modules that can be used to create an application that can be dynamically composed (think MasterPages with a little bit of a plugin type architecture for building the UI at runtime).  For those starting out it requires familiarity with dependency injection, model view presenter or model view controller, loosely coupled events/commands, as well as an understanding of some of the requirements for a dynamically composed UI.  While it's not something I would use for every application I develop, I think it's a good fit for certain applications. For anything web related I'd steer clear of something architected in a similar fashion and go with MonoRail or if you can swing it Ruby on Rails. :)

Unfortunately, as I'm sure many in the chain of blog posts above would attest, blog posts aren't always the most effective way to carry out a discussion.  It doesn't help when those involved are a group of deeply passionate people who have strong feelings and opinions.  I think the primary points of each person's blog posts are important, relevant, and worth a continued discussion.  As Ayende points out, there are many things within Microsoft, as well as within the deliverables provided by P&P that seem to be more complex then they need to be.  As Sam states, we shouldn't lose sight of the fact that that P&P group is one of the few openly Agile groups within Microsoft.  I really believe they're trying to do the right things for customers, they're trying to do as many things as possible to make sure they're not developing in a vacuum, and that they're working on the things that their customers really need.  Are they perfect, absolutely not.  Are they trying, I think so.  Are the deliverables they offer for everyone, no.  Are their deliverables appropriate for some, yes.

I think Hammet brings up another important point for us all to think about regarding our community.  We have a lot to learn, and a lot of areas in which we can grow.  Insulting one another, isn't the way to go.  Letting our emotions get the best of us is something we should try and avoid.  However, at the same time we don't want to lose our passion and fire for what we believe in.  Let us remember that we're all part of the same community, and ultimately I think we're all after the same things.  When our emotions run high and we either say things that we wish we hadn't said, or state things that aren't exactly true, we need to take a step back and realize that sometimes our emotions do get the best of us.  But as far as I'm concerned, that's part of the process.  We're all human.

Over the last couple of days I've spoken with Sam a few times about what's unfolded.  For those of you who don't know, I have a unique perspective on the situation since I work with Sam.  He's a deeply passionate individual who loves technology.  He has an unquenchable thirst for new information as our printers at work can attest to.  He genuinely wants to help the .NET community, and one of the ways that he's done that is in pointing out some inaccuracies in Ayende's post on CAB and P&P.  Based on conversations Sam and I have had in the past, I think besides some of the inaccuracies on how CAB was developed, Sam agrees with most (or maybe just some) of what Ayende has said. As Jeremy pointed out, bringing up things that were said years ago isn't the way to address any problems you might have with Sam on how he voiced his concerns.  Sam is a perfectionist, and will welcome any positive and constructive feedback you can provide him.  My constructive feedback is to not let your emotions lead you to say things you'll regret the next day.  But I'd also suggest you keep your passion, and keep doing the things that make you you.  At the end of the day the most important things for all of us is to be happy.  Don't let what's happened in the past get you down.  We live and we learn.  All we can hope for is that we better ourselves over time.  Let's leave the personal attacks to the Java community (just kidding any of you Java peeps out there), and hope we can make the .NET developer community a better place for those of us who care about producing great software.

Wednesday, May 30, 2007 3:01:56 AM (Eastern Daylight Time, UTC-04:00)  #    Disclaimer  |  Comments [0]  |  Trackback