<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://dotnet.org.za/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Scott Dukes&amp;#39; Blog</title><link>http://dotnet.org.za/scott/default.aspx</link><description>Software Engineering, OOAD, Patterns, .NET, XHTML, CSS and more</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP2 (Build: 20611.960)</generator><item><title>Interfaces vs Abstract [Base] Classes Reloaded</title><link>http://dotnet.org.za/scott/archive/2006/07/07/54032.aspx</link><pubDate>Fri, 07 Jul 2006 19:56:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:54032</guid><dc:creator>scott</dc:creator><slash:comments>725</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/scott/rsscomments.aspx?PostID=54032</wfw:commentRss><comments>http://dotnet.org.za/scott/archive/2006/07/07/54032.aspx#comments</comments><description>&lt;p&gt;About a year ago I participated in a heated online discussion about the merits of &lt;a href="/scott/archive/2005/04/29/19205.aspx" title="Interfaces vs Abstract Base Classes"&gt;Interfaces vs Abstract [Base] Classes&lt;/a&gt;. Justin felt that Interfaces weren’t worth the code they were written on, and I responded with their merits [in my opinion]. As always time and experience tend to temper my opinions on things. &lt;/p&gt;

&lt;h2&gt;Abstract Classes &lt;em&gt;Are&lt;/em&gt; Interfaces&lt;/h2&gt;

&lt;p&gt;Reading &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0596007124/scottdukesnet-20" title="Head First Design Patterns"&gt;Head First Design Patterns&lt;/a&gt;, I came upon the following quote:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;“Program to an &lt;em&gt;interface&lt;/em&gt;” really means “Program to a &lt;em&gt;supertype&lt;/em&gt;”.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This means that using an Abstract Class &lt;strong&gt;is&lt;/strong&gt; &lt;em&gt;programming to an interface&lt;/em&gt;. I’m afraid both Justin and I were a little too literal in our interpretations of that statement. &lt;a href="http://martinfowler.com/ieeeSoftware/moduleAssembly.pdf" title="Module Assembly"&gt;Martin Fowler recommends&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;You should always use the most abstract &lt;em&gt;interface or class&lt;/em&gt; possible in type declarations.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The important aspect to note is to use an abstraction; whether it be an abstract class or the &lt;code&gt;interface&lt;/code&gt; keyword in C## or Java (hereafter referred to as an explicit interface). It means using an &lt;strong&gt;&lt;em&gt;abstraction&lt;/em&gt;&lt;/strong&gt; to decouple the implementation of some piece of functionality from its users (clients) thereby allowing the implementations to vary without affecting the clients. The choice of which language construct to use ultimately boils down to how we intend the implementations to vary (and even this choice can be changed later using &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0201485672/scottdukesnet-20" title="Refactoring: Improving the Design of Existing Code"&gt;Refactoring&lt;/a&gt;).&lt;/p&gt;

&lt;h2&gt;So Which One Should I Use?&lt;/h2&gt;

&lt;p&gt;Hristo Yankov referred me to the MSDN Library which has some guidance in &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbconabstractclassesversusinterfaces.asp" title="Recommendations for Abstract Classes vs. Interfaces"&gt;Recommendations for Abstract Classes vs. Interfaces&lt;/a&gt;; specifically:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;ul&gt;
  &lt;li&gt;&lt;p&gt;If you anticipate creating multiple versions of your component, create an abstract class. Abstract classes provide a simple and easy way to version your components. By updating the base class, all inheriting classes are automatically updated with the change. Interfaces, on the other hand, cannot be changed once created. If a new version of an interface is required, you must create a whole new interface.&lt;/p&gt;&lt;/li&gt;
  &lt;li&gt;&lt;p&gt;If the functionality you are creating will be useful across a wide range of disparate objects, use an interface. Abstract classes should be used primarily for objects that are closely related, whereas interfaces are best suited for providing common functionality to unrelated classes.&lt;/p&gt;&lt;/li&gt;
  &lt;li&gt;&lt;p&gt;If you are designing small, concise bits of functionality, use interfaces. If you are designing large functional units, use an abstract class.&lt;/p&gt;&lt;/li&gt;
  &lt;li&gt;&lt;p&gt;If you want to provide common, implemented functionality among all implementations of your component, use an abstract class. Abstract classes allow you to partially implement your class, whereas interfaces contain no implementation for any members.&lt;/p&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;On the whole I agree with the guidance present, with one caveat: it assumes reasonable foreknowledge of both the future usage of your types and the evolution of their implementations. In practice this is seldom known or even knowable at design-time. In my experience, designs tend to change over time as new functionality is added to the system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclaimer&lt;/strong&gt;: I tend to favour XP style development practices (TDD, Refactoring, Evolutionary Design) over extensive upfront design.&lt;/p&gt;

&lt;h2&gt;An Evolutionary Design Case Study&lt;/h2&gt;

&lt;h3&gt;A Simple Solution&lt;/h3&gt;

&lt;p&gt;As an example, consider the following case study of a recent project that I wrote to report the differences between versions of custom webservice proxy classes. The initial requirement was to output the differences between two proxies to the console; I used the following simple design.&lt;/p&gt;

&lt;p&gt;&lt;img src="/photos/scott/images/54029/original.aspx" alt="Initial OutputGenerator Implementation" title="Initial OutputGenerator Implementation" align="middle" /&gt;&lt;/p&gt;

&lt;p&gt;The application compares the two proxies using the &lt;code&gt;Compare()&lt;/code&gt; method of the &lt;code&gt;ProxyComparer&lt;/code&gt; class, obtaining a &lt;code&gt;ProxyDifferences&lt;/code&gt; instance in result. This class encapsulates the specific differences: methods added, changed, or deleted. The &lt;code&gt;ProxyDifferences&lt;/code&gt; instance is then passed to an &lt;code&gt;OutputGenerator&lt;/code&gt; object which generated a textual report of the differences.&lt;/p&gt;

&lt;h3&gt;The Plot Thickens&lt;/h3&gt;

&lt;p&gt;Later an additional requirement surfaced in being able to generate the report in XML instead - for use in the generation of an HTML report via an XSLT transformation. Now the purpose of &lt;em&gt;programming to the interface&lt;/em&gt; is to [relatively] insulate the client [code] from changes in the implementation. In this case there was no abstract interface only the implicit interface of the &lt;code&gt;OutputGenerator&lt;/code&gt; class.&lt;/p&gt;

&lt;p&gt;In order to both implement the new requirement (XML output) and minimise the effect on the client I needed to introduce an interface abstraction for the OutputGenerator. The generation algorithm for textual output was sufficiently similar to that required for XML output [with a bit of work] for me to want to reuse it. I ended up refactoring to a &lt;em&gt;Template Method&lt;/em&gt; [GOF] by turning &lt;code&gt;OutputGenerator&lt;/code&gt; into an abstract class with concrete implemenations for the two generation mechanisms by means of an &lt;a href="http://refactoring.com/catalog/extractSubclass.html" title="Extract Subclass"&gt;Extract Subclass&lt;/a&gt; [F] refactoring.&lt;/p&gt;

&lt;p&gt;&lt;img src="/photos/scott/images/54030/original.aspx" alt="OutputGenerator Implemented as an Abstract Class" title="OutputGenerator Implemented as an Abstract Class" /&gt;&lt;/p&gt;

&lt;h3&gt;Coming Full Circle&lt;/h3&gt;

&lt;p&gt;A week or so later the need to generate both text (to the console) and XML (to file) simualtaneously arose. To minimise the effect on the client I needed to maintain the behaviorial contract of the interface while introducing the ability to generate one or more different outputs. The obvious choice was to introduce a &lt;em&gt;Composite&lt;/em&gt; [GOF] &lt;code&gt;OutputGenerator&lt;/code&gt; that could delegate to any number of contained &lt;code&gt;OutputGenerator&lt;/code&gt; objects, and which shared the common &lt;code&gt;OutputGenerator&lt;/code&gt; interface.&lt;/p&gt;

&lt;p&gt;To do this I could make the Generate() method virtual and override it in the composite, but this seemed to go against the spirit of the &lt;em&gt;Template Method&lt;/em&gt; [GOF] pattern, and the composite generation did not utilise the common generation implementation. I decided to introduce an explicit interface (&lt;code&gt;IOutputGenerator&lt;/code&gt;) by means of an &lt;a href="http://refactoring.com/catalog/extractInterface.html" title="Extract Inferface"&gt;Extract Interface&lt;/a&gt;[F] refactoring on the OutputGenerator and have the &lt;code&gt;CompositeOutputGenerator&lt;/code&gt; implement it.&lt;/p&gt;

&lt;p&gt;&lt;img src="/photos/scott/images/54031/original.aspx" alt="OutputGenerator Migrated to Use an Explicit Interface" title="OutputGenerator Migrated to Use an Explicit Interface" /&gt;&lt;/p&gt;

&lt;p&gt;This turned out to be a very effective and flexible solution which kept to the purpose of &lt;em&gt;programming to the interface&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;In summary, using either abstract classes or explicit interfaces satisfies the design goal of &lt;em&gt;program to the interface&lt;/em&gt;. Often it is not clear which to use at inception, only as new functionality is added to the system does the choice become clear, sometimes even migrating from one to the other. The important thing to keep in mind is the purpose behind this guideline - minimise the effect on existing clients of the interface however it may be implemented.&lt;/p&gt;

&lt;h2&gt;References&lt;/h2&gt;

&lt;p&gt;[GOF] &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0201633612/scottdukesnet-20"&gt;Design Patterns: Elements of Reusable Object-Oriented Software&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[F] &lt;a href="http://www.amazon.com/exec/obidos/ASIN/0201485672/scottdukesnet-20"&gt;Refactoring: Improving the Design of Existing Code&lt;/a&gt;&lt;/p&gt;

&lt;script type="text/javascript" src="http://www.assoc-amazon.com/s/link-enhancer?tag=scottdukesnet-20"&gt;&lt;/script&gt;
&lt;noscript&gt;&lt;img src="http://www.assoc-amazon.com/s/noscript?tag=scottdukesnet-20" alt="" /&gt;&lt;/noscript&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/scott/archive/2006/07/07/54032.aspx&amp;amp;;subject=Interfaces+vs+Abstract+%5bBase%5d+Classes+Reloaded" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2006/07/07/54032.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/scott/archive/2006/07/07/54032.aspx&amp;amp;;title=Interfaces+vs+Abstract+%5bBase%5d+Classes+Reloaded" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2006/07/07/54032.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/scott/archive/2006/07/07/54032.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2006/07/07/54032.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/scott/archive/2006/07/07/54032.aspx&amp;amp;title=Interfaces+vs+Abstract+%5bBase%5d+Classes+Reloaded" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2006/07/07/54032.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/scott/archive/2006/07/07/54032.aspx&amp;amp;;title=Interfaces+vs+Abstract+%5bBase%5d+Classes+Reloaded" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2006/07/07/54032.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/scott/archive/2006/07/07/54032.aspx&amp;amp;;title=Interfaces+vs+Abstract+%5bBase%5d+Classes+Reloaded&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2006/07/07/54032.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=54032" width="1" height="1"&gt;</description><category domain="http://dotnet.org.za/scott/archive/tags/OOAD/default.aspx">OOAD</category></item><item><title>Now that's cool! The Cold Heat Soldering Tool</title><link>http://dotnet.org.za/scott/archive/2005/04/29/19250.aspx</link><pubDate>Fri, 29 Apr 2005 18:33:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:19250</guid><dc:creator>scott</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/scott/rsscomments.aspx?PostID=19250</wfw:commentRss><comments>http://dotnet.org.za/scott/archive/2005/04/29/19250.aspx#comments</comments><description>&lt;p&gt;I found this on ThinkGeek: &lt;a href="http://www.thinkgeek.com/gadgets/tools/69d3/"&gt;The Cold Heat Soldering Tool&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;The Cold Heat Soldering Tool is a cordless tool that heats quickly and cools down nearly as fast. It creates the heat right in the proprietary tip material, making the tool 20 times more efficient than the average conventional soldering iron. The tip reaches 500ºF in less than 1 second for many types of joints and cools to the touch in a few seconds so you can put it away – without any waiting.&lt;/blockquote&gt;

&lt;p&gt;All this for only $19 (R115 excluding shipping). Gotta get me one of those.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/scott/archive/2005/04/29/19250.aspx&amp;amp;;subject=Now+that%27s+cool!+The+Cold+Heat+Soldering+Tool" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/29/19250.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/scott/archive/2005/04/29/19250.aspx&amp;amp;;title=Now+that%27s+cool!+The+Cold+Heat+Soldering+Tool" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/29/19250.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/scott/archive/2005/04/29/19250.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/29/19250.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/scott/archive/2005/04/29/19250.aspx&amp;amp;title=Now+that%27s+cool!+The+Cold+Heat+Soldering+Tool" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/29/19250.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/scott/archive/2005/04/29/19250.aspx&amp;amp;;title=Now+that%27s+cool!+The+Cold+Heat+Soldering+Tool" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/29/19250.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/scott/archive/2005/04/29/19250.aspx&amp;amp;;title=Now+that%27s+cool!+The+Cold+Heat+Soldering+Tool&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/29/19250.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=19250" width="1" height="1"&gt;</description><category domain="http://dotnet.org.za/scott/archive/tags/Tools/default.aspx">Tools</category></item><item><title>Interfaces vs Abstract Base Classes</title><link>http://dotnet.org.za/scott/archive/2005/04/29/19205.aspx</link><pubDate>Fri, 29 Apr 2005 09:17:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:19205</guid><dc:creator>scott</dc:creator><slash:comments>8</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/scott/rsscomments.aspx?PostID=19205</wfw:commentRss><comments>http://dotnet.org.za/scott/archive/2005/04/29/19205.aspx#comments</comments><description>&lt;p&gt;There has been a lot of discussion on the&amp;nbsp;value of Interfaces lately. Justin feels that Interfaces are not worth the classes that they are written on [&lt;a href="/justin/archive/2005/04/20/18391.aspx"&gt;1&lt;/a&gt;, &lt;a href="/justin/archive/2005/04/25/18872.aspx"&gt;2&lt;/a&gt;]. I disagree with that statement in general, although I do see (I think) where Justin is going with this, and his argument does have merit.&lt;/p&gt;
&lt;p&gt;Firstly, I think that some clarification is in order. I think it's important&amp;nbsp;that the&amp;nbsp;Base Classes be&amp;nbsp;abstract, since a design based on Concrete Class inheritance has bigger issues to contend with than interfaces.&lt;/p&gt;
&lt;p&gt;I know this had been said before, but I think it is important enough that it&amp;nbsp;bears repeating: &lt;em&gt;Inheritance&lt;/em&gt; [using Abstract Base Classes (which I'll refer to as Base Classes for brevity)]&amp;nbsp;means "&lt;strong&gt;is a&lt;/strong&gt;", whereas using an&amp;nbsp;&lt;em&gt;Interface&lt;/em&gt; means "&lt;strong&gt;behaves as&lt;/strong&gt; ". Both Base Classes&amp;nbsp;and Interfaces define a &lt;em&gt;class&amp;nbsp;interface&lt;/em&gt; or a contract for the class/implementor. Please note that these approaches are not mutually exclusive; they can be used separately or together. What to use depends on where you intend to have the class used.&lt;/p&gt;
&lt;div class="sidebar-left"&gt;I use the term &lt;em&gt;interface&lt;/em&gt; to refer to the language construct Interface, and &lt;em&gt;class interface&lt;/em&gt; to refer to the concept of a class having an interface.&lt;/div&gt;
&lt;p&gt;Interfaces provide a common (and relatively independent) abstraction to handle completely disparate implementations, whereas a base class approach effectively ties you to a single implementation, limits re-usability, and results in a more brittle design. As I &lt;a href="/justin/archive/2005/04/20/18391.aspx#18427"&gt;stated&lt;/a&gt;, I favor a hybrid approach with an abstract base class providing a reference implementation of the interface in question.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;It also pays to look at why we even have interfaces at all; what is the purpose behind them? In a language that supports multiple inheritance (like C++ or Eiffel), interfaces have diminished value. It makes sense to define behavioral contracts using abstract classes which also provide a generic implementation of the behavior. In these languages multiple inheritance allows you to simply plug in functionality to any class that requires it, rather than having to create explicit implementations of an interface; in fact, this is, according to [McConnell], the &lt;a href="http://www.cc2e.com/"&gt;preferred&lt;/a&gt; (safer) way of using multiple inheritance.&lt;/p&gt;
&lt;p&gt;In languages that only support single inheritance (like C# and Java), or only interface inheritance (like VB6 - yuck!), Interfaces take on a much more important role. Using interfaces together with object composition allows the developer a similar ability to simply plug in functionality, giving some of the flexibility of multiple inheritance, whilst ensuring that the object models are kept (relatively) simple.&lt;/p&gt;
&lt;p&gt;Ultimately it boils down to OOP fundamentals; it's generally a good heuristic (rule of thumb) to keep your &lt;em&gt;class&amp;nbsp;interface&lt;/em&gt; as&amp;nbsp;small and cohesive as possible. The biggest risk in using Base Classes comes from&amp;nbsp;the tendency to move unrelated behavior into the base class, as the implementations evolve, resulting in a less cohesive "interface". And whats more, it is easy to do. Sure,&amp;nbsp;you run the same risk using interfaces, but it's not nearly as convenient for the developer, so it's much less likely to occur.&lt;/p&gt;
&lt;p&gt;It is also tempting to ignore that behavioral aspect of objects and treat them simply as containers of data (like an in- memory representation of a database row) with methods related to accessing and/or changing the data. This defeats the point of OOP. An intrinsic part of object design is the behavior, and one of the purposes of OOP is to encapsulate behavior &lt;em&gt;and&lt;/em&gt; data.&amp;nbsp;And taking this a step further; just as the schema of database table defines the form of the data, an interface defines the form (or contract) of the behavior.&lt;/p&gt;
&lt;p&gt;A classic beginner mistake is to use inheritance to provide similar behavior in unrelated classes. Lets look at an example (adapted from &lt;a href="http://www.bookpool.com/sm/0321245660"&gt;Effective C#&lt;/a&gt; by &lt;a href="http://www.srtsolutions.com/public/blog/20574"&gt;Bill Wagner&lt;/a&gt; ); consider the three classes below. &lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="/photos/scott/images/47205/original.aspx" align="bottom" border="0" hspace="0" /&gt;&lt;/p&gt;
&lt;p&gt;They&amp;nbsp;obviously share the common property &lt;em&gt;Name&lt;/em&gt;, but conceptually they are not variants of a common theme. Each one is a distinct entity and it would be both naive and dangerous to derive&amp;nbsp;Employee, Supplier, and Customer from the same base class.&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="/photos/scott/images/47206/original.aspx" align="bottom" border="0" hspace="0" /&gt;&lt;/p&gt;
&lt;p&gt;A better approach would be to create an interface (say IContactInfo) that specifies the common properties and have each class implement the IContactInfo interface.&lt;/p&gt;
&lt;p&gt;I said earlier that &lt;em&gt;interfaces provide a common abstraction to handle completely disparate implementations&lt;/em&gt;. This enables us to create&amp;nbsp;methods that will handle any implementation, same or different.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;span style="font-size: 10pt; color: rgb(0, 0, 255); font-family: Courier New;"&gt;public&amp;nbsp;void&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: rgb(0, 0, 0); font-family: Courier New;"&gt;PrintWelcomeMessage(IContactInfo&amp;nbsp;info)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine("Greetings&amp;nbsp;{0}",&amp;nbsp;info.Name);&amp;nbsp;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: rgb(0, 0, 0); font-family: Courier New;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;You could argue that a base class would provide the same flexibility, and you'd be right, for now. The advantage of using&amp;nbsp;an &lt;em&gt;interface&lt;/em&gt; comes in the future. Let us suppose that in the previous example we had created a base class called BusinessEntity containing common functionality; we could then have defined the above method as follows.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;span style="font-size: 10pt; color: rgb(0, 0, 255); font-family: Courier New;"&gt;public&amp;nbsp;void&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 10pt; color: rgb(0, 0, 0); font-family: Courier New;"&gt;PrintWelcomeMessage(BusinessEntity&amp;nbsp;info)&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine("Greetings&amp;nbsp;{0}",&amp;nbsp;info.Name);&amp;nbsp;&lt;br /&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 10pt; color: rgb(0, 0, 0); font-family: Courier New;"&gt;&lt;br /&gt;&lt;/span&gt;However, what if six months later we have a requirement that &lt;code&gt;Employee&lt;/code&gt; needs to support remoting and consequently needs to extend &lt;code&gt;MarshalByRefObject&lt;/code&gt;. Now depending on how we've implemented our base class this might be very difficult to do (without affecting the other classes). If we do affect the other classes, by making the change on the base class, there might be repercussions (errors) down the line. Basically it introduces a potentially unknown variable into the equation. By using an interface we can create a completely divergent implementation without affecting any other classes. This is concept is known as the principle of Orthogonality. &lt;/p&gt;
&lt;p&gt;I would say that, as a general rule, if the consumers of your class are internal to your system it is safe to use base classes and refactor to interfaces as your design evolves. This echos&amp;nbsp;a&amp;nbsp;comment&amp;nbsp;by &lt;a href="/rivaaj"&gt;Rivaaj Jumna&lt;/a&gt; who &lt;a href="/justin/archive/2005/04/20/18391.aspx#18417"&gt;stated&lt;/a&gt;: " I tend to favor the interface driven approach to design, if only because I end up refactoring to interfaces at various intervals." This is,&amp;nbsp;incidentally, also&amp;nbsp;the purpose behind the &lt;a href="http://www.dofactory.com/Patterns/PatternBridge.aspx"&gt;Bridge Pattern&lt;/a&gt;; to "d&lt;font face="arial, helvetica" size="2"&gt;ecouple an abstraction from its implementation so that the two can vary independently.&lt;/font&gt; " &lt;/p&gt;
&lt;p&gt;If your consumers are external, possibly clients using your API, then I think it's safer to use interfaces unless it's absolutely necessary to provide the functionality that an abstract base class would provide.&lt;/p&gt;
&lt;p&gt;In summary, the use of Interfaces&amp;nbsp;leads to flexible and reusable designs. While abstract base classes do have&amp;nbsp;immense value within a system, they are not a replacement for interfaces.&lt;/p&gt;
&lt;p style="font-size: 0.75em;"&gt;&lt;a href="http://imhoproject.org"&gt;powered by IMHO 1.2&lt;/a&gt;&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/scott/archive/2005/04/29/19205.aspx&amp;amp;;subject=Interfaces+vs+Abstract+Base+Classes" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/29/19205.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/scott/archive/2005/04/29/19205.aspx&amp;amp;;title=Interfaces+vs+Abstract+Base+Classes" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/29/19205.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/scott/archive/2005/04/29/19205.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/29/19205.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/scott/archive/2005/04/29/19205.aspx&amp;amp;title=Interfaces+vs+Abstract+Base+Classes" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/29/19205.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/scott/archive/2005/04/29/19205.aspx&amp;amp;;title=Interfaces+vs+Abstract+Base+Classes" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/29/19205.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/scott/archive/2005/04/29/19205.aspx&amp;amp;;title=Interfaces+vs+Abstract+Base+Classes&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/29/19205.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=19205" width="1" height="1"&gt;</description><category domain="http://dotnet.org.za/scott/archive/tags/OOAD/default.aspx">OOAD</category></item><item><title>Fiddler 0.9.9</title><link>http://dotnet.org.za/scott/archive/2005/04/29/19203.aspx</link><pubDate>Fri, 29 Apr 2005 07:09:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:19203</guid><dc:creator>scott</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/scott/rsscomments.aspx?PostID=19203</wfw:commentRss><comments>http://dotnet.org.za/scott/archive/2005/04/29/19203.aspx#comments</comments><description>&lt;P&gt;This is a bit late, but I noticed that there is a new 
version of &lt;A href="http://www.fiddlertool.com/fiddler/"&gt;Fiddler&lt;/A&gt; out (0.9.9 
released on 1 Feb 2005). For those of you that don't know, Fidder is a HTTP 
Debugging Proxy. It effectively catches all HTTP requests/responses on your 
system. It's quite simple to use and extremely helpful when debugging web 
applications.&lt;/P&gt;
&lt;P&gt;I recently used it to inspect why &lt;A href="http://www.imhoproject.org/"&gt;IMHO&lt;/A&gt; wasn't functioning correctly at work 
(tuned out to be due to an (unresolved) authentication error with ISA Server). I 
have also used it in the past to inspect/debug &lt;A href="http://www.ashleyit.com/rs/main.htm"&gt;remote scripting&lt;/A&gt; 
issues. &lt;/P&gt;
&lt;P&gt;It is implemented using .NET 1.1 and "includes a simple 
but powerful JScript.NET event-based scripting subsystem" called &lt;A href="http://www.fiddlertool.com/Fiddler/dev/ScriptSamples.asp"&gt;FiddlerScript&lt;/A&gt;. FiddlerScript 
even has a syntax-aware script editing environment. Plus it's extensible; you 
can create your own custom Inspector Objects in any .NET language.&lt;/P&gt;
&lt;P&gt;You can download it &lt;A href="http://www.fiddlertool.com/dl/FiddlerSetup.exe"&gt;here&lt;/A&gt;. The Fiddler Script 
Editor is available &lt;A href="http://www.fiddlertool.com/dl/FSESetup.exe"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P style="FONT-SIZE: 0.75em"&gt;&lt;A href="http://imhoproject.org"&gt;powered by IMHO 1.2&lt;/A&gt;&lt;/P&gt;

&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/scott/archive/2005/04/29/19203.aspx&amp;amp;;subject=Fiddler+0.9.9" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/29/19203.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/scott/archive/2005/04/29/19203.aspx&amp;amp;;title=Fiddler+0.9.9" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/29/19203.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/scott/archive/2005/04/29/19203.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/29/19203.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/scott/archive/2005/04/29/19203.aspx&amp;amp;title=Fiddler+0.9.9" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/29/19203.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/scott/archive/2005/04/29/19203.aspx&amp;amp;;title=Fiddler+0.9.9" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/29/19203.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/scott/archive/2005/04/29/19203.aspx&amp;amp;;title=Fiddler+0.9.9&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/29/19203.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=19203" width="1" height="1"&gt;</description><category domain="http://dotnet.org.za/scott/archive/tags/Tools/default.aspx">Tools</category></item><item><title>New Toy</title><link>http://dotnet.org.za/scott/archive/2005/04/27/19167.aspx</link><pubDate>Wed, 27 Apr 2005 19:11:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:19167</guid><dc:creator>scott</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/scott/rsscomments.aspx?PostID=19167</wfw:commentRss><comments>http://dotnet.org.za/scott/archive/2005/04/27/19167.aspx#comments</comments><description>&lt;P&gt;For the last few months I have been facing a user input 
irritation. I use &lt;A href="http://global.acer.com/products/notebook/tm2500.htm"&gt;my&amp;nbsp;notebook&lt;/A&gt; 
both at work and at home. At work I have a &lt;A href="http://www.microsoft.com/hardware/mouseandkeyboard/productdetails.aspx?pid=014"&gt;Microsoft 
Wireless Optical Desktop Pro&lt;/A&gt; (which totally rocks), but at home I have to 
resort to using the keyboard and trackpad on the notebook (which sucks). So 
yesterday I went out and got myself a &lt;A href="http://www.microsoft.com/hardware/mouseandkeyboard/productdetails.aspx?pid=031"&gt;Microsoft 
Wireless Notebook Optical Mouse&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH: 105px; HEIGHT: 95px" alt="" hspace=0 src="http://www.microsoft.com/hardware/mouseandkeyboard/images/features/snap-inreceiver.jpg" align=left border=0&gt;This&amp;nbsp;is uber cool. Not only is it both wireless and 
optical (obviously), but it's extremely compact. Plus it has a very long battery 
life (well at least according to the brochure) - 3+ months on a single AA 
battery. The wireless receiver is USB and plugs into the bottom of the mouse 
when not in use, thereby disabling the optical sensor and conserving battery 
life. &lt;/P&gt;
&lt;P&gt;All in all, I'm a much happier camper, plus it didn't break the bank. It cost 
a mere R230 ex VAT, which is cheap at the price.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://imhoproject.org/"&gt;&lt;FONT face=Verdana size=1&gt;powered by IMHO 1.2&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;!-- Powered by IMHO Instant Blogger Copyright (c) 2004 A.Boschin - http://www.elite.boschin.it --&gt;

&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/scott/archive/2005/04/27/19167.aspx&amp;amp;;subject=New+Toy" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/27/19167.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/scott/archive/2005/04/27/19167.aspx&amp;amp;;title=New+Toy" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/27/19167.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/scott/archive/2005/04/27/19167.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/27/19167.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/scott/archive/2005/04/27/19167.aspx&amp;amp;title=New+Toy" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/27/19167.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/scott/archive/2005/04/27/19167.aspx&amp;amp;;title=New+Toy" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/27/19167.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/scott/archive/2005/04/27/19167.aspx&amp;amp;;title=New+Toy&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/27/19167.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=19167" width="1" height="1"&gt;</description><category domain="http://dotnet.org.za/scott/archive/tags/Tools/default.aspx">Tools</category></item><item><title>How to you argue with stupidity like this????</title><link>http://dotnet.org.za/scott/archive/2005/04/25/18819.aspx</link><pubDate>Mon, 25 Apr 2005 13:04:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:18819</guid><dc:creator>scott</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/scott/rsscomments.aspx?PostID=18819</wfw:commentRss><comments>http://dotnet.org.za/scott/archive/2005/04/25/18819.aspx#comments</comments><description>&lt;P&gt;&lt;STRONG&gt;Warning:&lt;/STRONG&gt; Rant about to commence.&lt;/P&gt;
&lt;P&gt;At a recent daily status meeting the topic of our corporate firewall came up (one of the developers needed a port opened to replicate data to a remote server). A colleague of mine announces that he has a buddy at Redhat who&amp;nbsp;can help since we are using an "Apache" firewall.&lt;/P&gt;
&lt;P&gt;Apart from the obvious security issues (letting a stranger tinker with our firewall), and the fact that our own Systems Administrator is perfectly capable of getting this done; &lt;EM&gt;&lt;STRONG&gt;&lt;FONT color=#ff0000&gt;there is no such thing as an Apache firewall&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/EM&gt;.&lt;/P&gt;
&lt;P&gt;Since I know that we use a PIX firewall with ISA server as a proxy, I responded with: "Dude, Apache is a web server". To which I received an extremely frosty "No! It IS a firewall".&lt;/P&gt;
&lt;P&gt;How to you argue with stupidity&amp;nbsp;like this????&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/scott/archive/2005/04/25/18819.aspx&amp;amp;;subject=How+to+you+argue+with+stupidity+like+this%3f%3f%3f%3f" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/25/18819.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/scott/archive/2005/04/25/18819.aspx&amp;amp;;title=How+to+you+argue+with+stupidity+like+this%3f%3f%3f%3f" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/25/18819.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/scott/archive/2005/04/25/18819.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/25/18819.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/scott/archive/2005/04/25/18819.aspx&amp;amp;title=How+to+you+argue+with+stupidity+like+this%3f%3f%3f%3f" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/25/18819.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/scott/archive/2005/04/25/18819.aspx&amp;amp;;title=How+to+you+argue+with+stupidity+like+this%3f%3f%3f%3f" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/25/18819.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/scott/archive/2005/04/25/18819.aspx&amp;amp;;title=How+to+you+argue+with+stupidity+like+this%3f%3f%3f%3f&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/25/18819.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=18819" width="1" height="1"&gt;</description></item><item><title>Bookpool Rocks!</title><link>http://dotnet.org.za/scott/archive/2005/04/25/18808.aspx</link><pubDate>Mon, 25 Apr 2005 12:53:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:18808</guid><dc:creator>scott</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/scott/rsscomments.aspx?PostID=18808</wfw:commentRss><comments>http://dotnet.org.za/scott/archive/2005/04/25/18808.aspx#comments</comments><description>&lt;P&gt;Yay! My most recent book order just arrived. This is the first time that I have ordered on &lt;A title="" href="http://www.bookpool.com/" target="" name=""&gt;Bookpool&lt;/A&gt;&amp;nbsp;and I must say that I'm impressed. Not only&amp;nbsp;were they cheaper than &lt;A title="" href="http://www.amazon.com/" target="" name=""&gt;Amazon.com&lt;/A&gt;, but&amp;nbsp;a mere 15 days after I placed my order the books where here.&lt;/P&gt;
&lt;P&gt;These are the books that I ordered:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A title="" href="http://www.bookpool.com/sm/0321245660" target="" name=""&gt;Effective C#&lt;/A&gt; by &lt;A href="http://www.srtsolutions.com/public/blog/20574"&gt;Bill Wagner&lt;/A&gt; 
&lt;LI&gt;&lt;A title="" href="http://www.bookpool.com/sm/0131489062" target="" name=""&gt;Applying UML and Patterns, 3rd Edition&lt;/A&gt; by &lt;A href="http://www.craiglarman.com/"&gt;Craig Larman&lt;/A&gt;.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;I've been extremely keen to read both of these, especially Applying UML and Patterns. &lt;A title="" href="http://www.martinfowler.com/" target="" name=""&gt;Martin Fowler&lt;/A&gt; recommends it as "the best book to introduce ... the world of OO design". The 3rd edition also has a greater focus on agile methodologies (this book proposes using the Unified Process as a methodology) to be used in conjunction with UP. Like &lt;A href="http://www.bookpool.com/sm/0321193687"&gt;Fowler&lt;/A&gt;&amp;nbsp;he also suggests using "UML as a sketch" with ties into the ideas presented in Scott Ambler's &lt;A href="http://www.agilemodeling.com/"&gt;Agile Modeling&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;As for Effective C#; it follows in the foot steps of Scott Meyer's excellent &lt;A href="http://www.bookpool.com/sm/0321334876"&gt;Effective C++&lt;/A&gt; and &lt;A href="http://www.bookpool.com/sm/020163371X"&gt;More Effective C++&lt;/A&gt;. Both of which offer a multitude of insight into improving your C++ code. I hope this book adds the same value that those do.&lt;/P&gt;
&lt;P&gt;I'll post some reviews (assuming I'm up to it) once I'm done.&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/scott/archive/2005/04/25/18808.aspx&amp;amp;;subject=Bookpool+Rocks!" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/25/18808.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/scott/archive/2005/04/25/18808.aspx&amp;amp;;title=Bookpool+Rocks!" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/25/18808.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/scott/archive/2005/04/25/18808.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/25/18808.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/scott/archive/2005/04/25/18808.aspx&amp;amp;title=Bookpool+Rocks!" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/25/18808.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/scott/archive/2005/04/25/18808.aspx&amp;amp;;title=Bookpool+Rocks!" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/25/18808.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/scott/archive/2005/04/25/18808.aspx&amp;amp;;title=Bookpool+Rocks!&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/25/18808.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=18808" width="1" height="1"&gt;</description></item><item><title>.Net: The beginning or the end [of development as we know it] ?</title><link>http://dotnet.org.za/scott/archive/2005/04/19/18311.aspx</link><pubDate>Tue, 19 Apr 2005 10:00:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:18311</guid><dc:creator>scott</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/scott/rsscomments.aspx?PostID=18311</wfw:commentRss><comments>http://dotnet.org.za/scott/archive/2005/04/19/18311.aspx#comments</comments><description>&lt;P&gt;Okay, now that I've got your attention with a snappy headline... &lt;/P&gt;
&lt;P&gt;&lt;!--StartFragment --&gt;I found some interesting viewpoints on development using .NET (personally I'm sold, but it's always good to view both sides of the coin).&lt;/P&gt;
&lt;P&gt;First off we have Mark Russinovich (Windows Internals expert of &lt;A href="http://www.sysinternals.com/index.shtml"&gt;sysinternals.com&lt;/A&gt; fame) arguing that .Net is too bloated in&amp;nbsp;&lt;!--StartFragment --&gt; &lt;SPAN class=PostTitle&gt;&lt;A href="http://www.sysinternals.com/blog/2005/04/coming-net-world-im-scared.html"&gt;The Coming .NET World &amp;#8211; I&amp;#8217;m scared&lt;/A&gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=PostTitle&gt;In rebuttal Ken Henderson, (&lt;A href="http://www.amazon.com/exec/obidos/tg/detail/-/0321287509/qid=1113900903/sr=8-2/ref=pd_csp_2/102-7726751-3918557?v=glance&amp;amp;s=books&amp;amp;n=507846"&gt;Sql Server Guru&lt;/A&gt;) reckons that &lt;A href="http://blogs.msdn.com/khen1234/archive/2005/04/17/409013.aspx"&gt;.Net is the best thing to hit software since OOP&lt;/A&gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class=PostTitle&gt;Draw your own conclusions?&lt;/SPAN&gt;&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/scott/archive/2005/04/19/18311.aspx&amp;amp;;subject=.Net%3a+The+beginning+or+the+end+%5bof+development+as+we+know+it%5d+%3f" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/19/18311.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/scott/archive/2005/04/19/18311.aspx&amp;amp;;title=.Net%3a+The+beginning+or+the+end+%5bof+development+as+we+know+it%5d+%3f" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/19/18311.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/scott/archive/2005/04/19/18311.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/19/18311.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/scott/archive/2005/04/19/18311.aspx&amp;amp;title=.Net%3a+The+beginning+or+the+end+%5bof+development+as+we+know+it%5d+%3f" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/19/18311.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/scott/archive/2005/04/19/18311.aspx&amp;amp;;title=.Net%3a+The+beginning+or+the+end+%5bof+development+as+we+know+it%5d+%3f" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/19/18311.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/scott/archive/2005/04/19/18311.aspx&amp;amp;;title=.Net%3a+The+beginning+or+the+end+%5bof+development+as+we+know+it%5d+%3f&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/04/19/18311.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=18311" width="1" height="1"&gt;</description></item><item><title>Durban Patterns Group: Session 3 Reminder</title><link>http://dotnet.org.za/scott/archive/2005/03/30/16052.aspx</link><pubDate>Wed, 30 Mar 2005 07:09:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:16052</guid><dc:creator>scott</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/scott/rsscomments.aspx?PostID=16052</wfw:commentRss><comments>http://dotnet.org.za/scott/archive/2005/03/30/16052.aspx#comments</comments><description>&lt;P&gt;&lt;!--StartFragment --&gt;&amp;nbsp;Just a quick reminder.&lt;/P&gt;
&lt;P&gt;The next patterns session will be held on Wednesday, 6 April 2005 in the Conference Room at Marriott-at-Kingsmead, Kingsmead Office Park. The session will start at 17:30 sharp and will run for approximately 2 hours. &lt;/P&gt;
&lt;P&gt;The patterns under discussion will: Iterator (p. 257) and Template Method (p. 325). &lt;/P&gt;
&lt;P&gt;Please&amp;nbsp;RSVP on this &lt;A href="http://groups-beta.google.com/group/Durban-Patterns-Group/browse_frm/thread/f482c2de7143a8d9/1c39656a615aced4#1c39656a615aced4"&gt;thread&lt;/A&gt;.&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/scott/archive/2005/03/30/16052.aspx&amp;amp;;subject=Durban+Patterns+Group%3a+Session+3+Reminder" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/30/16052.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/scott/archive/2005/03/30/16052.aspx&amp;amp;;title=Durban+Patterns+Group%3a+Session+3+Reminder" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/30/16052.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/scott/archive/2005/03/30/16052.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/30/16052.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/scott/archive/2005/03/30/16052.aspx&amp;amp;title=Durban+Patterns+Group%3a+Session+3+Reminder" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/30/16052.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/scott/archive/2005/03/30/16052.aspx&amp;amp;;title=Durban+Patterns+Group%3a+Session+3+Reminder" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/30/16052.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/scott/archive/2005/03/30/16052.aspx&amp;amp;;title=Durban+Patterns+Group%3a+Session+3+Reminder&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/30/16052.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=16052" width="1" height="1"&gt;</description><category domain="http://dotnet.org.za/scott/archive/tags/Durban+Patterns+Group/default.aspx">Durban Patterns Group</category></item><item><title>Free Profiler for .NET</title><link>http://dotnet.org.za/scott/archive/2005/03/30/16051.aspx</link><pubDate>Wed, 30 Mar 2005 07:05:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:16051</guid><dc:creator>scott</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/scott/rsscomments.aspx?PostID=16051</wfw:commentRss><comments>http://dotnet.org.za/scott/archive/2005/03/30/16051.aspx#comments</comments><description>&lt;P&gt;Reading an article, comparing the performance of the &lt;A href="http://blog.hishambaz.com/archive/2005/03/18/407.aspx"&gt;Enterprise Library Logging Block vs log4net&lt;/A&gt;, discovered the following gem: &lt;A href="http://www.compuware.com/media.asp?cid=3019X36"&gt;DevPartner Profiler Community Edition.&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;If you've ever used DevPartner Studio, you'd have seen the fully fledged version of this product, but as a free download this will do hey!&lt;/P&gt;
&lt;P&gt;It is available&amp;nbsp;&lt;A href="http://www.compuware.com/media.asp?cid=3019X36"&gt;here&lt;/A&gt; (42Mb). &lt;/P&gt;
&lt;P&gt;Update: The article that I was reading was &lt;A href="http://blog.hishambaz.com/archive/2005/03/18/407.aspx"&gt;this one&lt;/A&gt;.&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/scott/archive/2005/03/30/16051.aspx&amp;amp;;subject=Free+Profiler+for+.NET" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/30/16051.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/scott/archive/2005/03/30/16051.aspx&amp;amp;;title=Free+Profiler+for+.NET" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/30/16051.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/scott/archive/2005/03/30/16051.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/30/16051.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/scott/archive/2005/03/30/16051.aspx&amp;amp;title=Free+Profiler+for+.NET" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/30/16051.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/scott/archive/2005/03/30/16051.aspx&amp;amp;;title=Free+Profiler+for+.NET" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/30/16051.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/scott/archive/2005/03/30/16051.aspx&amp;amp;;title=Free+Profiler+for+.NET&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/30/16051.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=16051" width="1" height="1"&gt;</description><category domain="http://dotnet.org.za/scott/archive/tags/Tools/default.aspx">Tools</category></item><item><title>An Addition to your Software Development Dictionary</title><link>http://dotnet.org.za/scott/archive/2005/03/17/15622.aspx</link><pubDate>Thu, 17 Mar 2005 08:34:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:15622</guid><dc:creator>scott</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/scott/rsscomments.aspx?PostID=15622</wfw:commentRss><comments>http://dotnet.org.za/scott/archive/2005/03/17/15622.aspx#comments</comments><description>&lt;P&gt;[via &lt;A href="http://www.martinfowler.com/"&gt;Martin Fowler&lt;/A&gt;]&lt;/P&gt;
&lt;P&gt;(Here's an addition to your dictionary.)&lt;/P&gt;
&lt;P&gt;Detestable (adjective): software that isn't testable. (from someone at the Sydney XP group, whose name I sadly forgot.)&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/scott/archive/2005/03/17/15622.aspx&amp;amp;;subject=An+Addition+to+your+Software+Development+Dictionary" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/17/15622.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/scott/archive/2005/03/17/15622.aspx&amp;amp;;title=An+Addition+to+your+Software+Development+Dictionary" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/17/15622.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/scott/archive/2005/03/17/15622.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/17/15622.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/scott/archive/2005/03/17/15622.aspx&amp;amp;title=An+Addition+to+your+Software+Development+Dictionary" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/17/15622.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/scott/archive/2005/03/17/15622.aspx&amp;amp;;title=An+Addition+to+your+Software+Development+Dictionary" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/17/15622.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/scott/archive/2005/03/17/15622.aspx&amp;amp;;title=An+Addition+to+your+Software+Development+Dictionary&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/17/15622.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=15622" width="1" height="1"&gt;</description></item><item><title>What Great .NET Developers Ought To Know</title><link>http://dotnet.org.za/scott/archive/2005/03/02/14949.aspx</link><pubDate>Wed, 02 Mar 2005 11:33:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:14949</guid><dc:creator>scott</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/scott/rsscomments.aspx?PostID=14949</wfw:commentRss><comments>http://dotnet.org.za/scott/archive/2005/03/02/14949.aspx#comments</comments><description>&lt;p&gt;I found &lt;a href="http://www.hanselman.com/blog/WhatGreatNETDevelopersOughtToKnowMoreNETInterviewQuestions.aspx"&gt;this great post&lt;/a&gt; on Scott Hanselman's blog. I found it to be a real eye opener and a very valuable measure of how much and (in some areas) how little I know. I reckon its a must read for anyone whose serious about developing in .NET.&lt;/p&gt;


&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/scott/archive/2005/03/02/14949.aspx&amp;amp;;subject=What+Great+.NET+Developers+Ought+To+Know" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/02/14949.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/scott/archive/2005/03/02/14949.aspx&amp;amp;;title=What+Great+.NET+Developers+Ought+To+Know" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/02/14949.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/scott/archive/2005/03/02/14949.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/02/14949.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/scott/archive/2005/03/02/14949.aspx&amp;amp;title=What+Great+.NET+Developers+Ought+To+Know" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/02/14949.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/scott/archive/2005/03/02/14949.aspx&amp;amp;;title=What+Great+.NET+Developers+Ought+To+Know" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/02/14949.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/scott/archive/2005/03/02/14949.aspx&amp;amp;;title=What+Great+.NET+Developers+Ought+To+Know&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/02/14949.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=14949" width="1" height="1"&gt;</description></item><item><title>Session 2 Reminder: Thursday, 3 March 2005</title><link>http://dotnet.org.za/scott/archive/2005/03/02/14948.aspx</link><pubDate>Wed, 02 Mar 2005 11:28:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:14948</guid><dc:creator>scott</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/scott/rsscomments.aspx?PostID=14948</wfw:commentRss><comments>http://dotnet.org.za/scott/archive/2005/03/02/14948.aspx#comments</comments><description>&lt;p&gt;Just a quick reminder that the next patterns session is on Thursday (3 March 2005) evening at 5:30pm at in the conference room at Marriot-at-Kingsmead.&lt;/p&gt;

&lt;p&gt;The Patterns under discussion are: Decorator and Composite.&lt;/p&gt;

&lt;p&gt;See the &lt;a href="http://groups-beta.google.com/group/Durban-Patterns-Group"&gt;our group &lt;/a&gt; for more details.&lt;/p&gt;

&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/scott/archive/2005/03/02/14948.aspx&amp;amp;;subject=Session+2+Reminder%3a+Thursday%2c+3+March+2005" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/02/14948.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/scott/archive/2005/03/02/14948.aspx&amp;amp;;title=Session+2+Reminder%3a+Thursday%2c+3+March+2005" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/02/14948.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/scott/archive/2005/03/02/14948.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/02/14948.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/scott/archive/2005/03/02/14948.aspx&amp;amp;title=Session+2+Reminder%3a+Thursday%2c+3+March+2005" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/02/14948.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/scott/archive/2005/03/02/14948.aspx&amp;amp;;title=Session+2+Reminder%3a+Thursday%2c+3+March+2005" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/02/14948.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/scott/archive/2005/03/02/14948.aspx&amp;amp;;title=Session+2+Reminder%3a+Thursday%2c+3+March+2005&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/03/02/14948.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=14948" width="1" height="1"&gt;</description><category domain="http://dotnet.org.za/scott/archive/tags/Durban+Patterns+Group/default.aspx">Durban Patterns Group</category></item><item><title>Enterprise Library Released</title><link>http://dotnet.org.za/scott/archive/2005/01/30/13814.aspx</link><pubDate>Sun, 30 Jan 2005 14:00:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:13814</guid><dc:creator>scott</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/scott/rsscomments.aspx?PostID=13814</wfw:commentRss><comments>http://dotnet.org.za/scott/archive/2005/01/30/13814.aspx#comments</comments><description>&lt;P&gt;The Enterprise Library has finally been released. Sweet gorrilla from manilla. :-) I've been waiting for this for ages. You can get it &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=0325B97A-9534-4349-8038-D56B38EC394C&amp;amp;displaylang=en"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/scott/archive/2005/01/30/13814.aspx&amp;amp;;subject=Enterprise+Library+Released" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/01/30/13814.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/scott/archive/2005/01/30/13814.aspx&amp;amp;;title=Enterprise+Library+Released" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/01/30/13814.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/scott/archive/2005/01/30/13814.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/01/30/13814.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/scott/archive/2005/01/30/13814.aspx&amp;amp;title=Enterprise+Library+Released" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/01/30/13814.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/scott/archive/2005/01/30/13814.aspx&amp;amp;;title=Enterprise+Library+Released" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/01/30/13814.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/scott/archive/2005/01/30/13814.aspx&amp;amp;;title=Enterprise+Library+Released&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/01/30/13814.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=13814" width="1" height="1"&gt;</description><category domain="http://dotnet.org.za/scott/archive/tags/Resources/default.aspx">Resources</category></item><item><title>Durban Patterns Group: Session 1 (Reloaded)</title><link>http://dotnet.org.za/scott/archive/2005/01/17/13299.aspx</link><pubDate>Mon, 17 Jan 2005 09:47:00 GMT</pubDate><guid isPermaLink="false">2d3a9e08-b70c-4031-ba2b-8f5282a2a59a:13299</guid><dc:creator>scott</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://dotnet.org.za/scott/rsscomments.aspx?PostID=13299</wfw:commentRss><comments>http://dotnet.org.za/scott/archive/2005/01/17/13299.aspx#comments</comments><description>&lt;P&gt;The first &lt;A href="http://dotnet.org.za/scott/archive/2004/10/13/4706.aspx"&gt;Durban Patterns Group&lt;/A&gt;&amp;nbsp;meeting flopped due to lack of attendance (bad time of year I guess), so its time to try again.&lt;/P&gt;
&lt;P&gt;It will be held on the&amp;nbsp;Thursday the 20th of January 2005, in the conference room of Marriott-at-Kingsmead, Kingsmead Business Park. Start time is 17:30.&lt;/P&gt;
&lt;P&gt;Everyone attending the first session is required to have read up on the Factory Method [&lt;A href="http://c2.com/cgi/wiki?FactoryMethodPattern"&gt;1&lt;/A&gt;,&lt;A href="http://www.dofactory.com/Patterns/PatternFactory.aspx"&gt;2&lt;/A&gt;] pattern. I envisage roughly a 1 hour (2 hours max) session of discussion and whiteboarding. It might be useful if everyone attempts to implement an example of&amp;nbsp;the pattern to be covered in the session to get a feel for it in application, other than just reading about it.&lt;/P&gt;
&lt;P&gt;Please note: You will need a copy of &lt;A href="http://www.amazon.com/exec/obidos/ASIN/0201633612/qid=1097693822/sr=2-1/ref=pd_ka_b_2_1/103-4339150-4352630"&gt;[GoF]&lt;/A&gt; (print/electronic) in order to do the readings between meetings. If you require one, contact me and we will see what we can do.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Update:&amp;nbsp;&lt;!--StartFragment --&gt;&lt;/STRONG&gt; I have set up a group for news, events and discussion about the group. It is accessible at &lt;A href="http://groups-beta.google.com/group/Durban-Patterns-Group"&gt;http://groups-beta.google.com/group/Durban-Patterns-Group&lt;/A&gt; &lt;/P&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/scott/archive/2005/01/17/13299.aspx&amp;amp;;subject=Durban+Patterns+Group%3a+Session+1+(Reloaded)" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/01/17/13299.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/scott/archive/2005/01/17/13299.aspx&amp;amp;;title=Durban+Patterns+Group%3a+Session+1+(Reloaded)" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/01/17/13299.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/scott/archive/2005/01/17/13299.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/01/17/13299.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/scott/archive/2005/01/17/13299.aspx&amp;amp;title=Durban+Patterns+Group%3a+Session+1+(Reloaded)" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/01/17/13299.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/scott/archive/2005/01/17/13299.aspx&amp;amp;;title=Durban+Patterns+Group%3a+Session+1+(Reloaded)" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/01/17/13299.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/scott/archive/2005/01/17/13299.aspx&amp;amp;;title=Durban+Patterns+Group%3a+Session+1+(Reloaded)&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/scott/archive/2005/01/17/13299.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=13299" width="1" height="1"&gt;</description><category domain="http://dotnet.org.za/scott/archive/tags/Durban+Patterns+Group/default.aspx">Durban Patterns Group</category></item></channel></rss>