<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8307718319698992522</id><updated>2011-12-11T21:13:00.295-08:00</updated><category term='VS Performance'/><category term='Threading'/><category term='LINQ'/><category term='Onsite Trips'/><category term='Design n Architect'/><category term='JS-Tricks'/><category term='SQL Server'/><category term='ASP.Net - Grid Gotchas..'/><category term='ScottG - VS2005'/><category term='Tips'/><category term='Scott G'/><category term='Diagrams'/><category term='C#'/><category term='MSDN Magzine'/><category term='General'/><category term='WCF'/><category term='ASP.Net - Concepts'/><category term='ScottG - UI'/><category term='PRBs'/><category term='Orcas - ASP.Net 3.5 Extension'/><category term='Tools'/><category term='VS 2008 - Orcas'/><category term='CSS-HTML'/><category term='AJAX Learnings'/><category term='Validations'/><category term='ASP.Net - Web Services'/><category term='Exceptions'/><category term='ASP.Net - Code'/><category term='Orcas - C# Features'/><category term='WPF'/><category term='ASP.Net - Tips-Tricks'/><category term='Unit Testing'/><category term='Silverlight'/><category term='.Net Framework'/><title type='text'>Technical on Satellite Site</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://arun-ts.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8307718319698992522/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://arun-ts.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8307718319698992522/posts/default?start-index=101&amp;max-results=100'/><author><name>Arun Manglick</name><uri>http://www.blogger.com/profile/03915326692989759515</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>535</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8307718319698992522.post-997547803356995456</id><published>2010-12-03T05:17:00.003-08:00</published><updated>2010-12-03T05:17:51.601-08:00</updated><title type='text'>Design Principles - SOLID</title><content type='html'>&lt;div class="gmail_quote"&gt; &lt;div lang="EN-US" vlink="purple" link="blue"&gt; &lt;div&gt; &lt;h2 style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: red"&gt;What are Software Design Principles?&lt;/span&gt;&lt;/h2&gt; &lt;h2 style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt; &lt;/span&gt;&lt;/h2&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;Software design principles represent a set of guidelines that helps us to avoid having a bad design. The design principles are associated to Robert Martin who gathered them in &amp;quot;Agile Software Development: Principles, Patterns, and Practices&amp;quot;. &lt;/span&gt;&lt;/p&gt;  &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;According to Robert Martin there are &lt;span style="COLOR: #1f497d"&gt;4&lt;/span&gt; important &lt;span style="COLOR: #e36c0a"&gt;characteristics of a bad design&lt;/span&gt; that should be avoided&lt;span style="COLOR: #1f497d"&gt;. &lt;/span&gt;They are not orthogonal, but are related to each other in ways that will become obvious. they are:&lt;/p&gt;  &lt;p class="MsoNormal"&gt;rigidity, fragility, immobility, and viscosity.&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;These four symptoms are the tell-tale signs of poor architecture. Any application that show signs of them, is suffering from a design that is rotting from the inside out.&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="1"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #c0504d; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 94.1pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="125"&gt;  &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: white"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #c0504d; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 463.5pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="618"&gt;  &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: white"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 94.1pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="125"&gt;  &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;b&gt;Rigidity&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 463.5pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="618"&gt;  &lt;p class="MsoNormal"&gt;It is hard to change because every change affects too many other parts of the system&lt;span style="COLOR: #1f497d"&gt;.&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: #1f497d"&gt; &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 94.1pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="125"&gt;  &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;b&gt;Fragility&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 463.5pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="618"&gt;  &lt;p class="MsoNormal"&gt;When you make a change, unexpected parts of the system break.&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 94.1pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="125"&gt;  &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;b&gt;Immobility&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 463.5pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="618"&gt;  &lt;p class="MsoNormal"&gt;Inability to reuse software from parts of the same project or from other projects.&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;"&gt;It often happens that one engineer will discover that he needs a module that is similar to one that another engineer wrote. However, it also often happens that the module in question has too much baggage that it depends upon. &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;i.e. It is hard to reuse in another application because it cannot be separated from the current application.&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt; &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 94.1pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="125"&gt;  &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;b&gt;Viscosity&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 463.5pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="618"&gt;  &lt;p class="MsoNormal"&gt;Viscosity comes in two forms. High Viscosity is a bad design.&lt;/p&gt; &lt;p style="MARGIN-LEFT: 0.25in"&gt;&lt;span style="FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Viscosity of the design, &amp;amp; &lt;/p&gt; &lt;p style="MARGIN-LEFT: 0.25in"&gt;&lt;span style="FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Viscosity of the environment. &lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;Avoid hacks to solve a problem.  When the hacks are easy to employ than the design preserving methods, the &lt;span style="COLOR: #0070c0"&gt;Viscosity Of The Design/Environment&lt;/span&gt; is high.&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;"&gt; &lt;/span&gt;&lt;/p&gt; &lt;h2 style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt; &lt;/span&gt;&lt;/h2&gt; &lt;h2 style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;a href="http://www.oodesign.com/single-responsibility-principle.html" target="_blank"&gt;Single Responsibility Principle&lt;/a&gt; – &lt;span style="COLOR: red"&gt;SRP:  &lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;h2 style="MARGIN: 0in 0in 0pt"&gt;&lt;i&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #c00000"&gt;Principle&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="COLOR: #c00000"&gt; - &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #c00000"&gt;A class should have only one reason to change.&lt;/span&gt;&lt;/i&gt;&lt;/h2&gt;  &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.25in; MARGIN-RIGHT: 0in"&gt;&lt;span style="FONT-SIZE: 11pt; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 11pt"&gt;In this context a responsibility is considered to be one reason to change. This principle states that if we have 2 reasons to change for a class, we have to split the functionality in two classes. &lt;/span&gt;&lt;/p&gt;  &lt;p style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.25in; MARGIN-RIGHT: 0in"&gt;&lt;span style="FONT-SIZE: 11pt; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 11pt"&gt;Each class will handle only one responsibility and on future if we need to make one change we are going to make it in the class which handle it. &lt;/span&gt;&lt;/p&gt;  &lt;p style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.25in; MARGIN-RIGHT: 0in"&gt;&lt;span style="FONT-SIZE: 11pt; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 11pt"&gt;When we need to make a change in a class having more responsibilities the change might affect the other functionality of the classes.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;For example, instead of creating a class that has data access code for several different items you should instead separate the data access for each items into a seperate single class.&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;Single Responsibility Principle was introduced Tom DeMarco in his book Structured Analysis and Systems Specification, 1979. &lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;Robert Martin reinterpreted the concept and defined the responsibility as a reason to change.&lt;/span&gt;&lt;/p&gt; &lt;h2 style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt; &lt;/span&gt;&lt;/h2&gt; &lt;h2 style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt; &lt;/span&gt;&lt;/h2&gt; &lt;h2 style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;a href="http://www.oodesign.com/open-close-principle.html" target="_blank"&gt;Open Close Principle&lt;/a&gt; - &lt;span style="COLOR: red"&gt;OCP&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt; &lt;h2 style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in"&gt;&lt;i&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #c00000"&gt;Principle&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="COLOR: #c00000"&gt; - &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #c00000"&gt;Software entities like classes, modules and functions should be open for extension but closed for modifications.&lt;/span&gt;&lt;/i&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;i&gt; &lt;/i&gt;&lt;/p&gt; &lt;p style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.25in; MARGIN-RIGHT: 0in"&gt;&lt;span style="FONT-SIZE: 11pt; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 11pt"&gt;OPC is a generic principle. You can consider it when writing your classes to make sure that when you need to extend their behavior you don't have to change the class, rather extend it. &lt;/span&gt;&lt;/p&gt;  &lt;p style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.25in; MARGIN-RIGHT: 0in"&gt;&lt;span style="FONT-SIZE: 11pt; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 11pt"&gt;The same principle can be applied for modules, packages, libraries. &lt;/span&gt;&lt;/p&gt;  &lt;p style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.25in; MARGIN-RIGHT: 0in"&gt;&lt;span style="FONT-SIZE: 11pt; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 11pt"&gt;If you have a library containing a set of classes there are many reasons for which you'll prefer to extend it. This extension should happen without changing the code that was already written. &lt;/span&gt;&lt;/p&gt;  &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;For example, you should be able to add a new behavior to a class without affecting the rest of the code. Instead of adding a new case to a switch statement, you should consider re-factoring the code to use separate classes for each case.&lt;/p&gt;  &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;When referring to the classes, OCP can be ensured by use of Abstract Classes and concrete classes for implementing their behavior. This will enforce having Concrete Classes extending Abstract Classes instead of changing them. Some particular cases of this are &lt;b&gt;&lt;i&gt;&lt;span style="COLOR: #c00000"&gt;Template Pattern &amp;amp; Strategy Pattern&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;.&lt;/span&gt;&lt;/p&gt;  &lt;h2 style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt; &lt;/span&gt;&lt;/h2&gt; &lt;h2 style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt; &lt;/span&gt;&lt;/h2&gt; &lt;h2 style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;a href="http://www.oodesign.com/liskov-s-substitution-principle.html" target="_blank"&gt;Liskov&amp;#39;s Substitution Principle&lt;/a&gt; - &lt;span style="COLOR: red"&gt;LSP&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span style="COLOR: #c00000"&gt;Principle - Derived types must be completely substitutable for their base types. &lt;/span&gt;&lt;/i&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span style="COLOR: #c00000"&gt;That is, a user of a base class should continue to function properly, if a derivative of that base class is passed to it.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.25in; MARGIN-RIGHT: 0in"&gt;&lt;span style="FONT-SIZE: 11pt; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 11pt"&gt;This principle is just an extension of the OCP in terms of behavior, - Meaning that we must make sure that new derived classes are extending the base classes without changing their behavior. The new derived classes should be able to replace the base classes without any change in the code.&lt;/span&gt;&lt;/p&gt;  &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;For example: A typical example that violates LSP is a Square (Derived) class that derives from a Rectangle(Base) class. The Square class always assumes that the width is equal with the height. If a Square object is used in a context where a Rectangle is expected, unexpected behavior may occur because the dimensions of a Square cannot (or rather should not) be modified independently.&lt;/p&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;Liskov&amp;#39;s Substitution Principle was introduced by Barbara Liskov in a 1987 Conference on Object Oriented Programming Systems Languages and Applications.&lt;/span&gt;&lt;/p&gt;  &lt;h2 style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt; &lt;/span&gt;&lt;/h2&gt; &lt;h2 style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt; &lt;/span&gt;&lt;/h2&gt; &lt;h2 style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;a href="http://www.oodesign.com/interface-segregation-principle.html" target="_blank"&gt;Interface Segregation Principle&lt;/a&gt; - &lt;span style="COLOR: red"&gt;ISP&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;h2 style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in"&gt;&lt;i&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #c00000"&gt;Principle - Clients should not be forced to depend upon interfaces that they don&amp;#39;t use.&lt;/span&gt;&lt;/i&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt;&lt;i&gt; &lt;/i&gt;&lt;/p&gt; &lt;p style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.25in; MARGIN-RIGHT: 0in"&gt;&lt;span style="FONT-SIZE: 11pt; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 11pt"&gt;This principle teaches us to take care how we write our interfaces. &lt;/span&gt;&lt;/p&gt;  &lt;p style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.25in; MARGIN-RIGHT: 0in"&gt;&lt;span style="FONT-SIZE: 11pt; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 11pt"&gt;When we write our interfaces we should take care to add only methods that should be there. &lt;/span&gt;&lt;/p&gt;  &lt;p style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.25in; MARGIN-RIGHT: 0in"&gt;&lt;span style="FONT-SIZE: 11pt; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 11pt"&gt;If we add methods that should not be there the classes implementing the interface will have to implement those methods as well.&lt;/span&gt;&lt;/p&gt;  &lt;p style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.25in; MARGIN-RIGHT: 0in"&gt;&lt;span style="FONT-SIZE: 11pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;For example if we create an interface called Worker and add a method lunch break, all the workers will have to implement it. What if the worker is a robot?&lt;/span&gt;&lt;/p&gt;  &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;Another example - By having IEnumerable and IDisposable interfaces separate, it's possible for client code to seperately care about dealing with enumerating a collection or disposing of it. Thus not clutter up either operation by mixing two totally different kinds of behaviors.&lt;/span&gt;&lt;/p&gt;  &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;As a conclusion Interfaces containing methods that are not specific to it are called &lt;b&gt;&lt;i&gt;&lt;span style="COLOR: #c00000"&gt;Polluted or Fat Interfaces&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;. We should avoid them.&lt;/span&gt;&lt;/p&gt;  &lt;h2 style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt; &lt;/span&gt;&lt;/h2&gt; &lt;h2 style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt; &lt;/span&gt;&lt;/h2&gt; &lt;h2 style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;a href="http://www.oodesign.com/dependency-inversion-principle.html" target="_blank"&gt;Dependency Inversion Principle&lt;/a&gt; - &lt;span style="COLOR: red"&gt;DIP&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;h2 style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in"&gt;&lt;i&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #c00000"&gt;Principle - High-level modules should not depend on low-level modules. Both should depend on abstractions and not concretions.&lt;/span&gt;&lt;/i&gt;&lt;/h2&gt;  &lt;h2 style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in"&gt;&lt;i&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #c00000"&gt;Abstractions should not depend on details. Details should depend on abstractions.&lt;/span&gt;&lt;/i&gt;&lt;/h2&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.25in; MARGIN-RIGHT: 0in"&gt;&lt;span style="FONT-SIZE: 11pt; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 11pt"&gt;Dependency Inversion Principle states that we should decouple high level modules from low level modules, introducing an abstraction layer between the high level classes and low level classes. Further more it inverts the dependency: instead of writing our abstractions based on details, the we should write the details based on abstractions.&lt;/span&gt;&lt;/p&gt;  &lt;p style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.25in; MARGIN-RIGHT: 0in"&gt;&lt;span style="FONT-SIZE: 11pt; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 11pt"&gt;Dependency Inversion or Inversion of Control are better know terms referring to the way in which the dependencies are realized. In the classical way when a software module(class, framework, …) need some other module, it initializes and holds a direct reference to it. This will make the 2 modules tight coupled. In order to decouple them the first module will provide a hook(a property, parameter, …) and an external module controlling the dependencies will inject the reference to the second one.&lt;/span&gt;&lt;/p&gt;  &lt;p style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.25in; MARGIN-RIGHT: 0in"&gt;&lt;span style="FONT-SIZE: 11pt; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 11pt"&gt;By applying the Dependency Inversion the modules can be easily changed by other modules just changing the dependency module. &lt;/span&gt;&lt;/p&gt;  &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;Factories and Abstract Factories can be used as dependency frameworks, but there are specialized frameworks for that, known as &lt;b&gt;&lt;i&gt;&lt;span style="COLOR: #c00000"&gt;Inversion of Control Container&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;Hope this helps.&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;Reference :&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span&gt;Design &lt;a href="http://www.oodesign.com/design-principles.html" target="_blank"&gt;Principles&lt;/a&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span&gt;Design &lt;a href="http://www.oodesign.com/design-principles.html" target="_blank"&gt;Principles&lt;/a&gt; – By Example&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;Thanks &amp;amp; Regards,&lt;/p&gt; &lt;p class="MsoNormal"&gt;Arun Manglick &lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8307718319698992522-997547803356995456?l=arun-ts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arun-ts.blogspot.com/feeds/997547803356995456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arun-ts.blogspot.com/2010/12/design-principles-solid.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8307718319698992522/posts/default/997547803356995456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8307718319698992522/posts/default/997547803356995456'/><link rel='alternate' type='text/html' href='http://arun-ts.blogspot.com/2010/12/design-principles-solid.html' title='Design Principles - SOLID'/><author><name>Arun Manglick</name><uri>http://www.blogger.com/profile/03915326692989759515</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8307718319698992522.post-7791125662787377837</id><published>2010-12-03T05:17:00.001-08:00</published><updated>2010-12-03T05:17:15.942-08:00</updated><title type='text'>Design Principles - SOLID - Proof Of Concept</title><content type='html'>&lt;div class="gmail_quote"&gt; &lt;div lang="EN-US" vlink="purple" link="blue"&gt; &lt;div&gt; &lt;h2 style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;a href="http://www.oodesign.com/open-close-principle.html" target="_blank"&gt;Open Close Principle&lt;/a&gt; - &lt;span style="COLOR: red"&gt;OCP&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt; &lt;p class="MsoNormal"&gt;&lt;i&gt;&lt;span style="COLOR: #c00000"&gt;Principle&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="COLOR: #c00000"&gt; - &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style="COLOR: #c00000"&gt;Software entities like classes, modules and functions should be open for extension but closed for modifications&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;Consider below code.  The LogOn function must be changed every time a new kind of modem is added to the software. &lt;/p&gt; &lt;p class="MsoNormal"&gt;Worse, since each different type of modem depends upon the Modem::Type enumeration, each modem must be recompiled every time a new kind of modem is added.&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="1"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #c0504d; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 265.1pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="353"&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: white"&gt; &lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #c0504d; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 13.5pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="18"&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: white"&gt; &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 265.1pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="353"&gt;  &lt;p class="MsoNormal"&gt;struct Modem&lt;/p&gt; &lt;p class="MsoNormal"&gt;{&lt;/p&gt; &lt;p class="MsoNormal"&gt;  enum Type {hayes, courrier, ernie) type;&lt;/p&gt; &lt;p class="MsoNormal"&gt;};&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;void LogOn(Modem m,string pno)&lt;/p&gt; &lt;p class="MsoNormal"&gt;{&lt;/p&gt; &lt;p class="MsoNormal"&gt;  if (m.type == Modem::hayes)&lt;/p&gt; &lt;p class="MsoNormal"&gt;    DialHayes((Hayes&amp;amp;)m, pno);&lt;/p&gt; &lt;p class="MsoNormal"&gt;  else if (m.type == Modem::courrier)&lt;/p&gt; &lt;p class="MsoNormal"&gt;    DialCourrier((Courrier&amp;amp;)m, pno);&lt;/p&gt; &lt;p class="MsoNormal"&gt;  else if (m.type == Modem::ernie)&lt;/p&gt; &lt;p class="MsoNormal"&gt;    DialErnie((Ernie&amp;amp;)m, pno)&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;// ...you get the idea&lt;/p&gt; &lt;p class="MsoNormal"&gt;}&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 13.5pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="18"&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;Of course this is not the worst attribute of this kind of design. &lt;/p&gt; &lt;p class="MsoNormal"&gt;Programs that are designed this way tend to be littered with similar if/else or switch statement. &lt;/p&gt; &lt;p class="MsoNormal"&gt;Every time anything needs to be done to the modem, a switch statement if/else chain will need to add/select the proper functions to use. &lt;/p&gt; &lt;p class="MsoNormal"&gt;When new modems are added, or modem policy changes, the code must be scanned for all these selection statements, and each must be appropriately modified.&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;Thus here - Logon, is modified to be extended – &lt;b&gt;&lt;span style="COLOR: red"&gt;Breaking OCP.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;OCP Solution :&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;img height="223" src="cid:image001.png@01CB92E6.9CB76870" width="372" border="0"&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="1"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #c0504d; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 197.6pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="263"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="COLOR: white"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #c0504d; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 3.25in; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="312"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="COLOR: white"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 197.6pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="263"&gt;  &lt;p class="MsoNormal"&gt;class LogOn&lt;/p&gt; &lt;p class="MsoNormal"&gt;{&lt;/p&gt; &lt;p class="MsoNormal"&gt;  public static void LogOn(Modem m)&lt;/p&gt; &lt;p class="MsoNormal"&gt;  { &lt;/p&gt; &lt;p class="MsoNormal"&gt;    m.Dial();&lt;/p&gt; &lt;p class="MsoNormal"&gt;  }&lt;/p&gt; &lt;p class="MsoNormal"&gt;}&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 3.25in; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="312"&gt;  &lt;p class="MsoNormal"&gt;class MainApp&lt;/p&gt; &lt;p class="MsoNormal"&gt;{&lt;/p&gt; &lt;p class="MsoNormal"&gt;  static void Main()&lt;/p&gt; &lt;p class="MsoNormal"&gt;  {&lt;/p&gt; &lt;p class="MsoNormal"&gt;                LogOn.LogOn(new HayesModem());&lt;/p&gt; &lt;p class="MsoNormal"&gt;                LogOn.LogOn(new CourierModem ());&lt;/p&gt; &lt;p class="MsoNormal"&gt;                LogOn.LogOn(new ErnieModem ()); &lt;/p&gt; &lt;p class="MsoNormal"&gt;  }&lt;/p&gt; &lt;p class="MsoNormal"&gt;}&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;Here the LogOn function depends only upon the Modem interface. &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: #0070c0"&gt;Additional modems will not cause the LogOn function to change&lt;/span&gt;. &lt;/p&gt; &lt;p class="MsoNormal"&gt;Thus, we have created a module that can be extended, with new modems, without requiring modification.&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;h2 style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 11pt"&gt;&lt;a href="http://www.oodesign.com/interface-segregation-principle.html" target="_blank"&gt;Interface Segregation Principle&lt;/a&gt; - &lt;span style="COLOR: red"&gt;ISP&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;h2 style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0in; MARGIN-RIGHT: 0in"&gt;&lt;i&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #c00000"&gt;Principle - Clients should not be forced to depend upon interfaces that they don&amp;#39;t use.&lt;/span&gt;&lt;/i&gt;&lt;/h2&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;Below shows a class with many clients, and one large interface to serve them all. &lt;/p&gt; &lt;p class="MsoNormal"&gt;Note that whenever a change is made to one of the methods that ClientA calls, ClientB and ClientC may be affected. &lt;/p&gt; &lt;p class="MsoNormal"&gt;It may be necessary to recompile and redeploy them. This is unfortunate.&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;img height="199" src="cid:image002.png@01CB930C.58BC09C0" width="335" border="0"&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="1"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #c0504d; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 166.1pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="221"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="COLOR: white"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #c0504d; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 2.25in; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="216" colspan="2"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="COLOR: white"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #c0504d; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 256.5pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="342" colspan="2"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="COLOR: white"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="MIN-HEIGHT: 196.6pt"&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 196.6pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 584.6pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="779" colspan="5"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; COLOR: blue; FONT-FAMILY: Consolas"&gt;class&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;span style="COLOR: #2b91af"&gt;Service&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;IServiceA&lt;/span&gt;,&lt;span style="COLOR: #2b91af"&gt;IServiceB&lt;/span&gt;,&lt;span style="COLOR: #2b91af"&gt;IServiceC&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;    {&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Swim()&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;        {&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;            &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: #a31515"&gt;&amp;quot;Animal Swimming&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;        }&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Fly()&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;        {&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;            &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: #a31515"&gt;&amp;quot;Animal Flying&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;        }&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Run()&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;        {&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;            &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: #a31515"&gt;&amp;quot;Animal Running&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;        }&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;    }&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 197.6pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="263" colspan="2"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; COLOR: blue; FONT-FAMILY: Consolas"&gt;class&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;span style="COLOR: #2b91af"&gt;ClientA&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;{&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   &lt;span style="COLOR: #2b91af"&gt;Service&lt;/span&gt; service;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; ClientA(&lt;span style="COLOR: #2b91af"&gt;Service&lt;/span&gt; service)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   {&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;        &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;. service = service;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   }&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Execute()&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   {&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;      &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; running.&lt;span style="COLOR: red"&gt;Swim&lt;/span&gt;();&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;      &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; running.Fly ();&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; COLOR: blue; FONT-FAMILY: Consolas"&gt;      return&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; running.Run();&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   }&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;}&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt; &lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 193.5pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="258" colspan="2"&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; COLOR: blue; FONT-FAMILY: Consolas"&gt;class&lt;/span&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;span style="COLOR: #2b91af"&gt;ClientB&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;{&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   &lt;span style="COLOR: #2b91af"&gt;Service&lt;/span&gt; service;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; ClientA(&lt;span style="COLOR: #2b91af"&gt;Service&lt;/span&gt; service)&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   {&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;        &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;. service = service;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   }&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Execute()&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   {&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;      &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; running.&lt;span style="COLOR: red"&gt;Fly&lt;/span&gt;();&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;      &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; running.Swim();&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; COLOR: blue; FONT-FAMILY: Consolas"&gt;      return&lt;/span&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; running.Run();&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   }&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;}&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 193.5pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="258"&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; COLOR: blue; FONT-FAMILY: Consolas"&gt;class&lt;/span&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;span style="COLOR: #2b91af"&gt;ClientC&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;{&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   &lt;span style="COLOR: #2b91af"&gt;Service&lt;/span&gt; service;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; ClientA(&lt;span style="COLOR: #2b91af"&gt;Service&lt;/span&gt; service)&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   {&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;        &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;. service = service;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   }&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Execute()&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   {&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; COLOR: blue; FONT-FAMILY: Consolas"&gt;      return&lt;/span&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; running.&lt;span style="COLOR: red"&gt;Run&lt;/span&gt;();&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;      &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; running.Swim();&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;      &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; running.Fly();&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   }&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;}&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 584.6pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="779" colspan="5"&gt;  &lt;p class="MsoNormal"&gt;Here you can see that: Even the ClientA, does not the need the Fly and Run services, it can access those. &lt;/p&gt; &lt;p class="MsoNormal"&gt;Thus if any change is made in Fly and Run, CleintA also need to be changed.&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;Same applies for CleintB &amp;amp; C.  &lt;span style="COLOR: red"&gt;This breaking the rule&lt;/span&gt;.&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr height="0"&gt; &lt;td style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none" width="212"&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none" width="40"&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none" width="167"&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none" width="79"&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none" width="248"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;A better technique is shown below. The methods needed by each client are placed in special interfaces that are specific to that client. &lt;/p&gt; &lt;p class="MsoNormal"&gt;Those interfaces are &lt;b&gt;&lt;span style="COLOR: red"&gt;Multiply Inherited&lt;/span&gt;&lt;/b&gt; by the Service class, and implemented there. &lt;/p&gt; &lt;p class="MsoNormal"&gt;Now, If the interface for ClientA needs to change, ClientB and ClientC will remain unaffected. They will not have to be recompiled or redeployed.&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: &amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;img height="294" src="cid:image003.png@01CB930C.90D35250" width="447" border="0"&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="1"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #c0504d; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 166.1pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="221"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="COLOR: white"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #c0504d; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 2.25in; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="216" colspan="2"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="COLOR: white"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #c0504d; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 283.5pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="378" colspan="2"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="COLOR: white"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 166.1pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="221"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; COLOR: blue; FONT-FAMILY: Consolas"&gt;public&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;span style="COLOR: blue"&gt;interface&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;IServiceA&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;{&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Swim();&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;}&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt; &lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 2.25in; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="216" colspan="2"&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; COLOR: blue; FONT-FAMILY: Consolas"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;span style="COLOR: blue"&gt;interface&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;IServiceB&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;{&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Fly();&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;}&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 283.5pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="378" colspan="2"&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; COLOR: blue; FONT-FAMILY: Consolas"&gt;public&lt;/span&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;span style="COLOR: blue"&gt;interface&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;IServiceC&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;{&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Run();&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;}&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 611.6pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="815" colspan="5"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt; &lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; COLOR: blue; FONT-FAMILY: Consolas"&gt;class&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;span style="COLOR: #2b91af"&gt;Service&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;IServiceA&lt;/span&gt;,&lt;span style="COLOR: #2b91af"&gt;IServiceB&lt;/span&gt;,&lt;span style="COLOR: #2b91af"&gt;IServiceC&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;    {&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Swim()&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;        {&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;            &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: #a31515"&gt;&amp;quot;Animal Swimming&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;        }&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Fly()&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;        {&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;            &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: #a31515"&gt;&amp;quot;Animal Flying&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;        }&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;        &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Run()&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;        {&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;            &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: #a31515"&gt;&amp;quot;Animal Running&amp;quot;&lt;/span&gt;;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;        }&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;    }&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt; &lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt; &lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 215.6pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="287" colspan="2"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; COLOR: blue; FONT-FAMILY: Consolas"&gt;class&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;span style="COLOR: #2b91af"&gt;ClientA&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;{&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   &lt;span style="COLOR: #2b91af"&gt;IServiceA&lt;/span&gt; running;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; ClientA(&lt;span style="COLOR: #2b91af"&gt;IServiceA&lt;/span&gt; running)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   {&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;        &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.running = running;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   }&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Execute()&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   {&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;      &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; running.Swim();&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   }&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;}&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt; &lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 2.75in; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="264" colspan="2"&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; COLOR: blue; FONT-FAMILY: Consolas"&gt;class&lt;/span&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;span style="COLOR: #2b91af"&gt;ClientB&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;{&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   &lt;span style="COLOR: #2b91af"&gt;IServiceB&lt;/span&gt; animal;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; ClientB(&lt;span style="COLOR: #2b91af"&gt;IServiceB&lt;/span&gt; animal)&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   {&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;      &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.animal = animal;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   }&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Execute()&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   {&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;       &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; animal.Fly();&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   }&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;}&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 2.75in; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="264"&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; COLOR: blue; FONT-FAMILY: Consolas"&gt;class&lt;/span&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;span style="COLOR: #2b91af"&gt;ClientC&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;{&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;  &lt;span style="COLOR: #2b91af"&gt;IServiceC&lt;/span&gt; animal;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;  &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; ClientC(&lt;span style="COLOR: #2b91af"&gt;IServiceC&lt;/span&gt; animal)&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;  {&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;     &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.animal = animal;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;  }&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;  &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; Execute()&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;  {&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;     &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; animal.Run();&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;  }&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;}&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 611.6pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="815" colspan="5"&gt;  &lt;p class="MsoNormal"&gt;Here you can see that: The ClientA, has access to only the relevant Swim service. It cannot access the Fly and Run services.&lt;/p&gt; &lt;p class="MsoNormal"&gt;Thus if any change is made in Fly and Run, CleintA will not be affected.&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;Same applies for CleintB &amp;amp; C.  &lt;span style="COLOR: red"&gt;This serving the ISP&lt;/span&gt; &lt;span style="COLOR: red"&gt;rule&lt;/span&gt;.&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr height="0"&gt; &lt;td style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none" width="201"&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none" width="61"&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none" width="144"&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none" width="99"&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none" width="242"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt; Hope this helps.&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;Thanks &amp;amp; Regards,&lt;/p&gt; &lt;p class="MsoNormal"&gt;Arun Manglick &lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8307718319698992522-7791125662787377837?l=arun-ts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arun-ts.blogspot.com/feeds/7791125662787377837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arun-ts.blogspot.com/2010/12/design-principles-solid-proof-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8307718319698992522/posts/default/7791125662787377837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8307718319698992522/posts/default/7791125662787377837'/><link rel='alternate' type='text/html' href='http://arun-ts.blogspot.com/2010/12/design-principles-solid-proof-of.html' title='Design Principles - SOLID - Proof Of Concept'/><author><name>Arun Manglick</name><uri>http://www.blogger.com/profile/03915326692989759515</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8307718319698992522.post-2427787117174283410</id><published>2010-12-01T05:35:00.001-08:00</published><updated>2010-12-01T05:35:56.596-08:00</updated><title type='text'>Architecture - What is Scalability</title><content type='html'>&lt;div class="gmail_quote"&gt; &lt;div lang="EN-US" vlink="purple" link="blue"&gt; &lt;div&gt; &lt;p class="MsoNormal"&gt;The very first question in any Architecture discussions/interviews – How to make your application Scalable.&lt;/p&gt; &lt;p class="MsoNormal"&gt;Before answering, it's better to know what is 'Scalability'.&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: red"&gt;Few definitions:&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p style="MARGIN-LEFT: 0.25in"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings"&gt;&lt;span&gt;ü&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;In software engineering, scalability is a desirable property of a system, which indicates its ability to handle growing amounts of work in a graceful manner.&lt;/span&gt;&lt;/p&gt;  &lt;p style="MARGIN-LEFT: 0.25in"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings"&gt;&lt;span&gt;ü&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Indicates the capability of a system to increase total throughput under an increased load(more users) when resources (typically hardware) are added.&lt;/span&gt;&lt;/p&gt;  &lt;p style="MARGIN-LEFT: 0.25in"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings"&gt;&lt;span&gt;ü&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;A term that refers to how well a hardware and software system can adapt to increased demands. &lt;/span&gt;&lt;/p&gt;  &lt;p style="MARGIN-LEFT: 0.25in"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings"&gt;&lt;span&gt;ü&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Refers to the ability of an application to increase total throughput to handle the growing needs of data flow.&lt;/span&gt;&lt;/p&gt;  &lt;p style="MARGIN-LEFT: 0.25in"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Wingdings"&gt;&lt;span&gt;ü&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;It is the ability of a computer application or product (hardware or software) to continue to function well when it is changed in size or volume, in order to meet a user need.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Scalability is a design concern of Distributed Applications and not Stand-Alone Applications.&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Distributed applications are a step beyond traditional client-server applications. Distributed applications are applications that are designed as n-tier applications. &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Such distributed application architectures promote the &lt;i&gt;&lt;span style="COLOR: #0070c0"&gt;Design Of Scalable Applications&lt;/span&gt;&lt;/i&gt; by sharing resources, such as business components and databases.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Scaling comes in two flavours - Scale Up (vertically) vs.  Scale-out (horizontally).&lt;span style="COLOR: red"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red"&gt;Scale-Up: (Adding More Memory/Processors – To a Single Machine)&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Scale up means to add resources to a single node in a system. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;I.e. Scaling up includes adding more memory, adding more or faster processors, or simply migrating the application to a more powerful, &lt;b&gt;&lt;u&gt;&lt;span style="COLOR: #0070c0"&gt;But Single Machine&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Such vertical scaling of existing systems also enables them to use &lt;span style="COLOR: #0070c0"&gt;&lt;a title="Platform virtualization" href="http://en.wikipedia.org/wiki/Platform_virtualization" target="_blank"&gt;&lt;span style="COLOR: #0070c0; TEXT-DECORATION: none"&gt;virtualization&lt;/span&gt;&lt;/a&gt; technology&lt;/span&gt; more effectively.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: #0070c0"&gt;Defeciences&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;:&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Scaling up requires more expensive hardware, as single machine is upgraded. It's like using Smart/Expensive Server having Symmetric Multi-Processor (SMP) configurations.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Upgrading a hardware component in a single machine simply moves the processing capacity limit from one part of the machine to another part. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Adding more processors does not add performance in a linear fashion. Instead, the performance gain curve slowly tapers off as each additional processor is added. &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;For machines with symmetric multi-processor (SMP) configurations, each additional processor incurs system overhead. Consequently, a four-processor machine will not realize a 400 percent gain in capacity over the uniprocessor version. Once you have upgraded each hardware component to its maximum capacity, you will eventually reach the real limit of the machine&amp;#39;s processing capacity. &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Scaling up also presents other potential problems. Using a single machine to support an application creates a single point of failure, which greatly diminishes the fault tolerance of the system. While methods, such as multiple power supplies, may implement redundancy in a single-machine system, these options can be expensive.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;img height="359" alt="cid:image001.png@01CB6BD2.41D0FAB0" src="cid:image001.png@01CB6BD2.41D0FAB0" width="393" border="0"&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red"&gt;Scale-Out: (Adding more Machines/Servers)&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Scale Out means to add more nodes to a system, such as adding a new computer to a distributed software application. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Scaling out is less expensive, as it requires commodity PC hardware to distribute the processing load across more than one server. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Although scaling out is achieved using many machines, the collection essentially functions as a single machine. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;By dedicating several machines to a common task, application fault tolerance is increased. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;img height="377" alt="cid:image002.png@01CB6BD3.EE33BA30" src="cid:image002.png@01CB6BD3.EE33BA30" width="356" border="0"&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Developers and administrators use a variety of &lt;i&gt;&lt;span style="COLOR: #0070c0"&gt;Load Balancing Techniques&lt;/span&gt;&lt;/i&gt; to scale out with the Windows platform. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Load balancing allows a site to scale out across a cluster of servers, making it easy to add capacity by adding more &lt;i&gt;&lt;span style="COLOR: #0070c0"&gt;Replicated Servers&lt;/span&gt;&lt;/i&gt;. &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;It also provides &lt;i&gt;&lt;span style="COLOR: #0070c0"&gt;Redundancy&lt;/span&gt;&lt;/i&gt;, giving the site failover capabilities so that it remains available to users even if one or more servers fail (or need to be taken down for maintenance). &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Scaling out provides a method of scalability that is not hampered by hardware limitations. Each additional server provides a near linear increase in scalability.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;The key to successfully scaling out an application is &lt;i&gt;&lt;span style="COLOR: #0070c0"&gt;Location Transparency&lt;/span&gt;&lt;/i&gt;. If any of the application code depends on knowing what server is running the code, location transparency has not been achieved and scaling out will be difficult. This situation is called &lt;b&gt;&lt;i&gt;&lt;span style="COLOR: #0070c0"&gt;Location/Server Affinity&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;. &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Of course, from the administrator&amp;#39;s perspective, scaling out also presents a greater management challenge due to the increased number of machines&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;Hope this helps.&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;Regards,&lt;/p&gt; &lt;p class="MsoNormal"&gt;Arun Manglick &lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8307718319698992522-2427787117174283410?l=arun-ts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arun-ts.blogspot.com/feeds/2427787117174283410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arun-ts.blogspot.com/2010/12/architecture-what-is-scalability.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8307718319698992522/posts/default/2427787117174283410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8307718319698992522/posts/default/2427787117174283410'/><link rel='alternate' type='text/html' href='http://arun-ts.blogspot.com/2010/12/architecture-what-is-scalability.html' title='Architecture - What is Scalability'/><author><name>Arun Manglick</name><uri>http://www.blogger.com/profile/03915326692989759515</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8307718319698992522.post-4294811002844131358</id><published>2010-12-01T05:06:00.001-08:00</published><updated>2010-12-01T05:06:11.954-08:00</updated><title type='text'>n-Tier Architecture</title><content type='html'>&lt;div class="gmail_quote"&gt; &lt;div lang="EN-US" vlink="purple" link="blue"&gt; &lt;div&gt; &lt;h1&gt;&lt;font size="2"&gt;Introduction&lt;/font&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d"&gt; &lt;/span&gt;&lt;/h1&gt; &lt;p class="MsoNormal"&gt;This document describes the details of four tier implementation of the new architecture.&lt;/p&gt; &lt;p class="MsoNormal"&gt;The scope of this document is demonstrating the four tier implementation of the new architecture.&lt;/p&gt; &lt;p class="MsoNormal"&gt;This document is primarily targeted for the developers and architects working on the Veriphy applications. It provides a useful perspective to other stakeholders such as managers, and the customer.&lt;/p&gt;  &lt;h1&gt;&lt;font size="2"&gt;Overall Description&lt;/font&gt;&lt;/h1&gt; &lt;p class="MsoNormal"&gt;&lt;a name="12ca207a29fd8596__Toc148188351"&gt;In this scenario, the solution is divided across four separate tiers, or physical machines. &lt;/a&gt;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN-LEFT: 0.25in"&gt;&lt;span style="FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The client workstation represents &lt;span style="COLOR: navy"&gt;first tier&lt;/span&gt; that uses a browser application to interact with the Web server. &lt;/p&gt;  &lt;p class="MsoNormal" style="MARGIN-LEFT: 0.25in"&gt;&lt;span style="FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The Web server represents a &lt;span style="COLOR: navy"&gt;second tier&lt;/span&gt; that contains the presentation layer, which is responsible for handling requests from the user and interacting with the business layer to implement the request. &lt;/p&gt;  &lt;p class="MsoNormal" style="MARGIN-LEFT: 0.25in"&gt;&lt;span style="FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The application server represents the &lt;span style="COLOR: navy"&gt;third tier&lt;/span&gt; with service, business, and data access layers. &lt;/p&gt;  &lt;p class="MsoNormal" style="MARGIN-LEFT: 0.25in"&gt;&lt;span style="FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The &lt;span style="COLOR: navy"&gt;fourth tier&lt;/span&gt; in this design is the database server.&lt;/p&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;h3 style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0in"&gt;&lt;a name="12ca207a29fd8596__Toc232489737"&gt;Tiered Diagram&lt;/a&gt;&lt;/h3&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN-LEFT: 0.25in"&gt;&lt;img height="226" src="cid:image001.png@01CB8A4B.3E0D7240" width="795"&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN-LEFT: 0.25in"&gt; &lt;/p&gt; &lt;p&gt;&lt;span style="COLOR: #1f497d; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="COLOR: #1f497d"&gt;Browser interaction with the Web Server uses standard HTTP GET and POST requests. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="COLOR: #1f497d; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="COLOR: #1f497d"&gt;The presentation layer uses a request-based / message-based protocol to interact with the service layer. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="COLOR: #1f497d; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="COLOR: #1f497d"&gt;The Service Layer uses a Facade call to interact with the business layer.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="COLOR: #1f497d; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="COLOR: #1f497d"&gt;Stand-alone &lt;a href="http://asp.net/" target="_blank"&gt;ASP.NET&lt;/a&gt; Web application that supports basic CRUD operations. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="COLOR: #1f497d; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="COLOR: #1f497d"&gt;Presentation and Business logic are distributed across physical boundaries. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="COLOR: #1f497d; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="COLOR: #1f497d"&gt;DAL implementation will be implemented using LINQ.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="COLOR: #1f497d; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="COLOR: #1f497d"&gt;The application uses data from an existing database schema. &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="COLOR: #1f497d; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="COLOR: #1f497d"&gt;Tables and views in the database define data structures used by the application&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: #1f497d"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: #1f497d"&gt; &lt;/span&gt;&lt;/p&gt; &lt;h3 style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0in"&gt;&lt;a name="12ca207a29fd8596__Toc232489738"&gt;Another View&lt;/a&gt;&lt;/h3&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt; &lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt; &lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN-LEFT: 0.75in"&gt;&lt;b&gt;&lt;img height="513" src="cid:image002.gif@01CB8A4B.3E0D7240" width="362"&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN-LEFT: 2in"&gt;&lt;b&gt; &lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN-LEFT: 2in"&gt;&lt;b&gt; &lt;/b&gt;&lt;/p&gt; &lt;h3 style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0in"&gt;&lt;a name="12ca207a29fd8596__Toc232489739"&gt;&lt;/a&gt;&lt;a name="12ca207a29fd8596__Toc174434376"&gt;&lt;/a&gt;Detailed Tiered/Layered&lt;/h3&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt;&lt;img height="357" src="cid:image004.jpg@01CB8A4C.8646B700" width="798"&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: &amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;"&gt;&lt;br&gt;&lt;/span&gt;The following is a summary of the patterns used by this scenario:&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 12pt; FONT-FAMILY: &amp;#39;Times New Roman&amp;#39;,&amp;#39;serif&amp;#39;"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt;&lt;span lang="EN-GB" style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;User interface processing is handled by a Request-Response pattern. &lt;span lang="EN-GB" style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt;&lt;span style="FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The user interface is composed of multiple controls, with some that can be bound to data elements. &lt;/p&gt;  &lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt;&lt;span style="FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;An Http-Get request / Proxy is used to communicate between the presentation layer and service layer &lt;/p&gt;  &lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt;&lt;span style="FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The Data Transfer Object (DTO) pattern is used to package multiple data structures into one. &lt;/p&gt;  &lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt;&lt;span style="FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The Service Layer provides translation between internal and external data structures. &lt;/p&gt;  &lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt;&lt;span style="FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The Business Layer uses a façade pattern to support coarse-grained message-based operations. &lt;/p&gt;  &lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt;&lt;span style="FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Transactions and Business Logic are managed by objects in the business layer. &lt;/p&gt;  &lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt;&lt;span style="FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Business entities are defined using the Table Module pattern (LINQ). &lt;/p&gt;  &lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt;&lt;span style="FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The Table or Row Data Gateway pattern is used to provide a data access interface. &lt;/p&gt;  &lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt;&lt;span style="FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The Query Object pattern is used to support the generation of SQL queries. &lt;/p&gt;  &lt;p class="MsoNormal" style="MARGIN-LEFT: 0.25in"&gt; &lt;/p&gt; &lt;h3 style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0in"&gt;&lt;a name="12ca207a29fd8596__Toc232489740"&gt;&lt;span style="COLOR: #1f497d"&gt; &lt;/span&gt;&lt;/a&gt;&lt;/h3&gt; &lt;h3 style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0in"&gt;&lt;span style="FONT-SIZE: 11pt; COLOR: #1f497d"&gt; &lt;/span&gt;&lt;/h3&gt; &lt;h3 style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0in"&gt;Technical Details&lt;/h3&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: #1f497d"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: #1f497d"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;Client Workstation&lt;/span&gt;&lt;span lang="EN-GB" style="COLOR: navy"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="MARGIN-LEFT: 0.5in"&gt; &lt;/p&gt; &lt;table style="MARGIN-LEFT: 30.2pt; WIDTH: 8in; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" width="768" border="0"&gt; &lt;tbody&gt; &lt;tr style="MIN-HEIGHT: 15.25pt"&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 15.25pt; BACKGROUND: #4f81bd; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 99.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="133"&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: white"&gt; &lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 15.25pt; BACKGROUND: #4f81bd; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 476.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="635"&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr style="MIN-HEIGHT: 29.95pt"&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 29.95pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 99.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="133"&gt;  &lt;p class="MsoNormal"&gt;Target browser is Internet Explorer 6.x and higher&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 29.95pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 476.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="635"&gt;  &lt;p class="MsoNormal"&gt;Browser will initiate the further flow.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;Web Server&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt; &lt;/span&gt;&lt;/p&gt; &lt;table style="MARGIN-LEFT: 30.2pt; WIDTH: 8in; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" width="768" border="0"&gt; &lt;tbody&gt; &lt;tr style="MIN-HEIGHT: 12.1pt"&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 12.1pt; BACKGROUND: #4f81bd; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 99.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="133"&gt; &lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 12.1pt; BACKGROUND: #4f81bd; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 476.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="635"&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: white"&gt; &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="MIN-HEIGHT: 29.95pt"&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 29.95pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 99.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="133"&gt;  &lt;p class="MsoNormal"&gt;&lt;a href="http://asp.net/" target="_blank"&gt;ASP.NET&lt;/a&gt; Page Control&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 29.95pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 476.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="635"&gt;  &lt;p class="MsoNormal"&gt;&lt;a href="http://asp.net/" target="_blank"&gt;ASP.NET&lt;/a&gt; Page controls are used to define each page of the web application.&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;Standard &lt;a href="http://asp.net/" target="_blank"&gt;ASP.NET&lt;/a&gt; page processing is used to handle control events.&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="MIN-HEIGHT: 30.9pt"&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 30.9pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 99.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="133"&gt;  &lt;p class="MsoNormal"&gt;Composite View&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 30.9pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 476.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="635"&gt;  &lt;p class="MsoNormal"&gt;Page, server and user controls represent a Composite View.&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="MIN-HEIGHT: 29.95pt"&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 29.95pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 99.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="133"&gt;  &lt;p class="MsoNormal"&gt;Bound Data Control&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 29.95pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 476.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="635"&gt;  &lt;p class="MsoNormal"&gt;Control that can be bound to a data structure, which is used to provide data displayed by the control.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="MIN-HEIGHT: 30.9pt"&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 30.9pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 99.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="133"&gt;  &lt;p class="MsoNormal"&gt;Proxy&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 30.9pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 476.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="635"&gt;  &lt;p class="MsoNormal"&gt;Provides a local interface used to interact with services on the application tier.&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;Adding a service reference will generate classes used to interact with the service. From a coding perspective the proxy provides a local interface that hides details related to interaction with the service.&lt;/p&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;Proxy is used when the presentation layer is required to communicate using WCF contracts.&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;Application Server – Service Layer&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt; &lt;/span&gt;&lt;/p&gt; &lt;table style="MARGIN-LEFT: 30.2pt; WIDTH: 8in; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" width="768" border="0"&gt; &lt;tbody&gt; &lt;tr style="MIN-HEIGHT: 16.6pt"&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 16.6pt; BACKGROUND: #4f81bd; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 99.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="133"&gt; &lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 16.6pt; BACKGROUND: #4f81bd; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 476.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="635"&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: white"&gt; &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="MIN-HEIGHT: 29.95pt"&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 29.95pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 99.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="133"&gt;  &lt;p class="MsoNormal"&gt;Service Interface&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 29.95pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 476.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="635"&gt;  &lt;p class="MsoNormal"&gt;The service layer can be Class Library Project or could be defined using WCF service, data, message, and fault contracts.&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;Operations exposed by the service are application scoped. For example, instead of providing multiple operations to return demographic information you would provide one operation that returns all data related to demographic information.&lt;/p&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="MIN-HEIGHT: 29.95pt"&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 29.95pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 99.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="133"&gt;  &lt;p class="MsoNormal"&gt;Data Transfer Object&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 29.95pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 476.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="635"&gt;  &lt;p class="MsoNormal"&gt;Used to combine multiple data structures into a unified view that can be passed across physical and logical boundaries.&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="MIN-HEIGHT: 30.9pt"&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 30.9pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 99.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="133"&gt;  &lt;p class="MsoNormal"&gt;Entity Translator&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 30.9pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 476.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="635"&gt;  &lt;p class="MsoNormal"&gt;Implement an object that transforms message data types to business types for requests and reverses the transformation for responses.&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;Classes that provide operations to translate between business entities and WCF data contracts.&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;Translate DTO to Business Entity Objects.&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="BACKGROUND: #e6e6e6"&gt;Public LINQ.DataManager.Order TranslateOrderToOrderDTO();&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p class="MsoNormal"&gt;                &lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;Application Server – Business Layer&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt; &lt;/span&gt;&lt;/p&gt; &lt;table style="MARGIN-LEFT: 30.2pt; WIDTH: 7.45in; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" width="715" border="0"&gt; &lt;tbody&gt; &lt;tr style="MIN-HEIGHT: 13pt"&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 13pt; BACKGROUND: #4f81bd; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 99.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="133"&gt; &lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 13pt; BACKGROUND: #4f81bd; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 436.45pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="582"&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: white"&gt; &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="MIN-HEIGHT: 29.95pt"&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 29.95pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 99.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="133"&gt;  &lt;p class="MsoNormal"&gt;Façade Interface&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 29.95pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 436.45pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="582"&gt;  &lt;p class="MsoNormal"&gt;The business layer implements a façade with coarse grained operations.&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;Implement a unified interface to a set of operations to reduce coupling between systems.&lt;/p&gt; &lt;p class="MsoNormal"&gt;An Interface type is used to define the façade interface.&lt;/p&gt; &lt;p class="MsoNormal"&gt;The Façade acts as a boundary that catches all unhandled exceptions that may occur when processing business operations.&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;interface&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;BusinessFacade&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;    {&lt;/p&gt; &lt;p class="MsoNormal"&gt;        Data.Order GetData();&lt;/p&gt; &lt;p class="MsoNormal"&gt;        &lt;span style="COLOR: blue"&gt;int&lt;/span&gt; SaveData(&lt;span style="COLOR: navy"&gt;LINQ.Data.Order &lt;/span&gt;businessEntity);&lt;/p&gt; &lt;p class="MsoNormal"&gt;        &lt;span style="COLOR: blue"&gt;bool&lt;/span&gt; DeleteData(&lt;span style="COLOR: blue"&gt;int&lt;/span&gt; businessEntityID);&lt;/p&gt; &lt;p class="MsoNormal"&gt;    }&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="MIN-HEIGHT: 29.95pt"&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 29.95pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 99.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="133"&gt;  &lt;p class="MsoNormal"&gt;Business Process Objects&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 29.95pt; BACKGROUND: white; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 436.45pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="582"&gt;  &lt;p class="MsoNormal"&gt;Business process objects are used to handle requests made to the business layer.&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;Business process objects allow you to &lt;i&gt;&lt;span style="COLOR: navy"&gt;Implement Business Rules And Provide Transaction&lt;/span&gt;&lt;/i&gt; support if required.&lt;/p&gt; &lt;p class="MsoNormal"&gt;Business operations that need to be included in a transaction are combined in a single operation exposed by a business process object that implements the transaction script pattern.&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;public bool SaveData(LINQ.Data.Order businessEntity)&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;{&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;    string sError = string.Empty;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;    bool success = false;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;    int orderId = -1;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;    try&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;    {&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;                BeginTransaction();&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;                if (orderId == -1)&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;                {&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;                    orderId = LINQ.DataManager.FindNextOrderID();&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;                    if (orderId == -1)&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;                    {&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;                                sError = &amp;quot;Failed to retrieve new Dealer ID. Rolling Back Transaction&amp;quot;;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;                                RollbackTransaction();&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;                                return success;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;                    }&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;                    orderId = &lt;/span&gt;&lt;span style="COLOR: #ff6600"&gt;LINQ.DataManager.InsertOrder&lt;/span&gt;&lt;span style="COLOR: navy"&gt;(businessEntity);&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;                    if( orderId == 0)&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;                    {&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;                                sError = &amp;quot;Failed to insert Dealer ID. Rolling Back Transaction&amp;quot;;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;                                RollbackTransaction();&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;                                return success;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;                    }&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;                }              &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;                CommitTransaction();&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;                success = true;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;    }&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;    catch (Exception ex)&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;    {&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;                RollbackTransaction();&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;    }&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;    return success;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;}&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;Application Server – Data Access Layer&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt; &lt;/span&gt;&lt;/p&gt; &lt;table style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; MARGIN-LEFT: 30.2pt; BORDER-LEFT: medium none; WIDTH: 8in; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" width="768" border="1"&gt;  &lt;tbody&gt; &lt;tr style="MIN-HEIGHT: 14.35pt"&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 14.35pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 99.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="133"&gt; &lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 14.35pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 476.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="635"&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: white"&gt; &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="MIN-HEIGHT: 30.9pt"&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 30.9pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 99.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="133"&gt;  &lt;p class="MsoNormal"&gt;Table Module / Business Entities&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 30.9pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 476.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="635"&gt;  &lt;p class="MsoNormal"&gt;Business entity that represents a table or view within a database and provides operations to interact with the table or view.&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;Business rules are not implemented within the business entities.&lt;/p&gt; &lt;p class="MsoNormal"&gt;The business entities are just data containers. Business rules are handled by business processing components.&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB"&gt; &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="MIN-HEIGHT: 29.95pt"&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 29.95pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 99.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="133"&gt;  &lt;p class="MsoNormal"&gt;LINQ DataManager&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 29.95pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 476.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="635"&gt;  &lt;p class="MsoNormal"&gt;Separate classes are used to define LINQ query objects.&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;It behaves like a gateway object - defined for each business entity in the design.&lt;/p&gt; &lt;p class="MsoNormal"&gt;The gateway encapsulates all logic related to interacting with the associated DB table or view.&lt;/p&gt; &lt;p class="MsoNormal" style="BACKGROUND: white"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;public int InsertOrder(LINQ.Data.Order order)&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;{&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;     order.InstitutionID = _institutionId;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;    _dataContext.Orders.InsertOnSubmit(order);&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;    _dataContext.SubmitChanges();&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;    return order.OrderID;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;}&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: #1f497d"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="BACKGROUND: #e6e6e6"&gt;&lt;span style="COLOR: #1f497d"&gt; &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt;Database Server&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: navy"&gt; &lt;/span&gt;&lt;/p&gt; &lt;table style="MARGIN-LEFT: 30.2pt; WIDTH: 8in; BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" width="768" border="0"&gt; &lt;tbody&gt; &lt;tr style="MIN-HEIGHT: 13pt"&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 13pt; BACKGROUND: #4f81bd; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 99.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="133"&gt; &lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 13pt; BACKGROUND: #4f81bd; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 476.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="635"&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="COLOR: white"&gt; &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="MIN-HEIGHT: 30.9pt"&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 30.9pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 99.95pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="133"&gt;  &lt;p class="MsoNormal"&gt;SQL Server DB&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; MIN-HEIGHT: 30.9pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 476.05pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="635"&gt;  &lt;p class="MsoNormal"&gt;Tables and views are accessible to the Data Access Layer using LINQ ORM.&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB"&gt; &lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;Reference: &lt;a href="http://apparch.codeplex.com/" target="_blank"&gt;Link1&lt;/a&gt;, &lt;a href="http://apparch.codeplex.com/wikipage?title=App%20Pattern%20-%20Four-Tier%20Web%20Application%20Scenario%20%28Table%20Module&amp;amp;referringTitle=Application%20Patterns" target="_blank"&gt;Link2&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;Hope this helps.&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;Thanks &amp;amp; Regards,&lt;/p&gt; &lt;p class="MsoNormal"&gt;Arun Manglick &lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8307718319698992522-4294811002844131358?l=arun-ts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arun-ts.blogspot.com/feeds/4294811002844131358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arun-ts.blogspot.com/2010/12/n-tier-architecture.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8307718319698992522/posts/default/4294811002844131358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8307718319698992522/posts/default/4294811002844131358'/><link rel='alternate' type='text/html' href='http://arun-ts.blogspot.com/2010/12/n-tier-architecture.html' title='n-Tier Architecture'/><author><name>Arun Manglick</name><uri>http://www.blogger.com/profile/03915326692989759515</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8307718319698992522.post-8037511219363700587</id><published>2010-12-01T04:46:00.001-08:00</published><updated>2010-12-01T06:29:36.282-08:00</updated><title type='text'>MVVM - Silverlight</title><content type='html'>&lt;div class="gmail_quote"&gt;&lt;div lang="EN-US" link="blue" vlink="purple"&gt;&lt;div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-size: 10pt;"&gt;The &lt;b&gt;Model View ViewModel (MVVM)&lt;/b&gt; is an &lt;a href="http://en.wikipedia.org/wiki/Architectural_pattern" target="_blank" title="Architectural pattern"&gt;&lt;span style="color: black; font-size: 11pt; text-decoration: none;"&gt;architectural pattern&lt;/span&gt;&lt;/a&gt; used in software engineering that originated from Microsoft as a specialization of the &lt;span style="color: red;"&gt;Presentation Model&lt;/span&gt; design pattern introduced by &lt;a href="http://en.wikipedia.org/wiki/Martin_Fowler" target="_blank" title="Martin Fowler"&gt;Martin Fowler&lt;/a&gt;.&lt;sup&gt; &lt;/sup&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;b&gt;&lt;span style="color: red; font-size: 10pt;"&gt;Why MVVM &amp;amp; Why not MVC or MVP:&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;In the MVC pattern, the Model is the data, the View is the user interface, and the Controller is the programmatic interface between the view, the model, and the user input.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;This pattern, however, does &lt;span style="color: red;"&gt;not&lt;/span&gt; work well in declarative user interfaces like WPF or Silverlight. Reason, the XAML that these technologies uses can define some of the interface between the input and the view (Using Data Binding, Triggers, and states can be declared in XAML). &lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;Model-View-Presenter (MVP) is another common pattern for layering applications. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;In the MVP pattern, the presenter is responsible for setting and managing state for a view. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;Like MVC, MVP does &lt;span style="color: red;"&gt;not&lt;/span&gt; quite fit the Silverlight model because the XAML might contain declarative Data Binding, Triggers, &amp;amp; State Management. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;So where does that leave us?&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;Luckily for Silverlight , the WPF community has rallied behind a pattern called Model-View-ViewModel (&lt;b&gt;&lt;span style="color: red;"&gt;MVVM&lt;/span&gt;&lt;/b&gt;). &lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;This pattern is an adaptation of the MVC and MVP patterns in which:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0pt; margin-left: 0.5in; margin-right: 0in;"&gt;&lt;span style="font-family: Symbol; font-size: 10pt;"&gt;·&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;The ViewModel provides a data model and behavior to the View. This allows the View to declaratively bind to the ViewModel. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0pt; margin-left: 0.5in; margin-right: 0in;"&gt;&lt;span style="font-family: Symbol; font-size: 10pt;"&gt;·&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;The View becomes a mix of XAML and C#. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0pt; margin-left: 0.5in; margin-right: 0in;"&gt;&lt;span style="font-family: Symbol; font-size: 10pt;"&gt;·&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;The Model represents the data available to the application, and &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0pt; margin-left: 0.5in; margin-right: 0in;"&gt;&lt;span style="font-family: Symbol; font-size: 10pt;"&gt;·&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;The ViewModel prepares the Model in order to bind it to the View. &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;Note: As the MVVM pattern is designed to support WPF and Silverlight, this pattern is only newly &lt;i&gt;&lt;span style="color: red;"&gt;Available To The Public&lt;/span&gt;&lt;/i&gt;, as opposed to MVC or &lt;a href="http://en.wikipedia.org/wiki/Model_View_Presenter" target="_blank" title="Model View Presenter"&gt;Model View Presenter&lt;/a&gt; (MVP).&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;b&gt;&lt;span style="color: red; font-size: 10pt;"&gt;MVVM:&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-size: 10pt;"&gt;Largely based on the &lt;a href="http://en.wikipedia.org/wiki/Model-view-controller" target="_blank" title="Model-view-controller"&gt;MVC&lt;/a&gt; pattern, MVVM is targeted at modern UI development platforms (&lt;span style="color: #0070c0;"&gt;WPF &amp;amp; Silverlight&lt;/span&gt;).&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;MVVM pattern designed to gain two things.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0pt; margin-left: 0.5in; margin-right: 0in;"&gt;&lt;span style="font-family: Symbol; font-size: 10pt;"&gt;·&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;The advantages of separation of functional development provided by &lt;a href="http://en.wikipedia.org/wiki/Model_View_Controller" target="_blank" title="Model View Controller"&gt;MVC&lt;/a&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0pt; margin-left: 0.5in; margin-right: 0in;"&gt;&lt;span style="font-family: Symbol; font-size: 10pt;"&gt;·&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;And leveraging the advantages of XAML and the WPF, by binding data &lt;b&gt;as close as possible&lt;/b&gt; to the Model while using the XAML. Thus minimizing the need for "code behind," especially in the View&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0pt; margin-left: 0.25in; margin-right: 0in;"&gt;&lt;span style="font-family: Symbol; font-size: 10pt;"&gt;·&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;MVVM was designed to make use of specific functions in WPF &amp;amp; Silverlight, to better facilitate the separation of View layer development from the rest of the pattern.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0pt; margin-left: 0.25in; margin-right: 0in;"&gt;&lt;span style="font-family: Symbol; font-size: 10pt;"&gt;·&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;This is done by removing virtually all "code behind" from the View layer.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0pt; margin-left: 0.25in; margin-right: 0in;"&gt;&lt;span style="font-family: Symbol; font-size: 10pt;"&gt;·&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;Instead of requiring designers to write View code, they can use the native WPF markup language &lt;a href="http://en.wikipedia.org/wiki/XAML" target="_blank" title="XAML"&gt;XAML&lt;/a&gt; and &lt;i&gt;&lt;span style="color: #0070c0;"&gt;Create Bindings To The Viewmodel&lt;/span&gt;&lt;/i&gt;, which is written and maintained by application developers. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0pt; margin-left: 0.25in; margin-right: 0in;"&gt;&lt;span style="font-family: Symbol; font-size: 10pt;"&gt;·&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;This separation of roles allows designers to focus on UX needs rather than programming or business logic, allowing for the layers of an application to be developed in multiple work streams.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;Elements of the MVVM pattern are described as below - Also similartiies with MVC.&lt;/span&gt;&lt;/div&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse;"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td style="background: none repeat scroll 0% 0% rgb(192, 80, 77); border: 1pt solid rgb(89, 89, 89); padding: 0in 5.4pt; width: 85.1pt;" valign="top" width="113"&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td style="background: none repeat scroll 0% 0% rgb(192, 80, 77); border-color: rgb(89, 89, 89) rgb(89, 89, 89) rgb(89, 89, 89) -moz-use-text-color; border-style: solid solid solid none; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 544.5pt;" valign="top" width="726"&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt; &lt;td style="border-color: -moz-use-text-color rgb(89, 89, 89) rgb(89, 89, 89); border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 85.1pt;" valign="top" width="113"&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;Model&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;td style="border-color: -moz-use-text-color rgb(89, 89, 89) rgb(89, 89, 89) -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 544.5pt;" valign="top" width="726"&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;As in the classic &lt;a href="http://en.wikipedia.org/wiki/Model_View_Controller" target="_blank" title="Model View Controller"&gt;MVC&lt;/a&gt; pattern, the model refers to either &lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0pt; margin-left: 0.5in; margin-right: 0in;"&gt;&lt;span style="font-size: 10pt;"&gt;(a)&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;An object model that represents the real state content (an object-oriented approach), or &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0pt; margin-left: 0.5in; margin-right: 0in;"&gt;&lt;span style="font-size: 10pt;"&gt;(b)&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;The data access layer that represents that content (a data-centric approach).&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0pt; margin-left: 0.25in; margin-right: 0in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt; &lt;td style="border-color: -moz-use-text-color rgb(89, 89, 89) rgb(89, 89, 89); border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 85.1pt;" valign="top" width="113"&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;View&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;td style="border-color: -moz-use-text-color rgb(89, 89, 89) rgb(89, 89, 89) -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 544.5pt;" valign="top" width="726"&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;As in the classic &lt;a href="http://en.wikipedia.org/wiki/Model_View_Controller" target="_blank" title="Model View Controller"&gt;MVC&lt;/a&gt; pattern, the view refers to all elements displayed by the GUI such as buttons, windows, graphics, and other controls.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt; &lt;td style="border-color: -moz-use-text-color rgb(89, 89, 89) rgb(89, 89, 89); border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 85.1pt;" valign="top" width="113"&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;ViewModel&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;td style="border-color: -moz-use-text-color rgb(89, 89, 89) rgb(89, 89, 89) -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 544.5pt;" valign="top" width="726"&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;The ViewModel is a "Model of the View" that serves in data binding between the View and the Model. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;The View-Model of MVVM is responsible for exposing the data objects from the Model, in such a way that those objects are easily consumed in XAML.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;It is similar to the Controller (in the &lt;a href="http://en.wikipedia.org/wiki/Model_View_Controller" target="_blank" title="Model View Controller"&gt;MVC&lt;/a&gt; pattern) that acts as a Data Binder that changes Model information into View information and passes commands from the View into the Model. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;The ViewModel exposes public properties, commands, and abstractions. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt; &lt;td style="border-color: -moz-use-text-color rgb(89, 89, 89) rgb(89, 89, 89); border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 85.1pt;" valign="top" width="113"&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;Controller&lt;/span&gt;&lt;/div&gt;&lt;/td&gt; &lt;td style="border-color: -moz-use-text-color rgb(89, 89, 89) rgb(89, 89, 89) -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 544.5pt;" valign="top" width="726"&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;some references for MVVM also include a Controller layer or illustrate that the ViewModel is a &lt;a href="http://www.orbifold.net/default/wp-content/uploads/MVVM.jpg" target="_blank"&gt;specialized functional set in parallel with a Controller&lt;/a&gt;, while &lt;a href="http://karlshifflett.files.wordpress.com/2008/11/wpflobmvvm1.png" target="_blank"&gt;others do not&lt;/a&gt;. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;This difference is an ongoing area of discussion regarding the standardization of the MVVM pattern.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;b&gt;&lt;span style="color: red;"&gt;Criticism&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;h2 style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;span style="font-size: 10pt;"&gt;There are currently three main areas of criticism regarding the MVVM pattern.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 3pt; margin-left: 0.5in; margin-right: 0in;"&gt;&lt;span style="font-size: 10pt;"&gt;1.&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;MVVM currently lacks standardization from Microsoft both in implementation and in toolsets&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0pt; margin-left: 0.5in; margin-right: 0in;"&gt;&lt;span style="font-size: 10pt;"&gt;2.&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;The overhead in implementing MVVM is "overkill" for simple UI operations. Also for larger applications, generalizing the View layer becomes more difficult. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0pt; margin-left: 0.5in; margin-right: 0in;"&gt;&lt;span style="font-size: 10pt;"&gt;3.&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;Moreover, data binding, if not managed well, can result in considerable memory consumption in an application.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0pt; margin-left: 0.5in; margin-right: 0in;"&gt;4.&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;Exercise in creating large numbers of data bindings to the ViewModel results in duplicate code and maintenance problems.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;b&gt;&lt;span style="color: red;"&gt;Implementation:&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;img border="0" height="368" src="cid:image002.jpg@01CB4DC9.34F2BE40" width="996" /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse;"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td style="background: none repeat scroll 0% 0% rgb(192, 80, 77); border: 1pt solid windowtext; padding: 0in 5.4pt; width: 35.6pt;" valign="top" width="47"&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td style="background: none repeat scroll 0% 0% rgb(192, 80, 77); border-color: windowtext windowtext windowtext -moz-use-text-color; border-style: solid solid solid none; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 7.25in;" valign="top" width="696"&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span style="color: white;"&gt;Model&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt; &lt;td style="border-color: -moz-use-text-color windowtext windowtext; border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 35.6pt;" valign="top" width="47"&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td style="border-color: -moz-use-text-color windowtext windowtext -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 7.25in;" valign="top" width="696"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;namespace&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; Arun.Manglick.Silverlight.Model&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Product&lt;/span&gt; : &lt;span style="color: #2b91af;"&gt;INotifyPropertyChanged&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; Private Variables&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; productId;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; modelNumber;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; modelName;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;double&lt;/span&gt; unitCost;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; description;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8307718319698992522-8037511219363700587?l=arun-ts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arun-ts.blogspot.com/feeds/8037511219363700587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arun-ts.blogspot.com/2010/12/mvvm-silverlight.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8307718319698992522/posts/default/8037511219363700587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8307718319698992522/posts/default/8037511219363700587'/><link rel='alternate' type='text/html' href='http://arun-ts.blogspot.com/2010/12/mvvm-silverlight.html' title='MVVM - Silverlight'/><author><name>Arun Manglick</name><uri>http://www.blogger.com/profile/03915326692989759515</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8307718319698992522.post-74133967656913400</id><published>2010-12-01T01:59:00.001-08:00</published><updated>2010-12-01T01:59:55.717-08:00</updated><title type='text'>Design pattern - IOC &amp; DI</title><content type='html'>&lt;div class="gmail_quote"&gt; &lt;div lang="EN-US" vlink="purple" link="blue"&gt; &lt;div&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;The Inversion of Control (IoC) pattern, is also known as Dependency Injection. Or In other words - IOC is implemented using DI. Or DI is the main method to implement IoC.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;The target behind applying IOC and DI is to build &lt;span style="COLOR: #e36c0a"&gt;Loosely Coupled Software Architecture&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;IoC is not a new concept, however. It has been around for &lt;a href="http://www.objectmentor.com/resources/articles/dip.pdf" target="_blank"&gt;several years now&lt;/a&gt;. Using OO design principles and features such as Interface, Inheritance, and Polymorphism, the IoC pattern enables better software design that facilitates reuse, Loose Coupling, and easy testing of software components&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;The basic principle of IOC stands on the base of Bollywood principle – &lt;a name="12c9d2e09dd81dee_Donotcalluswewillcallyou"&gt;"Do not call us we will call you&lt;/a&gt;".&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;In other words it like aggregated class (here Address) saying to the container class (here Customer), do not create me I will create myself using some one else.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;This article discusses IoC and demonstrates how to use this pattern in your software design with/without using any of the open source frameworks.&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="COLOR: red"&gt;IoC Design Pattern &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt; &lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Lets understand this with an example.&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;Assume Class A has a relationship with Class B: it wants to use the services of Class B. The usual way to establish this relationship is to instantiate Class B inside Class A. &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;table style="BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #c0504d; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 26.6pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="35"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: white"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #c0504d; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 315pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="420"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: white"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 26.6pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="35"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 315pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="420"&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt;public class A&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt;{&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt;  private B b;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt;  public A()&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt;  {&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt;    b=new B();&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt;  }&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt;}&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span&gt;&lt;b&gt;&lt;span style="COLOR: #00b050; FONT-FAMILY: Consolas"&gt;Listing 1 - &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="COLOR: #00b050; FONT-FAMILY: Consolas"&gt;Class A Directly Refers Class B&lt;/span&gt;&lt;/span&gt;&lt;span style="COLOR: #00b050; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/pre&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 26.6pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="35"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: medium none; WIDTH: 315pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="420"&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt;public class A&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt;{&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt;  private B b;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt;  public A()&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt;  {&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt;    C c=new C();&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt;    b=new B(c);&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt;  }&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt;}&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span&gt;&lt;b&gt;&lt;span style="COLOR: #00b050; FONT-FAMILY: Consolas"&gt;Listing 2. Class A Directly Refers Class B and Class C&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="FONT-FAMILY: Consolas"&gt;&lt;/span&gt;&lt;/pre&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;Though this approach works, it creates tight coupling between the classes. You can&amp;#39;t easily change Class B without modifying Class A.&lt;/p&gt; &lt;p class="MsoNormal"&gt;Here are the problems.&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p&gt;&lt;span style="FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;This design assumes that - Class B is a concrete class that has a default constructor. Now If Class B is changed to have a non-default constructor, then Class A would also require a change.&lt;/p&gt;  &lt;p&gt;&lt;span style="FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Also If Class B changed to have a non-default constructor, which takes Class C , then again the Class A would require a change.&lt;/p&gt;  &lt;p&gt;&lt;span style="FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Now If Object &amp;quot;a&amp;quot; owns both Object &amp;quot;b&amp;quot; and Object &amp;quot;c&amp;quot;. If Class B or Class C changes at all, then Class A needs to change as well.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;br&gt;In essence, a simple design of a simple class with implicit design assumptions becomes a maintenance nightmare in the future. Consider how difficult making changes would be if you had this scenario in a typical application with several classes.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;Here comes the usage of 'IoC pattern Framework'.&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: #1f497d"&gt;Let's re-understand the above problem with realistic objects&lt;/span&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red"&gt;.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;In the above code, the biggest issue is the tight coupling between classes. The same is found here in real-time example also.&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;table style="BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #c0504d; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 369.3pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="492"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: white"&gt;IOC - Problem&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 369.3pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="492"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;img height="258" alt="cid:image001.png@01CB61A0.33850B90" src="cid:image001.png@01CB61A0.33850B90" width="476" border="0"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Here, the Customer class depends on the Address object. So for any reason Address class changes it will lead to change and compiling of 'ClsCustomer' class also. I.e. You can&amp;#39;t easily change Address class without modifying 'ClsCustomer' Class. For e.g.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;If Class Address is changed to have a non-default constructor, then Class Customer would also require a change.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Now If Object &amp;quot;Customer&amp;quot; owns two Objects &amp;quot;Address&amp;quot; and &amp;quot;SocietyDetail&amp;quot;. If these two Class changes at all, then Class Customer needs to change as well.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;So let's put down problems with this approach:&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;ul style="MARGIN-TOP: 0in" type="disc"&gt; &lt;li class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;The biggest problem is that Customer class controls the creation of Address object. &lt;/span&gt;&lt;/li&gt; &lt;li class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Address class is directly referenced in the Customer class which leads to tight coupling between address and customer objects. &lt;/span&gt;&lt;/li&gt; &lt;li class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Customer class is aware of the Address class type. So if we add new Address types like home address, office address it will lead to changes in the customer class also as customer class is exposed to the actual address implementation.&lt;/span&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: #1f497d"&gt;In essence - If for any reason the Address object is not able to create,  the whole Customer class will fail in the constructor initialization itself&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt"&gt; – &lt;span style="BACKGROUND: lime"&gt;Very High/Tight Coupling&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red"&gt;Solution: IoC&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;The main problem roots from the customer class creating the address object. The solution is:&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Shift the task/control of object creation from the customer class to some other entity – Problem Solved.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;In other sentence if we are able to &lt;b&gt;&lt;span style="BACKGROUND: yellow; COLOR: red"&gt;Invert&lt;/span&gt;&lt;/b&gt; this control to a third party we have found our solution. So the solution name is IOC (Inversion of control).&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;This is the opposite of using an API, where the developer&amp;#39;s code makes the invocations to the API code. Hence, frameworks &lt;b&gt;&lt;span style="BACKGROUND: yellow; COLOR: red"&gt;Invert&lt;/span&gt;&lt;/b&gt; the control: it is not the developer code that is in charge, instead the framework makes the calls based on some stimulus. I.e. &lt;span style="COLOR: #e36c0a"&gt;Do not call us we will call you.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;This solutiuon &lt;span style="BACKGROUND: lime"&gt;Achieves The Decoupling&lt;/span&gt;&lt;/span&gt;, and &lt;span style="FONT-SIZE: 10pt"&gt;is refrerred to as - IOC (&lt;span style="COLOR: #e36c0a"&gt;Inversion of control&lt;/span&gt;).&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Here is the solution detail - Expose a method which allows us to set the address object. I.e. Let the address object creation be delegated to the IOC framework. IOC framework can be a class, client class or some kind of IOC container. So it will be two step procedure IOC framework creates the address object and passes this reference to the customer class.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;table style="BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #c0504d; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 468.3pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="624"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: white"&gt;Solution – Using DI&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 468.3pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="624"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;img height="373" alt="cid:image002.png@01CB61A0.778FB740" src="cid:image002.png@01CB61A0.778FB740" width="608" border="0"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 468.3pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="624"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt;clsAddress objAddress = new clsAddress(..);&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt;clsCustomer objCustomer = new clsCustomer;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt;objCustomr.setAddress(objAddress); &lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: #00b050"&gt;// IOC Framework&lt;/span&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;The basic principle of IOC stands on the base of Hollywood principle - &lt;span style="COLOR: #e36c0a"&gt;Do not call us we will call you&lt;/span&gt; (Translating for struggling actors)&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;In other words it like Address class saying to the Customer class, &lt;i&gt;&lt;span style="COLOR: #00b050"&gt;Do Not Create Me I Will Create Myself Using Some One Else&lt;/span&gt;&lt;/i&gt;. &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;There are two principles of IOC:&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;ul style="MARGIN-TOP: 0in" type="disc"&gt; &lt;li class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Main classes &lt;span style="COLOR: #1f497d"&gt;(Here like Customer) &lt;/span&gt;aggregating other classes &lt;span style="COLOR: #1f497d"&gt;(Here like Address)&lt;/span&gt; should not depend on the direct implementation of the aggregated classes &lt;span style="COLOR: #1f497d"&gt;(Here like Address)&lt;/span&gt;. Both the classes should depend on abstraction. So the customer class should not depend directly on the address class. Both address and customer class should depend on an abstraction either using interface or abstract class. &lt;/span&gt;&lt;/li&gt;  &lt;li class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Abstraction should not depend on details, details should depend on abstraction.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a name="12c9d2e09dd81dee_WaysofimplementingIOC"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red"&gt;IoC Frameworks - Ways of implementing IoC&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Ok, now we know the problem, let's try to understand the broader level solution. IOC is implemented using DI (Dependency injection). &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;We have discussed on a broader level about how to inject the dependency in the previous sections. In this section we will dive deeper in to &lt;span style="COLOR: #00b050"&gt;other ways&lt;/span&gt; of implementing DI.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Several open source IoC frameworks like &lt;a href="http://www.castleproject.org/" target="_blank"&gt;Windsor Container&lt;/a&gt;, &lt;a href="http://stw.castleproject.org/Default.aspx?Page=MainPage&amp;amp;NS=Windsor&amp;amp;AspxAutoDetectCookieSupport=1#Samples_8" target="_blank"&gt;Castle Windsor&lt;/a&gt;, &lt;a href="http://www.devx.com/DevX/Link/21667" target="_blank"&gt;Spring&lt;/a&gt;, &lt;a href="http://www.picocontainer.org/" target="_blank"&gt;PicoContainer&lt;/a&gt;, and &lt;a href="http://jakarta.apache.org/hivemind/" target="_blank"&gt;HiveMind&lt;/a&gt; support the IoC pattern. While the general IoC principle is simple, each of these frameworks supports different implementations and offers different benefits. The IoC pattern can be implemented in four ways, as mentioned below.&lt;b&gt;&lt;span style="COLOR: red"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: red"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;img height="311" alt="cid:image003.png@01CB6550.79FFD6F0" src="cid:image003.png@01CB6550.79FFD6F0" width="633" border="0"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;The figure shows how IOC and DI are organized. So we can say &lt;b&gt;&lt;i&gt;&lt;span style="COLOR: #00b050"&gt;IOC Is A Principle &lt;/span&gt;&lt;span style="COLOR: #e36c0a"&gt;while&lt;/span&gt;&lt;span style="COLOR: #00b050"&gt; DI Is A Way Of Implementing IOC&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;. In DI we have &lt;b&gt;four broader ways&lt;/b&gt; of implementing the same:&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;ul style="MARGIN-TOP: 0in" type="disc"&gt; &lt;li class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Constructor way &lt;/span&gt;&lt;/li&gt; &lt;li class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Exposing setter and getter (As in above examples)&lt;/span&gt;&lt;/li&gt; &lt;li class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Interface implementation &lt;/span&gt;&lt;/li&gt; &lt;li class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Service locator &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p class="MsoNormal"&gt;&lt;a name="12c9d2e09dd81dee_Constructormethodology"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Constructor Methodology &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;In this methodology we pass the object reference in the constructor itself. So when the client creates the object he passes the object in the constructor while the object is created. &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Its main advantage is that only the creator knows about the referenced object.&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;This methodology is not suited for client who can only use default constructors. Then you need to go with a setter-based IoC.&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;table style="BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #c0504d; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 369.3pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="492"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: white"&gt;IOC - Constructor Methodology &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 369.3pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="492"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;img height="201" alt="http://www.codeproject.com/KB/aspnet/IOCDI/ConstructorbasedDI.JPG" src="cid:image004.jpg@01CB6552.E2307020" width="325" border="0"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Figure: - Constructor based DI&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p class="MsoNormal"&gt;&lt;a name="12c9d2e09dd81dee_Setterandgetter"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Setter and Getter &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;This is the most commonly used DI methodology. The dependent objects are exposed through set/get methods of classes. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Setter-based IoC is good for objects that take optional parameters and objects that need to change their properties many times during their lifecycles. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;The bad point is because the objects are publicly exposed it breaks the encapsulation rule of object oriented programming.&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;table style="BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #c0504d; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 369.3pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="492"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: white"&gt;IOC – Setter &amp;amp; Getter&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 369.3pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="492"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;img height="245" alt="http://www.codeproject.com/KB/aspnet/IOCDI/GetterandSetter.JPG" src="cid:image005.jpg@01CB6552.E2307020" width="363" border="0"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Figure: - Getter and Setter&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;br&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a name="12c9d2e09dd81dee_InterfacebasedDI"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Interface based DI&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;In this type of IoC, objects implement a specific interface from the IoC framework, which the IoC framework will use to properly inject the objects. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;One of the main advantages of this type is that it doesn&amp;#39;t need an external configuration file to configure the object references. Since you need to use the IoC framework&amp;#39;s marker interface, the IoC framework knows how to glue the objects together. &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;The main disadvantage of this approach is that the marker interface ties your application to a specific IoC framework. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;You can see in figure 'Interface based DI' we have implemented an interface 'IAddressDI' which has a 'setAddress' method which sets the address object. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;This interface is then implemented in the customer class. External client / containers can then use the 'setAddress' method to inject the address object in the customer object.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;table style="BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #c0504d; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 369.3pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="492"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: white"&gt;IOC – Interface Based&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 369.3pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="492"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;img height="350" alt="http://www.codeproject.com/KB/aspnet/IOCDI/InterfacebasedDI.JPG" src="cid:image006.jpg@01CB6552.E2307020" width="365" border="0"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Figure: - Interface based DI&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a name="12c9d2e09dd81dee_Servicelocator"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Service Locator&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;The other way to inject dependency is by using service locator. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Your main class in need to aggregate the child object, will use the service locator to obtain instance of the address object. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;The service locator class does not create instances of the address object, it provides a methodology to register and find the services which will help in creating objects. &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;table style="BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #c0504d; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 369.3pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="492"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: white"&gt;IOC – Interface Based&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 369.3pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="492"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;img height="196" alt="http://www.codeproject.com/KB/aspnet/IOCDI/Servicelocator_small.JPG" src="cid:image007.jpg@01CB6552.E2307020" width="640" border="0"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Figure: - Service locator&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a name="12c9d2e09dd81dee_ImplementingtheDI"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Implementing the DI&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt;: &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Here we'll see how we can implement DI using 'Programatically' and 'Open Source IoC Framework - &lt;a href="http://stw.castleproject.org/Default.aspx?Page=MainPage&amp;amp;NS=Windsor&amp;amp;AspxAutoDetectCookieSupport=1#Samples_8" target="_blank"&gt;Windsor container&lt;/a&gt;'&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;If you are starting a new project, you can choose any of the open source IoC frameworks based on your needs. &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;If you want to use the IoC pattern in your existing project then you need to write your own classes that support IoC. Though the open source frameworks offer off-the-shelf components and may provide many more features than your own implementation, you can still develop a set of classes that support the IoC pattern using either of the above approach.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Here for example – Constructor Approach.&lt;/span&gt;&lt;/p&gt; &lt;table style="BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #c0504d; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 369.3pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="492"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: white"&gt;IOC – Interface Based&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 369.3pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="492"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; COLOR: blue; FONT-FAMILY: Consolas"&gt;interface&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;span style="COLOR: #2b91af"&gt;IAddress&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;{&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; AddAddress(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; address);&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;}&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 369.3pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="492"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; COLOR: blue; FONT-FAMILY: Consolas"&gt;public&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Address&lt;/span&gt; : &lt;span style="COLOR: #2b91af"&gt;IAddress&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;{&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; address;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; AddAddress(&lt;span style="COLOR: blue"&gt;string&lt;/span&gt; address)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   {&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;      &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.address = address;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   }&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;}&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; COLOR: blue; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 369.3pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="492"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; COLOR: blue; FONT-FAMILY: Consolas"&gt;public&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;span style="COLOR: blue"&gt;class&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ClsCustomer&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;{&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   &lt;span style="COLOR: #2b91af"&gt;IAddress&lt;/span&gt; address;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; ClsCustomer(&lt;span style="COLOR: #2b91af"&gt;IAddress&lt;/span&gt; address)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   {&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;     &lt;span style="COLOR: blue"&gt;this&lt;/span&gt;.address = address;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   }&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; COLOR: blue; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; COLOR: blue; FONT-FAMILY: Consolas"&gt;   public&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; GetAddress()&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   {&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;      &lt;span style="COLOR: #2b91af"&gt;Type&lt;/span&gt; c = &lt;span style="COLOR: #2b91af"&gt;Type&lt;/span&gt;.GetType(&lt;span style="COLOR: #a31515"&gt;&amp;quot;Address&amp;quot;&lt;/span&gt;, &lt;span style="COLOR: blue"&gt;true&lt;/span&gt;, &lt;span style="COLOR: blue"&gt;true&lt;/span&gt;);&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;      &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; (&lt;span style="COLOR: blue"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR: #2b91af"&gt;IAddress&lt;/span&gt;).IsAssignableFrom(c))&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;      {&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;         &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; (objAddress &lt;span style="COLOR: blue"&gt;as&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Address&lt;/span&gt;).MyAddress;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;      }&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;      &lt;span style="COLOR: blue"&gt;return&lt;/span&gt; &lt;span style="COLOR: blue"&gt;string&lt;/span&gt;.Empty;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   }&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;}&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; COLOR: blue; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 369.3pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="492"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; COLOR: blue; FONT-FAMILY: Consolas"&gt;class&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; &lt;span style="COLOR: #2b91af"&gt;Client&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;{&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   &lt;span style="COLOR: blue"&gt;public&lt;/span&gt; &lt;span style="COLOR: blue"&gt;void&lt;/span&gt; Run()&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   {&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;      &lt;span style="COLOR: #2b91af"&gt;IAddress&lt;/span&gt; objAddress = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;Address&lt;/span&gt;();&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;      objAddress.AddAddress(&lt;span style="COLOR: #a31515"&gt;&amp;quot;India&amp;quot;&lt;/span&gt;);&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;            &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;      &lt;span style="COLOR: #2b91af"&gt;ClsCustomer&lt;/span&gt; customer = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ClsCustomer&lt;/span&gt;(objAddress);&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;      &lt;span style="COLOR: blue"&gt;string&lt;/span&gt; address = customer.GetAddress();&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;   }        &lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt;}&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 9.5pt; COLOR: blue; FONT-FAMILY: Consolas"&gt; &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Ok, now lets see how this will work if we use the &lt;a href="http://stw.castleproject.org/Default.aspx?Page=MainPage&amp;amp;NS=Windsor&amp;amp;AspxAutoDetectCookieSupport=1#Samples_8" target="_blank"&gt;Windsor container&lt;/a&gt;. &lt;/span&gt;&lt;/p&gt;  &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Figure 'Windsor container' shows how it looks like. So &lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.5in; MARGIN-RIGHT: 0in"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Step 1 creates the Windsor container object. &lt;/span&gt;&lt;/p&gt;  &lt;p style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.5in; MARGIN-RIGHT: 0in"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Step 2 and 3 register the types (Iaddress) and concrete objects(clsAddress, clsCustomer) in the container. &lt;/span&gt;&lt;/p&gt;  &lt;p style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.5in; MARGIN-RIGHT: 0in"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Step 4 requests the container to create the customer object. &lt;strong&gt;&lt;span style="COLOR: #00b050"&gt;In this step the container resolves and set the address object in the Constructor&lt;/span&gt;&lt;/strong&gt;. &lt;/span&gt;&lt;/p&gt;  &lt;p style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.5in; MARGIN-RIGHT: 0in"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;It's like - &lt;/span&gt;&lt;span style="FONT-SIZE: 9.5pt; COLOR: #2b91af; FONT-FAMILY: Consolas"&gt;ClsCustomer&lt;/span&gt;&lt;span style="FONT-SIZE: 9.5pt; FONT-FAMILY: Consolas"&gt; customer = &lt;span style="COLOR: blue"&gt;new&lt;/span&gt; &lt;span style="COLOR: #2b91af"&gt;ClsCustomer&lt;/span&gt;(objAddress);&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="MARGIN-BOTTOM: 0pt; MARGIN-LEFT: 0.5in; MARGIN-RIGHT: 0in"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol"&gt;&lt;span&gt;·&lt;span style="FONT: 7pt &amp;#39;Times New Roman&amp;#39;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Step 5 releases the customer object.&lt;br&gt;  &lt;/span&gt;&lt;/p&gt; &lt;table style="BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #c0504d; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 369.3pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="492"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: white"&gt;IOC – Interface Based&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 369.3pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="492"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;img height="166" alt="http://www.codeproject.com/KB/aspnet/IOCDI/Windsorcontainer.JPG" src="cid:image008.jpg@01CB6656.612275A0" width="640" border="0"&gt;&lt;/span&gt;&lt;/b&gt;&lt;strong&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 10pt"&gt;Figure: - Windsor container &lt;/span&gt;&lt;/strong&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;In actual implementation using the container we never use client code as above, rather we use config files.&lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;You can see from figure 'Creating using config files' we have better flexibility to add more objects. In config file we need to define all the components in the components section.&lt;/span&gt;&lt;/p&gt;  &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;The &lt;span style="COLOR: #00b050"&gt;XmlInterpreter&lt;/span&gt; object helps to read the config file to register the objects in the container. &lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Using the &lt;span style="COLOR: #00b050"&gt;Container.Resolve&lt;/span&gt; method we have finally created the customer object. &lt;/span&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;So the container plays the mediator role of understanding the Customer object and then injecting the Address object in the customer object through the constructor. &lt;/span&gt;&lt;/p&gt;  &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;br&gt; &lt;/span&gt;&lt;/p&gt; &lt;table style="BORDER-COLLAPSE: collapse" cellspacing="0" cellpadding="0" border="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #bfbfbf 1pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #c0504d; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 369.3pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="492"&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: white"&gt;IOC – Interface Based&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td style="BORDER-RIGHT: #bfbfbf 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: #bfbfbf 1pt solid; WIDTH: 369.3pt; PADDING-TOP: 0in; BORDER-BOTTOM: #bfbfbf 1pt solid" valign="top" width="492"&gt;  &lt;p style="MARGIN: 0in 0in 0pt; TEXT-ALIGN: center" align="center"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt"&gt;&lt;img height="434" alt="http://www.codeproject.com/KB/aspnet/IOCDI/Creatingusingconfigfiles_small.JPG" src="cid:image009.jpg@01CB6656.612275A0" width="640" border="0"&gt;&lt;/span&gt;&lt;/b&gt;&lt;strong&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 10pt"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p style="MARGIN: 0in 0in 0pt; TEXT-ALIGN: center" align="center"&gt;&lt;strong&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;strong&gt;&lt;span style="FONT-WEIGHT: normal; FONT-SIZE: 10pt"&gt;Figure: - Creating using config files&lt;/span&gt;&lt;/strong&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p style="MARGIN: 0in 0in 0pt"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;References: &lt;a href="http://www.codeproject.com/KB/aspnet/IOCDI.aspx" target="_blank"&gt;Link1&lt;/a&gt;, &lt;a href="http://www.devx.com/Java/Article/27583/1954?pf=true" target="_blank"&gt;Link2&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Hope this helps.&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Thanks &amp;amp; Regards,&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE: 10pt"&gt;Arun Manglick&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8307718319698992522-74133967656913400?l=arun-ts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arun-ts.blogspot.com/feeds/74133967656913400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arun-ts.blogspot.com/2010/12/design-pattern-ioc-di.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8307718319698992522/posts/default/74133967656913400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8307718319698992522/posts/default/74133967656913400'/><link rel='alternate' type='text/html' href='http://arun-ts.blogspot.com/2010/12/design-pattern-ioc-di.html' title='Design pattern - IOC &amp; DI'/><author><name>Arun Manglick</name><uri>http://www.blogger.com/profile/03915326692989759515</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8307718319698992522.post-5058281488899129533</id><published>2010-11-29T22:46:00.001-08:00</published><updated>2010-11-29T22:48:02.779-08:00</updated><title type='text'>Date Validation</title><content type='html'>&lt;div class="gmail_quote"&gt;&lt;div lang="EN-US" link="blue" vlink="purple"&gt;&lt;div&gt;&lt;div class="MsoNormal"&gt;Mostly found, data validation is slightly tricky. Checking against only Regurlar experession deos not serves the purpose. Here is the right apporach.&lt;/div&gt;&lt;div class="MsoNormal"&gt;It involves two steps.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-left: 0.25in;"&gt;1.&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Check for proper format – Using Regex - &lt;/div&gt;&lt;div style="margin-left: 0.25in;"&gt;2.&lt;span style="font: 7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Chech for Date validity against Feburary Month (with and without Leap Year).&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Here it is:&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse; border: medium none;"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td style="background: none repeat scroll 0% 0% rgb(192, 80, 77); border: 1pt solid rgb(191, 191, 191); padding: 0in 5.4pt; width: 80.6pt;" valign="top" width="107"&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt; &lt;td style="background: none repeat scroll 0% 0% rgb(192, 80, 77); border-color: rgb(191, 191, 191) rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; border-style: solid solid solid none; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 472.5pt;" valign="top" width="630"&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt; &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 80.6pt;" valign="top" width="107"&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size: x-small;"&gt;Step 1&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt; &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 472.5pt;" valign="top" width="630"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;string&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; REGEXPR = &lt;span style="color: #a31515;"&gt;@"^(&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style="background: none repeat scroll 0% 0% yellow; color: #0070c0; font-family: Consolas; font-size: 10pt;"&gt;0?[1-9]|1[012]&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;)[- /.](&lt;/span&gt;&lt;b&gt;&lt;span style="background: none repeat scroll 0% 0% yellow; color: #0070c0; font-family: Consolas; font-size: 10pt;"&gt;0?[1-9]|[12][0-9]|3[01]&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;)[- /.](&lt;/span&gt;&lt;b&gt;&lt;span style="background: none repeat scroll 0% 0% yellow; color: #0070c0; font-family: Consolas; font-size: 9.5pt;"&gt;19|20)\d\d$&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"&gt;"&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: 9.5pt;"&gt;bool res = Regex&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;.IsMatch(yourDate, REGEXPR);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt; &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 80.6pt;" valign="top" width="107"&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-size: x-small;"&gt;Step2: &lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/td&gt; &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 472.5pt;" valign="top" width="630"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;string&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; date = &lt;span style="color: #a31515;"&gt;"02/29/2009"&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;bool&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt; res = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;try&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;DateTime&lt;/span&gt; testDate = &lt;span style="color: #2b91af;"&gt;Convert&lt;/span&gt;.ToDateTime(date);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: blue; font-family: Consolas; font-size: 9.5pt;"&gt;catch&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;&amp;nbsp;&amp;nbsp; res = &lt;span style="color: blue;"&gt;false&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: #2b91af; font-family: Consolas; font-size: 9.5pt;"&gt;MessageBox&lt;/span&gt;&lt;span style="font-family: Consolas; font-size: 9.5pt;"&gt;.Show(res.ToString()); &lt;span style="color: green;"&gt;// False&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;These steps certifies the date correctness.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Hope this helps..&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Regards,&lt;/div&gt;&lt;div class="MsoNormal"&gt;&amp;nbsp;Arun Manglick&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8307718319698992522-5058281488899129533?l=arun-ts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arun-ts.blogspot.com/feeds/5058281488899129533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arun-ts.blogspot.com/2010/11/date-validation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8307718319698992522/posts/default/5058281488899129533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8307718319698992522/posts/default/5058281488899129533'/><link rel='alternate' type='text/html' href='http://arun-ts.blogspot.com/2010/11/date-validation.html' title='Date Validation'/><author><name>Arun Manglick</name><uri>http://www.blogger.com/profile/03915326692989759515</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8307718319698992522.post-6076464448101034708</id><published>2010-11-22T00:32:00.001-08:00</published><updated>2010-11-22T00:32:03.540-08:00</updated><title type='text'>n-Tier Architecture</title><content type='html'>&lt;div class="gmail_quote"&gt;          &lt;div link="blue" vlink="purple" lang="EN-US"&gt;  &lt;div&gt;  &lt;h1&gt;Introduction&lt;/h1&gt;  &lt;h3&gt;&lt;a name="12c72ada29488fbc__Toc232489731"&gt;&lt;span&gt;1.1&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;Purpose&lt;/a&gt;&lt;/h3&gt;  &lt;p class="MsoNormal" style="margin-left: 0.25in; text-indent: 0.5in;"&gt;This document describes the details of four tier implementation of the new architecture.&lt;/p&gt;  &lt;h3&gt;&lt;a name="12c72ada29488fbc__Toc232489732"&gt;&lt;span&gt;1.2&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;Scope&lt;/a&gt;&lt;/h3&gt;  &lt;p class="MsoNormal" style="margin-left: 0.25in; text-indent: 0.5in;"&gt;The scope  of this document is demonstrating the four tier implementation of the new architecture.&lt;/p&gt;  &lt;h3&gt;&lt;a name="12c72ada29488fbc__Toc232489733"&gt;&lt;span&gt;1.3&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;Intendent Audience&lt;/a&gt;&lt;/h3&gt;  &lt;p class="MsoNormal" style="margin-left: 0.75in;"&gt;This document is primarily targeted for the developers and architects working on the Veriphy applications. It provides a useful perspective to other stakeholders such as managers, and the customer.&lt;/p&gt;  &lt;h1&gt;&lt;a name="12c72ada29488fbc__Toc69014540"&gt;&lt;/a&gt;&lt;a name="12c72ada29488fbc__Toc97872080"&gt;&lt;/a&gt;&lt;a name="12c72ada29488fbc__Toc232489734"&gt; &lt;/a&gt;&lt;/h1&gt;  &lt;h1&gt;Overall Description&lt;/h1&gt;  &lt;h3&gt;&lt;a name="12c72ada29488fbc__Toc69014546"&gt;&lt;/a&gt;&lt;a name="12c72ada29488fbc__Toc97872082"&gt;&lt;/a&gt;&lt;a name="12c72ada29488fbc__Toc232489735"&gt;&lt;span&gt;1.4&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;Assumptions and Dependencies&lt;/a&gt;&lt;/h3&gt;  &lt;h3&gt;&lt;a name="12c72ada29488fbc__Toc232489736"&gt;&lt;span&gt;1.5&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;Conceptual Overview&lt;/a&gt;&lt;/h3&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.75in;"&gt;&lt;a name="12c72ada29488fbc__Toc148188351"&gt;In this scenario, the solution is divided across four separate tiers, or physical machines. &lt;/a&gt;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.75in;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 1in;"&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The client workstation represents &lt;span style="color: navy;"&gt;first tier&lt;/span&gt; that uses a browser application to interact with the Web server. &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 1in;"&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The Web server represents a &lt;span style="color: navy;"&gt;second tier&lt;/span&gt; that contains the presentation layer, which is responsible for handling requests from the user and interacting with the business layer to implement the request. &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 1in;"&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The application server represents the &lt;span style="color: navy;"&gt;third tier&lt;/span&gt; with service, business, and data access layers. &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 1in;"&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The &lt;span style="color: navy;"&gt;fourth tier&lt;/span&gt; in this design is the database server.&lt;/p&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt;  &lt;h3&gt;&lt;a name="12c72ada29488fbc__Toc232489737"&gt;&lt;span&gt;1.6&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;Tiered Diagram&lt;/a&gt;&lt;/h3&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;img src="cid:image001.png@01CB8A4B.3E0D7240" height="226" width="795"&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 1in;"&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Browser interaction with the Web Server uses standard HTTP GET and POST requests. &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 1in;"&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The presentation layer uses a request-based / message-based protocol to interact with the service layer. &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 1in;"&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The Service Layer uses a Facade call to interact with the business layer.&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 1in;"&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Stand-alone &lt;a href="http://ASP.NET" target="_blank"&gt;ASP.NET&lt;/a&gt; Web application that supports basic CRUD operations. &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 1in;"&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Presentation and Business logic are distributed across physical boundaries. &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 1in;"&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;DAL implementation will be implemented using LINQ.&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 1in;"&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The application uses data from an existing database schema. &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 1in;"&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Tables and views in the database define data structures used by the application&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt; &lt;/p&gt;  &lt;h3&gt;&lt;a name="12c72ada29488fbc__Toc232489738"&gt;&lt;span&gt;1.7&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;Another View&lt;/a&gt;&lt;/h3&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt; &lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b&gt; &lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 2in;"&gt;&lt;b&gt;&lt;img src="cid:image002.gif@01CB8A4B.3E0D7240" height="513" width="362"&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 2in;"&gt;&lt;b&gt; &lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 2in;"&gt;&lt;b&gt; &lt;/b&gt;&lt;/p&gt;  &lt;h3&gt;&lt;a name="12c72ada29488fbc__Toc174434376"&gt;&lt;/a&gt;&lt;a name="12c72ada29488fbc__Toc232489739"&gt;&lt;span&gt;1.8&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;Detailed Tiered/Layered&lt;/a&gt;&lt;/h3&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt;&lt;img src="cid:image004.jpg@01CB8A4C.8646B700" height="357" width="798"&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt;&lt;br&gt; &lt;/span&gt;The following is a summary of the patterns used by this scenario:&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;;"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 1in;"&gt;&lt;span style="font-size: 10pt; font-family: Symbol;" lang="EN-GB"&gt;&lt;span&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;User interface processing is handled by a Request-Response pattern. &lt;span style="font-size: 10pt;" lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 1in;"&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The user interface is composed of multiple controls, with some that can be bound to data elements. &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 1in;"&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;An Http-Get request / Proxy is used to communicate between the presentation layer and service layer &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 1in;"&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The Data Transfer Object (DTO) pattern is used to package multiple data structures into one. &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 1in;"&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The Service Layer provides translation between internal and external data structures. &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 1in;"&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The Business Layer uses a façade pattern to support coarse-grained message-based operations. &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 1in;"&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Transactions and Business Logic are managed by objects in the business layer. &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 1in;"&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Business entities are defined using the Table Module pattern (LINQ). &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 1in;"&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The Table or Row Data Gateway pattern is used to provide a data access interface. &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 1in;"&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;The Query Object pattern is used to support the generation of SQL queries. &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.25in;"&gt; &lt;/p&gt;  &lt;h3&gt;&lt;a name="12c72ada29488fbc__Toc232489740"&gt;&lt;span&gt;1.9&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;         &lt;/span&gt;&lt;/span&gt;Technical Details&lt;/a&gt;&lt;/h3&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt;&lt;span style="color: navy;"&gt;Client Workstation&lt;/span&gt;&lt;span style="color: navy;" lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-left: 0.5in;"&gt; &lt;/p&gt;  &lt;table style="width: 8in; margin-left: 30.2pt; border-collapse: collapse; border: medium none;" border="1" cellpadding="0" cellspacing="0" width="768"&gt;  &lt;tbody&gt;&lt;tr style="min-height: 15.25pt;"&gt;   &lt;td style="width: 99.95pt; border: 1pt solid rgb(191, 191, 191); background: none repeat scroll 0% 0% rgb(79, 129, 189); padding: 0in 5.4pt; min-height: 15.25pt;" valign="top" width="133"&gt;   &lt;p class="MsoNormal"&gt;&lt;span style="color: white;"&gt; &lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width: 476.05pt; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: rgb(191, 191, 191) rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; background: none repeat scroll 0% 0% rgb(79, 129, 189); padding: 0in 5.4pt; min-height: 15.25pt;" valign="top" width="635"&gt; &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="min-height: 29.95pt;"&gt;   &lt;td style="width: 99.95pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); padding: 0in 5.4pt; min-height: 29.95pt;" valign="top" width="133"&gt;    &lt;p class="MsoNormal"&gt;Target browser is Internet Explorer 6.x and higher&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width: 476.05pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; padding: 0in 5.4pt; min-height: 29.95pt;" valign="top" width="635"&gt;    &lt;p class="MsoNormal"&gt;Browser will initiate the further flow.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt;  &lt;p class="MsoNormal"&gt;                &lt;span style="color: navy;"&gt;Web Server&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;table style="width: 8in; margin-left: 30.2pt; border-collapse: collapse; border: medium none;" border="1" cellpadding="0" cellspacing="0" width="768"&gt;  &lt;tbody&gt;&lt;tr style="min-height: 12.1pt;"&gt;   &lt;td style="width: 99.95pt; border: 1pt solid rgb(191, 191, 191); background: none repeat scroll 0% 0% rgb(79, 129, 189); padding: 0in 5.4pt; min-height: 12.1pt;" valign="top" width="133"&gt;&lt;/td&gt;   &lt;td style="width: 476.05pt; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: rgb(191, 191, 191) rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; background: none repeat scroll 0% 0% rgb(79, 129, 189); padding: 0in 5.4pt; min-height: 12.1pt;" valign="top" width="635"&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="color: white;"&gt; &lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="min-height: 29.95pt;"&gt;   &lt;td style="width: 99.95pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); padding: 0in 5.4pt; min-height: 29.95pt;" valign="top" width="133"&gt;    &lt;p class="MsoNormal"&gt;&lt;a href="http://ASP.NET" target="_blank"&gt;ASP.NET&lt;/a&gt; Page Control&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width: 476.05pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; padding: 0in 5.4pt; min-height: 29.95pt;" valign="top" width="635"&gt;    &lt;p class="MsoNormal"&gt;&lt;a href="http://ASP.NET" target="_blank"&gt;ASP.NET&lt;/a&gt; Page controls are used to define each page of the   web application.&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;Standard &lt;a href="http://ASP.NET" target="_blank"&gt;ASP.NET&lt;/a&gt; page processing is used to handle control   events.&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="min-height: 30.9pt;"&gt;   &lt;td style="width: 99.95pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); padding: 0in 5.4pt; min-height: 30.9pt;" valign="top" width="133"&gt;    &lt;p class="MsoNormal"&gt;Composite View&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width: 476.05pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; padding: 0in 5.4pt; min-height: 30.9pt;" valign="top" width="635"&gt;    &lt;p class="MsoNormal"&gt;Page, server and user controls represent a Composite  View.&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="min-height: 29.95pt;"&gt;   &lt;td style="width: 99.95pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); padding: 0in 5.4pt; min-height: 29.95pt;" valign="top" width="133"&gt;    &lt;p class="MsoNormal"&gt;Bound Data Control&lt;span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width: 476.05pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; padding: 0in 5.4pt; min-height: 29.95pt;" valign="top" width="635"&gt;    &lt;p class="MsoNormal"&gt;Control that can be bound to a data structure, which  is   used to provide data displayed by the control.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="min-height: 30.9pt;"&gt;   &lt;td style="width: 99.95pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); padding: 0in 5.4pt; min-height: 30.9pt;" valign="top" width="133"&gt;    &lt;p class="MsoNormal"&gt;Proxy&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width: 476.05pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; padding: 0in 5.4pt; min-height: 30.9pt;" valign="top" width="635"&gt;    &lt;p class="MsoNormal"&gt;Provides a local interface used to interact with services   on the application tier.&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;Adding a service reference will generate classes used to   interact with the service. From a coding perspective the proxy provides a   local interface that hides details related to interaction with the service.&lt;/p&gt;   &lt;p class="MsoNormal"&gt; &lt;/p&gt;   &lt;p class="MsoNormal"&gt;Proxy is used when the presentation layer is required to   communicate using WCF contracts.&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt;  &lt;p class="MsoNormal"&gt;                &lt;span style="color: navy;"&gt;Application Server – Service Layer&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;table style="width: 8in; margin-left: 30.2pt; border-collapse: collapse; border: medium none;" border="1" cellpadding="0" cellspacing="0" width="768"&gt;  &lt;tbody&gt;&lt;tr style="min-height: 16.6pt;"&gt;   &lt;td style="width: 99.95pt; border: 1pt solid rgb(191, 191, 191); background: none repeat scroll 0% 0% rgb(79, 129, 189); padding: 0in 5.4pt; min-height: 16.6pt;" valign="top" width="133"&gt;&lt;/td&gt;   &lt;td style="width: 476.05pt; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: rgb(191, 191, 191) rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; background: none repeat scroll 0% 0% rgb(79, 129, 189); padding: 0in 5.4pt; min-height: 16.6pt;" valign="top" width="635"&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="color: white;"&gt; &lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="min-height: 29.95pt;"&gt;   &lt;td style="width: 99.95pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); padding: 0in 5.4pt; min-height: 29.95pt;" valign="top" width="133"&gt;    &lt;p class="MsoNormal"&gt;Service Interface&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width: 476.05pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; padding: 0in 5.4pt; min-height: 29.95pt;" valign="top" width="635"&gt;    &lt;p class="MsoNormal"&gt;The service layer can be Class Library Project or could be   defined using WCF service, data, message, and fault contracts.&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt; &lt;/p&gt;   &lt;p class="MsoNormal"&gt;Operations exposed by the service are application scoped.   For example, instead of providing multiple operations to return demographic   information you would provide one operation that returns all data related  to   demographic information.&lt;/p&gt;   &lt;p class="MsoNormal"&gt; &lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="min-height: 29.95pt;"&gt;   &lt;td style="width: 99.95pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); padding: 0in 5.4pt; min-height: 29.95pt;" valign="top" width="133"&gt;    &lt;p class="MsoNormal"&gt;Data Transfer Object&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width: 476.05pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; padding: 0in 5.4pt; min-height: 29.95pt;" valign="top" width="635"&gt;    &lt;p class="MsoNormal"&gt;Used to combine multiple data structures into a unified   view that can be passed across physical and logical boundaries.&lt;/p&gt;   &lt;p class="MsoNormal"&gt; &lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="min-height: 30.9pt;"&gt;   &lt;td style="width: 99.95pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); padding: 0in 5.4pt; min-height: 30.9pt;" valign="top" width="133"&gt;    &lt;p class="MsoNormal"&gt;Entity Translator&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width: 476.05pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; padding: 0in 5.4pt; min-height: 30.9pt;" valign="top" width="635"&gt;    &lt;p class="MsoNormal"&gt;Implement an object that transforms message data types to   business types for requests and reverses the transformation for responses.&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt; &lt;/p&gt;   &lt;p class="MsoNormal"&gt;Classes that provide operations to translate between   business entities and WCF data contracts.&lt;/p&gt;   &lt;p class="MsoNormal"&gt; &lt;/p&gt;   &lt;p class="MsoNormal"&gt;Translate DTO to Business Entity Objects.&lt;/p&gt;   &lt;p class="MsoNormal"&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;Public   LINQ.DataManager.Order TranslateOrderToOrderDTO();&lt;/p&gt;   &lt;p class="MsoNormal"&gt; &lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;                &lt;span style="font-size: 10pt;"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="color: navy;"&gt;Application Server – Business Layer&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;table style="width: 8in; margin-left: 30.2pt; border-collapse: collapse; border: medium none;" border="1" cellpadding="0" cellspacing="0" width="768"&gt;  &lt;tbody&gt;&lt;tr style="min-height: 13pt;"&gt;   &lt;td style="width: 99.95pt; border: 1pt solid rgb(191, 191, 191); background: none repeat scroll 0% 0% rgb(79, 129, 189); padding: 0in 5.4pt; min-height: 13pt;" valign="top" width="133"&gt;&lt;/td&gt;   &lt;td style="width: 476.05pt; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: rgb(191, 191, 191) rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; background: none repeat scroll 0% 0% rgb(79, 129, 189); padding: 0in 5.4pt; min-height: 13pt;" valign="top" width="635"&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="color: white;"&gt; &lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="min-height: 29.95pt;"&gt;   &lt;td style="width: 99.95pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); padding: 0in 5.4pt; min-height: 29.95pt;" valign="top" width="133"&gt;    &lt;p class="MsoNormal"&gt;Façade Interface&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width: 476.05pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; padding: 0in 5.4pt; min-height: 29.95pt;" valign="top" width="635"&gt;    &lt;p class="MsoNormal"&gt;The business layer implements a façade with coarse  grained   operations.&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;Implement a unified interface to a set of operations  to   reduce coupling between systems.&lt;/p&gt;   &lt;p class="MsoNormal"&gt;An Interface type is used to define the façade interface.&lt;/p&gt;   &lt;p class="MsoNormal"&gt;The Façade acts as a boundary that catches all unhandled   exceptions that may occur when processing business operations.&lt;/p&gt;   &lt;p class="MsoNormal"&gt; &lt;/p&gt;   &lt;p class="MsoNormal"&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;interface&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;BusinessFacade&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;    {&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;          Data.Order GetData();&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;        &lt;span style="color: blue;"&gt;int&lt;/span&gt; SaveData(&lt;span style="color: navy;"&gt;LINQ.Data.Order   &lt;/span&gt;businessEntity);&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;        &lt;span style="color: blue;"&gt;bool&lt;/span&gt; DeleteData(&lt;span style="color: blue;"&gt;int&lt;/span&gt;   businessEntityID);&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;    }&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt; &lt;/p&gt;   &lt;p class="MsoNormal"&gt; &lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="min-height: 29.95pt;"&gt;   &lt;td style="width: 99.95pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); padding: 0in 5.4pt; min-height: 29.95pt;" valign="top" width="133"&gt;    &lt;p class="MsoNormal"&gt;Business Process Objects&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width: 476.05pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; padding: 0in 5.4pt; min-height: 29.95pt;" valign="top" width="635"&gt;    &lt;p class="MsoNormal"&gt;Business process objects are used to handle requests  made   to the business layer.&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;Business process objects allow you to &lt;i&gt;&lt;span style="color: navy;"&gt;Implement Business Rules And Provide Transaction&lt;/span&gt;&lt;/i&gt;   support if required.&lt;/p&gt;   &lt;p class="MsoNormal"&gt;Business operations that need to be included in a   transaction are combined in a single operation exposed by a business process   object that implements the transaction script pattern.&lt;/p&gt;   &lt;p class="MsoNormal"&gt; &lt;/p&gt;   &lt;p class="MsoNormal"&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;public   bool SaveData(LINQ.Data.Order businessEntity)&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;{&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;      string sError = string.Empty;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;      bool success = false;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;      int orderId = -1;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;      try&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;    {&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;                BeginTransaction();&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;                if   (orderId == -1)&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;                {&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;                      orderId = LINQ.DataManager.FindNextOrderID();&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;                      if (orderId == -1)&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;                      {&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;                                sError   = &amp;quot;Failed to retrieve new Dealer ID. Rolling Back Transaction&amp;quot;;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;                                RollbackTransaction();&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;                                return   success;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;                      }&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;                      orderId = &lt;/span&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;LINQ.DataManager.InsertOrder&lt;/span&gt;&lt;span style="color: navy;"&gt;(businessEntity);&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;                      if( orderId == 0)&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;                      {&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;                                sError   = &amp;quot;Failed to insert Dealer ID. Rolling Back Transaction&amp;quot;;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;                                RollbackTransaction();&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;                                return   success;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;                      }&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;                }              &lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;                CommitTransaction();&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;                success   = true;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;    }&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;      catch (Exception ex)&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;    {&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;                RollbackTransaction();&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;    }&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;      return success;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;}&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt; &lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="color: navy;"&gt;Application Server – Data Access Layer&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;table style="width: 8in; margin-left: 30.2pt; border-collapse: collapse; border: medium none;" border="1" cellpadding="0" cellspacing="0" width="768"&gt;  &lt;tbody&gt;&lt;tr style="min-height: 14.35pt;"&gt;   &lt;td style="width: 99.95pt; border: 1pt solid rgb(191, 191, 191); background: none repeat scroll 0% 0% rgb(79, 129, 189); padding: 0in 5.4pt; min-height: 14.35pt;" valign="top" width="133"&gt;&lt;/td&gt;   &lt;td style="width: 476.05pt; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: rgb(191, 191, 191) rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; background: none repeat scroll 0% 0% rgb(79, 129, 189); padding: 0in 5.4pt; min-height: 14.35pt;" valign="top" width="635"&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="color: white;"&gt; &lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="min-height: 30.9pt;"&gt;   &lt;td style="width: 99.95pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); padding: 0in 5.4pt; min-height: 30.9pt;" valign="top" width="133"&gt;    &lt;p class="MsoNormal"&gt;Table Module / Business Entities&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width: 476.05pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; padding: 0in 5.4pt; min-height: 30.9pt;" valign="top" width="635"&gt;    &lt;p class="MsoNormal"&gt;Business entity that represents a table or view within a   database and provides operations to interact with the table or view.&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;Business rules are not implemented within the business   entities.&lt;/p&gt;   &lt;p class="MsoNormal"&gt;The business entities are just data containers. Business   rules are handled by business processing components.&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB"&gt; &lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="min-height: 29.95pt;"&gt;   &lt;td style="width: 99.95pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); padding: 0in 5.4pt; min-height: 29.95pt;" valign="top" width="133"&gt;    &lt;p class="MsoNormal"&gt;LINQ DataManager&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width: 476.05pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; padding: 0in 5.4pt; min-height: 29.95pt;" valign="top" width="635"&gt;    &lt;p class="MsoNormal"&gt;Separate classes are used to define LINQ query objects.&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;It behaves like a gateway object - defined for each   business entity in the design.&lt;/p&gt;   &lt;p class="MsoNormal"&gt;The gateway encapsulates all logic related to interacting   with the associated DB table or view.&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% white;"&gt; &lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB"&gt; &lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;public   int InsertOrder(LINQ.Data.Order order)&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;{&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;       order.InstitutionID = _institutionId;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;      _dataContext.Orders.InsertOnSubmit(order);&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;      _dataContext.SubmitChanges();&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt;&lt;span style="color: navy;"&gt;      return order.OrderID;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% white;"&gt;&lt;span style="color: navy;"&gt;}&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% white;"&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% white;"&gt; &lt;/p&gt;   &lt;p class="MsoNormal" style="background: none repeat scroll 0% 0% rgb(230, 230, 230);"&gt; &lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="color: navy;"&gt;Database Server&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="color: navy;"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;table style="width: 8in; margin-left: 30.2pt; border-collapse: collapse; border: medium none;" border="1" cellpadding="0" cellspacing="0" width="768"&gt;  &lt;tbody&gt;&lt;tr style="min-height: 13pt;"&gt;   &lt;td style="width: 99.95pt; border: 1pt solid rgb(191, 191, 191); background: none repeat scroll 0% 0% rgb(79, 129, 189); padding: 0in 5.4pt; min-height: 13pt;" valign="top" width="133"&gt;&lt;/td&gt;   &lt;td style="width: 476.05pt; border-width: 1pt 1pt 1pt medium; border-style: solid solid solid none; border-color: rgb(191, 191, 191) rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; background: none repeat scroll 0% 0% rgb(79, 129, 189); padding: 0in 5.4pt; min-height: 13pt;" valign="top" width="635"&gt;    &lt;p class="MsoNormal"&gt;&lt;span style="color: white;"&gt; &lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="min-height: 30.9pt;"&gt;   &lt;td style="width: 99.95pt; border-width: medium 1pt 1pt; border-style: none solid solid; border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); padding: 0in 5.4pt; min-height: 30.9pt;" valign="top" width="133"&gt;    &lt;p class="MsoNormal"&gt;SQL Server DB&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="width: 476.05pt; border-width: medium 1pt 1pt medium; border-style: none solid solid none; border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; padding: 0in 5.4pt; min-height: 30.9pt;" valign="top" width="635"&gt;    &lt;p class="MsoNormal"&gt;Tables and views are accessible to the Data Access Layer   using LINQ ORM.&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/p&gt;   &lt;p class="MsoNormal"&gt;&lt;span lang="EN-GB"&gt; &lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt;"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt;  &lt;p class="MsoNormal"&gt;Reference: &lt;a href="http://apparch.codeplex.com/" target="_blank"&gt;Link1&lt;/a&gt;, &lt;a href="http://apparch.codeplex.com/wikipage?title=App%20Pattern%20-%20Four-Tier%20Web%20Application%20Scenario%20%28Table%20Module&amp;amp;referringTitle=Application%20Patterns" target="_blank"&gt;Link2&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt;  &lt;p class="MsoNormal"&gt;Hope this helps.&lt;/p&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt;  &lt;p class="MsoNormal"&gt;Thanks &amp;amp; Regards,&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Arun Manglick&lt;br&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8307718319698992522-6076464448101034708?l=arun-ts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arun-ts.blogspot.com/feeds/6076464448101034708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arun-ts.blogspot.com/2010/11/n-tier-architecture.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8307718319698992522/posts/default/6076464448101034708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8307718319698992522/posts/default/6076464448101034708'/><link rel='alternate' type='text/html' href='http://arun-ts.blogspot.com/2010/11/n-tier-architecture.html' title='n-Tier Architecture'/><author><name>Arun Manglick</name><uri>http://www.blogger.com/profile/03915326692989759515</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8307718319698992522.post-3437679362454175271</id><published>2010-11-22T00:31:00.001-08:00</published><updated>2010-11-22T11:25:57.564-08:00</updated><title type='text'>Repository Pattern - LINQ Implementation</title><content type='html'>&lt;div class="gmail_quote"&gt;&lt;div lang="EN-US" link="blue" vlink="purple"&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-size: 11pt;"&gt;T&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;he purpose of this article is to describe the technique I have used to implement the repository pattern in .NET applications. I will provide a brief description of the repository pattern and linq-to-sql, however, if you are unfamiliar with these technologies you should research them elsewhere. The goals of my implementation are:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;ul style="margin-top: 0in;" type="disc"&gt;&lt;li class="MsoNormal"&gt;&lt;span style="font-size: 11pt;"&gt;it must be a general purpose      design that can be reused for many projects &lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;&lt;span style="font-size: 11pt;"&gt;it must facilitate domain      driven design &lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;&lt;span style="font-size: 11pt;"&gt;it must facilitate unit testing      and testing in general &lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;&lt;span style="font-size: 11pt;"&gt;it must allow the domain model      to avoid dependencies on infrastructure &lt;/span&gt;&lt;/li&gt;&lt;li class="MsoNormal"&gt;&lt;span style="font-size: 11pt;"&gt;it must provide strongly typed      querying &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-size: 11pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;&lt;h2 style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-size: 11pt;"&gt;Repository Pattern&lt;/span&gt;&lt;/h2&gt;&lt;h2 style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="color: #1f497d; font-size: 11pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;&lt;div style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-size: 11pt;"&gt;The Repository Pattern, according to Martin Fowler, provides a "&lt;span style="color: #ff6600;"&gt;layer of abstraction over the mapping layer where query construction code is concentrated", to "minimize duplicate query logic&lt;/span&gt;". In practice it is usually a collection of data access services, grouped in a similar way to the domain model classes. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-size: 11pt;"&gt;By accessing repositories via interfaces the repository pattern helps to break the dependency between the domain model and data access code. This is invaluable for unit testing because the domain model can be isolated. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-size: 11pt;"&gt;I implement the repository pattern by defining one repository class for each domain model entity that requires specialized data access methods (other than the standard create, read, update and delete). If an entity does not require specialized data access methods then I will use a generic repository for that entity. A repository class contains the specialized data access methods required for its corresponding domain model entity. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-size: 11pt;"&gt;The following class diagram shows an example implementation with &lt;span style="color: navy;"&gt;one&lt;/span&gt; domain entity classes, &lt;span style="color: navy;"&gt;Message&lt;/span&gt;. &lt;span style="color: navy;"&gt;Message&lt;/span&gt; has a specialized repository (I&lt;span style="color: navy;"&gt;Message&lt;/span&gt;Repository). &lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="color: navy; font-size: 11pt;"&gt;&lt;img height="633" src="cid:1.1964135600@web95304.mail.in2.yahoo.com" width="871" /&gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;h2 style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-size: 11pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;&lt;h2 style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-size: 11pt;"&gt;Linq-to-sql&lt;/span&gt;&lt;/h2&gt;&lt;h2 style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-size: 11pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;&lt;div style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-size: 11pt;"&gt;Linq is a strongly typed way of querying data. Linq-to-sql is a dialect of Linq that allows the querying of a Sql Server database. It also includes object / relational mapping and tools for generating domain model classes from a database schema. Linq is an excellent addition to object / relational mappings tools because it facilitates strongly typed queries, such as:&lt;/span&gt;&lt;/div&gt;&lt;h3 style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-size: 11pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;&lt;div class="MsoNormal" style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(230, 230, 230) none repeat scroll 0% 0%;"&gt;&lt;span style="color: #2b91af; font-size: 11pt;"&gt;List&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&amp;lt;&lt;span style="color: #2b91af;"&gt;LabMessage&lt;/span&gt;&amp;gt; msgList = _genericMessageRepository.FindAll(m =&amp;gt; m.PassCode1 == passCode1,&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(230, 230, 230) none repeat scroll 0% 0%;"&gt;&lt;span style="font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m =&amp;gt; m.Active == (active == &lt;span style="color: #2b91af;"&gt;Active&lt;/span&gt;.Both ? m.Active : &lt;span style="color: #2b91af;"&gt;Convert&lt;/span&gt;.ToBoolean(active.GetHashCode()))).ToList();&lt;/span&gt;&lt;/div&gt;&lt;h3 style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="color: navy; font-size: 11pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="color: navy; font-size: 11pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-size: 11pt;"&gt;IRepository&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/h3&gt;&lt;div style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-size: 11pt;"&gt;The generic interface IRepository&amp;lt;T&amp;gt; defines the methods that are required on each repository. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;public&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;interface&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; IRepository&amp;lt;T&amp;gt; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;where&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; T : &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;class&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;{&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// Return all instances of type T.&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IEnumerable&amp;lt;T&amp;gt; All();&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// Return all instances of type T that match the expression exp.&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;param name="exp"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IEnumerable&amp;lt;T&amp;gt; FindAll(Func&amp;lt;T, &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;bool&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;gt; exp);&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// Return all instances of type T that match the expression exp.&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;param name="exp"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IEnumerable&amp;lt;T&amp;gt; FindAll(Func&amp;lt;T, &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;bool&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;gt;[] exp);&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;summary&amp;gt;Returns the single entity matching the expression. Throws an exception if there is not exactly one such entity.&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;param name="exp"&amp;gt;&amp;lt;/param&amp;gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; T Single(Func&amp;lt;T, &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;bool&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;gt; exp);&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;summary&amp;gt;Returns the first element satisfying the condition.&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;param name="exp"&amp;gt;&amp;lt;/param&amp;gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; T First(Func&amp;lt;T, &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;bool&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;gt; exp);&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// Mark an entity to be deleted when the context is saved.&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;param name="entity"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;void&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; MarkForDeletion(T entity);&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// Create a new instance of type T.&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; T CreateInstance();&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;summary&amp;gt;Persist the data context.&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;void&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; SaveAll();&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;} &lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;h3 style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-size: 11pt;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-size: 11pt;"&gt;Repository&amp;lt;T&amp;gt;&lt;/span&gt;&lt;/h3&gt;&lt;div style="margin: 0in 0in 0.0001pt;"&gt;&lt;span style="font-size: 11pt;"&gt;IRepository&amp;lt;T&amp;gt; is implemented by a generic repository base class, Repository&amp;lt;T&amp;gt;. Repository&amp;lt;T&amp;gt; is a base implementation that provides data access functionality for all entities. If an entity (T) does not require a specialized repository then its data access will be done through Repository&amp;lt;T&amp;gt;. &lt;/span&gt;&lt;/div&gt;&lt;div style="margin: 0in 0in 0.0001pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;public&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;class&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; Repository&amp;lt;T&amp;gt; : IRepository&amp;lt;T&amp;gt; &lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;where&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; T : &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;class&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;{&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;protected&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; IDataContextFactory _dataContextFactory;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// Return all instances of type T.&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;public&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; IEnumerable&amp;lt;T&amp;gt; All()&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;return&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; GetTable;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// Return all instances of type T that match the expression exp.&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;param name="exp"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;public&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; IEnumerable&amp;lt;T&amp;gt; FindAll(Func&amp;lt;T, &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;bool&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;gt; exp)&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;return&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; GetTable.Where&amp;lt;T&amp;gt;(exp);&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// Return all instances of type T that match the expression exp.&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;param name="exp"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;public&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; IEnumerable&amp;lt;T&amp;gt; FindAll(Func&amp;lt;T, &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;bool&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;gt;[] exprs)&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #2b91af; font-size: 11pt;"&gt;IEnumerable&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&amp;lt;T&amp;gt; res = GetTable.ToList&amp;lt;T&amp;gt;();&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (Func&amp;lt;T, bool&amp;gt; selector in exprs)&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; res = res.Where&amp;lt;T&amp;gt;(selector);&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;return&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; res;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;summary&amp;gt;See IRepository.&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;param name="exp"&amp;gt;&amp;lt;/param&amp;gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;public&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; T Single(Func&amp;lt;T, &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;bool&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;gt; exp)&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;return&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; GetTable.Single(exp);&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;summary&amp;gt;See IRepository.&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;param name="exp"&amp;gt;&amp;lt;/param&amp;gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;public&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; T First(Func&amp;lt;T, &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;bool&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;gt; exp)&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;return&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; GetTable.First(exp);&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;summary&amp;gt;See IRepository.&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;param name="entity"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;public&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;virtual&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;void&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; MarkForDeletion(T entity)&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _dataContextFactory.Context.GetTable&amp;lt;T&amp;gt;().DeleteOnSubmit(entity);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// Create a new instance of type T.&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;public&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;virtual&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; T CreateInstance()&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; T entity = Activator.CreateInstance&amp;lt;T&amp;gt;();&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetTable.InsertOnSubmit(entity);&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;return&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; entity;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: green; font-size: 11pt;"&gt;/// &amp;lt;summary&amp;gt;See IRepository.&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;public&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;void&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; SaveAll()&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _dataContextFactory.SaveAll();&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;public&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; Repository(IDataContextFactory dataContextFactory)&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _dataContextFactory = dataContextFactory;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #cc6633; font-size: 11pt;"&gt;#region&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; Properties&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;private&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;string&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; PrimaryKeyName&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;return&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; TableMetadata.RowType.IdentityMembers[0].Name; }&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;private&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; System.Data.Linq.Table&amp;lt;T&amp;gt; GetTable&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;return&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; _dataContextFactory.Context.GetTable&amp;lt;T&amp;gt;(); }&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;private&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; System.Data.Linq.Mapping.MetaTable TableMetadata&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;return&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; _dataContextFactory.Context.Mapping.GetTable(&lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;typeof&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt;(T)); }&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;private&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; System.Data.Linq.Mapping.MetaType ClassMetadata&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { &lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;return&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt; _dataContextFactory.Context.Mapping.GetMetaType(&lt;/span&gt;&lt;span style="color: blue; font-size: 11pt;"&gt;typeof&lt;/span&gt;&lt;span style="color: black; font-size: 11pt;"&gt;(T)); }&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span style="font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(238, 238, 238) none repeat scroll 0% 0%;"&gt;&lt;span style="color: black; font-size: 11pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #cc6633; font-size: 11pt;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8307718319698992522-3437679362454175271?l=arun-ts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arun-ts.blogspot.com/feeds/3437679362454175271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arun-ts.blogspot.com/2010/11/repository-pattern-linq-implementation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8307718319698992522/posts/default/3437679362454175271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8307718319698992522/posts/default/3437679362454175271'/><link rel='alternate' type='text/html' href='http://arun-ts.blogspot.com/2010/11/repository-pattern-linq-implementation.html' title='Repository Pattern - LINQ Implementation'/><author><name>Arun Manglick</name><uri>http://www.blogger.com/profile/03915326692989759515</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8307718319698992522.post-3603873956068536689</id><published>2010-11-19T06:38:00.001-08:00</published><updated>2010-11-19T06:40:14.577-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Design n Architect'/><title type='text'>Visitor Design Pattern - Behavioral</title><content type='html'>&lt;div class="gmail_quote"&gt;&lt;div lang="EN-US" link="blue" vlink="purple"&gt;&lt;div&gt;&lt;h2&gt;&lt;a href="" name="12c649074978dea6__Toc160454713"&gt;&lt;span lang="EN-GB"&gt;1.1&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;Intent&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-GB"&gt; &lt;/span&gt;&lt;/h2&gt;&lt;div style="margin-left: 0.5in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0.0001pt; margin-left: 0.5in; margin-right: 0in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0.0001pt; margin-left: 0.5in; margin-right: 0in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;Separates the structure of an object from the operations that act on the structure.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-left: 0.5in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2&gt;&lt;a href="" name="12c649074978dea6__Toc160454714"&gt;&lt;span lang="EN-GB"&gt;1.2&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;Motivation&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-GB"&gt; &lt;/span&gt;&lt;/h2&gt;&lt;div style="margin-bottom: 0.0001pt; margin-left: 1in; margin-right: 0in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; font-size: 11pt;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;Consider a compiler that represents programs as abstract syntax trees. It will need to perform operations on abstract syntax trees for "static semantic" analyses like checking that all variables are defined. It will also need to generate code. It will  be confusing to have type-checking code mixed with pretty-printing code or flow analysis code. It would be better if each new operation could be added separately, and the ode classes were independent of the operations that apply to them.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0.0001pt; margin-left: 1in; margin-right: 0in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; font-size: 11pt;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;We can have both by packaging related operations from each class in a separate object, called a visitor, and passing it to elements of the abstract syntax tree as it's traversed. When an element accepts the visitor, it sends a request to the visitor that encodes the element's class. It also includes the element as an argument. The visitor will then execute the operation for that element—the operation that used to be in the class of the element.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0.0001pt; margin-left: 1in; margin-right: 0in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; font-size: 11pt;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;Modular systems are easier to maintain.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0.0001pt; margin-left: 1in; margin-right: 0in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; font-size: 11pt;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;Separation of functionality makes cleaner code.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-left: 1in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2&gt;&lt;a href="" name="12c649074978dea6__Toc160454715"&gt;&lt;span lang="EN-GB"&gt;1.3&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;Structure&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.5in;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_k4180KU275M/TOaMGDUmt8I/AAAAAAAAAWs/OQn8ZirQeQE/s1600/Vistor1..JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_k4180KU275M/TOaMGDUmt8I/AAAAAAAAAWs/OQn8ZirQeQE/s1600/Vistor1..JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;h2&gt;&lt;a href="" name="12c649074978dea6__Toc160454716"&gt;&lt;span lang="EN-GB"&gt;1.4&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;Participants&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;&amp;nbsp;The classes and/or objects participating in this pattern are:&lt;/div&gt;&lt;div style="margin-left: 1in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; font-size: 11pt;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;Visitor&amp;nbsp; (Visitor)&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0.0001pt; margin-left: 1.5in; margin-right: 0in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 11pt;"&gt;o&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;declares a Visit operation for each class of ConcreteElement in the object structure. The operation's name and signature identifies the class that sends the Visit request to the visitor. That lets  the visitor determine the concrete class of the element being visited. Then the visitor can access the elements directly through its particular interface&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-left: 1in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; font-size: 11pt;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;ConcreteVisitor&amp;nbsp; (IncomeVisitor, VacationVisitor)&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0.0001pt; margin-left: 1.5in; margin-right: 0in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 11pt;"&gt;o&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;implements each operation declared by Visitor. Each operation implements a fragment of the algorithm defined for the corresponding class or object in the structure. ConcreteVisitor provides the context for the algorithm and stores its local state. This state often accumulates results during the traversal of the structure.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-left: 1in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; font-size: 11pt;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;Element&amp;nbsp; (Element)&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-left: 1.5in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 11pt;"&gt;o&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;defines an Accept operation that takes a visitor as an argument.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-left: 1in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; font-size: 11pt;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;ConcreteElement&amp;nbsp; (Employee)&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-left: 1.5in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 11pt;"&gt;o&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;implements an Accept operation that takes a visitor as an argument&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-left: 1in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; font-size: 11pt;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;ObjectStructure&amp;nbsp; (Employees)&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0.0001pt; margin-left: 1.5in; margin-right: 0in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 11pt;"&gt;o&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;can enumerate its elements&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0.0001pt; margin-left: 1.5in; margin-right: 0in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 11pt;"&gt;o&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;may provide a high-level interface to allow the visitor to visit its elements&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0.0001pt; margin-left: 1.5in; margin-right: 0in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 11pt;"&gt;o&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;may either be a Composite (pattern) or a collection such as a list or a set&lt;/span&gt;&lt;/div&gt;&lt;h2 style="text-indent: 0in;"&gt;&lt;a href="" name="12c649074978dea6__Toc160454717"&gt;&lt;span lang="EN-GB"&gt;&amp;nbsp;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2&gt;&lt;span lang="EN-GB"&gt;1.5&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;Applicability&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div style="margin-bottom: 0.0001pt; margin-left: 1in; margin-right: 0in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; font-size: 11pt;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;An object structure contains many classes of objects with differing interfaces…&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0.0001pt; margin-left: 1in; margin-right: 0in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; font-size: 11pt;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;Many distinct and unrelated operations need to be performed on objects in an object structure…&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0.0001pt; margin-left: 1in; margin-right: 0in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; font-size: 11pt;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;The classes defining the object structure rarely change, but you often want to define new operations over the structure…&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2&gt;&lt;a href="" name="12c649074978dea6__Toc160454718"&gt;&lt;span lang="EN-GB"&gt;1.6&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;Consequences&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div style="margin-bottom: 0.0001pt; margin-left: 1in; margin-right: 0in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; font-size: 11pt;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;+flexibility: visitor &amp;amp; object structure are independent&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0.0001pt; margin-left: 1in; margin-right: 0in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; font-size: 11pt;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;+localized functionality&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0.0001pt; margin-left: 1in; margin-right: 0in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; font-size: 11pt;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;–circular dependency between Visitor &amp;amp; Element interfaces&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0.0001pt; margin-left: 1in; margin-right: 0in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-family: Symbol; font-size: 11pt;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;–Visitor brittle to new ConcreteElementclasses&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2&gt;&lt;a href="" name="12c649074978dea6__Toc160454719"&gt;&lt;span lang="EN-GB"&gt;1.7&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;Sample Code&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class="MsoNormal" style="margin-left: 0.4in;"&gt;This structural code demonstrates the Visitor pattern in which an object traverses an object structure and performs the same operation on each node in this structure. Different visitor objects define different operations.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse; border: medium none;"&gt;&lt;tbody&gt;&lt;tr&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(192, 80, 77); border: 1pt solid rgb(191, 191, 191); padding: 0in 5.4pt; width: 26.6pt;" valign="top" width="35"&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(192, 80, 77); border-color: rgb(191, 191, 191) rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; border-style: solid solid solid none; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 452.2pt;" valign="top" width="603"&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 26.6pt;" valign="top" width="35"&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 452.2pt;" valign="top" width="603"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;namespace   Xpanxion.Visitor&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   class MainApp&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   static void Main()&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // Setup structure&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   ObjectStructure o = new ObjectStructure();&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   o.Attach(new ConcreteElementA());&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &amp;nbsp;o.Attach(new ConcreteElementB());&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // Create visitor objects&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   ConcreteVisitor1 v1 = new ConcreteVisitor1();&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   ConcreteVisitor2 v2 = new ConcreteVisitor2();&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // Structure accepting visitors&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   o.Accept(v1);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   o.Accept(v2);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // Wait for user&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Console.Read();&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // "Visitor"&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   abstract class Visitor&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public abstract void VisitConcreteElementA(&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   ConcreteElementA concreteElementA);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public abstract void VisitConcreteElementB(&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   ConcreteElementB concreteElementB);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // "ConcreteVisitor1"&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   class ConcreteVisitor1 : Visitor&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public override void VisitConcreteElementA(&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   ConcreteElementA concreteElementA)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Console.WriteLine("{0} visited by {1}",&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   concreteElementA.GetType().Name, this.GetType().Name);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public override void VisitConcreteElementB(&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   ConcreteElementB concreteElementB)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Console.WriteLine("{0} visited by {1}",&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   concreteElementB.GetType().Name, this.GetType().Name);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // "ConcreteVisitor2"&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   class ConcreteVisitor2 : Visitor&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public override void VisitConcreteElementA(&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   ConcreteElementA concreteElementA)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Console.WriteLine("{0} visited by {1}",&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   concreteElementA.GetType().Name, this.GetType().Name);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public override void VisitConcreteElementB(&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   ConcreteElementB concreteElementB)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Console.WriteLine("{0} visited by {1}",&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   concreteElementB.GetType().Name, this.GetType().Name);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // "Element"&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   abstract class Element&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public abstract void Accept(Visitor visitor);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // "ConcreteElementA"&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   class ConcreteElementA : Element&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public override void Accept(Visitor visitor)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   visitor.VisitConcreteElementA(this);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public void OperationA()&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // "ConcreteElementB"&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   class ConcreteElementB : Element&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public override void Accept(Visitor visitor)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   visitor.VisitConcreteElementB(this);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public void OperationB()&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // "ObjectStructure"&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   class ObjectStructure&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   private ArrayList elements = new ArrayList();&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public void Attach(Element element)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   elements.Add(element);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public void Detach(Element element)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   elements.Remove(element);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public void Accept(Visitor visitor)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   foreach (Element e in elements)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &amp;nbsp;e.Accept(visitor);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style="text-indent: 0in;"&gt;&lt;span lang="EN-GB"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span lang="EN-GB"&gt;1.8&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;Sample Code2&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class="MsoNormal"&gt;This real-world code demonstrates the Visitor pattern in which two objects traverse a list of Employees and performs the same operation on each Employee. The two visitor objects define different operations -- one adjusts vacation days and the other income.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse; border: medium none;"&gt;&lt;tbody&gt;&lt;tr&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(192, 80, 77); border: 1pt solid rgb(191, 191, 191); padding: 0in 5.4pt; width: 26.6pt;" valign="top" width="35"&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(192, 80, 77); border-color: rgb(191, 191, 191) rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; border-style: solid solid solid none; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 452.2pt;" valign="top" width="603"&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 26.6pt;" valign="top" width="35"&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 452.2pt;" valign="top" width="603"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;namespace   DoFactory.GangOfFour.Visitor.RealWorld&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // MainApp startup application&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   class MainApp&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   static void Main()&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // Setup employee collection&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Employees e = new Employees();&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   e.Attach(new Clerk());&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   e.Attach(new Director());&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   e.Attach(new President());&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // Employees are 'visited'&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   e.Accept(new IncomeVisitor());&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   e.Accept(new VacationVisitor());&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // Wait for user&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Console.Read();&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // "Visitor"&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   interface IVisitor&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   void Visit(Element element);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // "ConcreteVisitor1"&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   class IncomeVisitor : IVisitor&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public void Visit(Element element)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Employee employee = element as Employee;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // Provide 10% pay raise&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   employee.Income *= 1.10;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Console.WriteLine("{0} {1}'s new income: {2:C}",&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   employee.GetType().Name, employee.Name,&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   employee.Income);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // "ConcreteVisitor2"&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   class VacationVisitor : IVisitor&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public void Visit(Element element)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Employee employee = element as Employee;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // Provide 3 extra vacation days&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Console.WriteLine("{0} {1}'s new vacation days: {2}",&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   employee.GetType().Name, employee.Name,&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   employee.VacationDays);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   class Clerk : Employee&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // Constructor&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public Clerk()&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   : base("Hank", 25000.0, 14)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   class Director : Employee&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // Constructor&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public Director()&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   : base("Elly", 35000.0, 16)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   class President : Employee&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // Constructor&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public President()&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   : base("Dick", 45000.0, 21)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // "Element"&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   abstract class Element&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public abstract void Accept(IVisitor visitor);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // "ConcreteElement"&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   class Employee : Element&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   string name;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   double income;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   int vacationDays;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // Constructor&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &amp;nbsp;public Employee(string name, double income,&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   int vacationDays)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &lt;a href="http://this.name/" target="_blank"&gt;this.name&lt;/a&gt; = name;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   this.income = income;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   this.vacationDays = vacationDays;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // Properties&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public string Name&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   get { return name; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   set { name = value; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public double Income&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   get { return income; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   set { income = value; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public int VacationDays&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;get { return vacationDays; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   set { vacationDays = value; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public override void Accept(IVisitor visitor)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   visitor.Visit(this);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   // "ObjectStructure"&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   class Employees&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private ArrayList employees = new ArrayList();&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public void Attach(Employee employee)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   employees.Add(employee);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public void Detach(Employee employee)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   employees.Remove(employee);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public void Accept(IVisitor visitor)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   foreach (Employee e in employees)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   e.Accept(visitor);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Console.WriteLine();&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style="text-indent: 0in;"&gt;&lt;span lang="EN-GB"&gt;&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span lang="EN-GB"&gt;1.9&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;C# Iterators and Visitor Pattern&lt;/span&gt;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class="MsoNormal"&gt;The iterators are coded directly into the class to be iterated. For example:&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;public IEnumerable&amp;lt;int&amp;gt; Visit(SomeVisitor visitor)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;int position = 0;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;for(int i = 0; i &amp;lt; Count; i++)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;yield return position;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;data[i].Accept(visitor);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;position++;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;This can then be used in a foreach construct:&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;foreach(int position in someObject.Visit(this))&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;// Do something with position here.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Where 'someObject' is the object to traverse, the class of which contains the iterator code above, and 'this' is an instance of a class derived from 'SomeVisitor.'&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;So as the object is traversed, the iterator first returns the position information. Here it is just a simple integer, but it could be anything, something much more complex, perhaps. Then the Accept method is called.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;The idea is that you can traverse a collection where the Visitor design pattern is used without having to explicitely call the Accept method; the iterator takes care of that for you. Plus, you get additional information about the traversal that can be used as well. Care would have to be taken so that you know which comes first, the value returned from the iterator or the Accept method being called.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Hope this helps.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Thanks &amp;amp; Regards,&lt;/div&gt;&lt;div class="MsoNormal"&gt;Arun Manglick&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8307718319698992522-3603873956068536689?l=arun-ts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arun-ts.blogspot.com/feeds/3603873956068536689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arun-ts.blogspot.com/2010/11/visitor-design-pattern-behavioral.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8307718319698992522/posts/default/3603873956068536689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8307718319698992522/posts/default/3603873956068536689'/><link rel='alternate' type='text/html' href='http://arun-ts.blogspot.com/2010/11/visitor-design-pattern-behavioral.html' title='Visitor Design Pattern - Behavioral'/><author><name>Arun Manglick</name><uri>http://www.blogger.com/profile/03915326692989759515</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_k4180KU275M/TOaMGDUmt8I/AAAAAAAAAWs/OQn8ZirQeQE/s72-c/Vistor1..JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8307718319698992522.post-4624452390872177142</id><published>2010-11-19T06:20:00.001-08:00</published><updated>2010-11-19T06:40:14.577-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Design n Architect'/><title type='text'>Chain of Responsibility Design Pattern - Behavioural</title><content type='html'>&lt;div class="gmail_quote"&gt;&lt;div lang="EN-US" link="blue" vlink="purple"&gt;&lt;div&gt;&lt;h2&gt;&lt;a href="" name="12c647ceabbe4d3b__Toc146441501"&gt;&lt;span lang="EN-GB"&gt;1.1&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;Introduction&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class="MsoNormal" style="margin-left: 0.55in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.4in;"&gt;The classic CoR pattern defined by GoF in Design Patterns:&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.4in;"&gt;"Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle  the request. Chain the receiving objects and pass the request along the chain until an object handles it."&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-indent: 0.4in;"&gt;Figure illustrates the class diagram.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.55in;"&gt;&lt;i&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.55in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_k4180KU275M/TOaIYLKErDI/AAAAAAAAAWc/wZdCZ2p-EkI/s1600/CR1.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_k4180KU275M/TOaIYLKErDI/AAAAAAAAAWc/wZdCZ2p-EkI/s1600/CR1.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.55in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.55in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.55in;"&gt;Typical object structure might look like Below Figure.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/div&gt;&lt;div class="MsoNormal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_k4180KU275M/TOaIb5AJNVI/AAAAAAAAAWg/afeTSpVvFLU/s1600/CR2.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_k4180KU275M/TOaIb5AJNVI/AAAAAAAAAWg/afeTSpVvFLU/s1600/CR2.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/div&gt;&lt;h2&gt;&lt;a href="" name="12c647ceabbe4d3b__Toc146441502"&gt;&lt;span lang="EN-GB"&gt;1.1&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;Intent&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-GB"&gt; &lt;/span&gt;&lt;/h2&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2&gt;&lt;a href="" name="12c647ceabbe4d3b__Toc146441503"&gt;&lt;span lang="EN-GB"&gt;1.2&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;Motivation&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-GB"&gt; &lt;/span&gt;&lt;/h2&gt;&lt;div class="MsoNormal" style="margin-left: 0.8in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;Consider a context-sensitive help system for  a GUI&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.8in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;The object that ultimately provides the help isn't known explicitly to the object (e.g., a button) that initiates the help request&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.8in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;So use a chain of objects to decouple the senders from the receivers. The request gets passed along the chain until one of the objects handles it.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.8in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;Each object on the chain shares a common interface for handling requests and for accessing its successor on the chain&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2&gt;&lt;a href="" name="12c647ceabbe4d3b__Toc146441504"&gt;&lt;span lang="EN-GB"&gt;1.3&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;Applicability&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;Use Chain of Responsibility:&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.8in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;When more than one object may handle a request and the actual handler is not know in advance&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.8in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;When requests follow a "handle or forward" model - that is, some requests can be handled where they are generated while others must be forwarded to another object to be handled&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.8in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;When a request has to be issued to several objects without specifying the receiver explicitly&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.8in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;The set of objects that can handle a request should be specified dynamically&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.8in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2&gt;&lt;a href="" name="12c647ceabbe4d3b__Toc146441505"&gt;&lt;span lang="EN-GB"&gt;1.4&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;Consequences&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class="MsoNormal" style="margin-left: 0.8in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;Reduced coupling between the sender of a request and the receiver – the sender and receiver have no explicit knowledge  of each other&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.8in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;Receipt is not guaranteed - a request could fall off the end of the chain without being handled &lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.8in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;The chain of handlers can be modified dynamically&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.8in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;Each C# object in the chain is self-contained. It knows nothing of the others and only need decide whether it can satisfy the request. This makes both writing each one and constructing the chain very easy. &lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.8in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;You can decide whether the final object in the chain handles all requests it receives in some default fashion or just discards them. However, you do have to know which object will be last in the chain for this to be effective.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.8in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;Finally, since C# cannot provide multiple inheritance, the basic Chain class sometimes needs to be an interface rather than an abstract class so the individual objects can inherit from another useful hierarchy, as we did here by deriving them all from Control. This disadvantage of this approach is that you often have to implement the linking, sending, and forwarding code in each module separately or, as we did here, by subclassing a concrete class that implements the Chain interface.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2&gt;&lt;a href="" name="12c647ceabbe4d3b__Toc146441506"&gt;&lt;span lang="EN-GB"&gt;1.5&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;Structure&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Class Diagram&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_k4180KU275M/TOaIjgZGcYI/AAAAAAAAAWk/A46XhGanuZ0/s1600/CR3.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_k4180KU275M/TOaIjgZGcYI/AAAAAAAAAWk/A46XhGanuZ0/s1600/CR3.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Object Diagram&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_k4180KU275M/TOaInRCelFI/AAAAAAAAAWo/2w4ogtRlErs/s1600/CR4.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_k4180KU275M/TOaInRCelFI/AAAAAAAAAWo/2w4ogtRlErs/s1600/CR4.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2&gt;&lt;a href="" name="12c647ceabbe4d3b__Toc146441507"&gt;&lt;span lang="EN-GB"&gt;1.6&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;Example1&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;&lt;b&gt;Scenario&lt;/b&gt;: &lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;We are designing the software for a system that approves purchasing requests. The approval authority depends on  the dollar amount of the purchase. The approval authority for a given dollar amount could change at any time and the system should be flexible enough to handle this situation.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;&lt;b&gt;Solution&lt;/b&gt;: &lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;Use the Chain of Responsibility pattern. PurchaseRequest objects forward the approval request to a PurchaseApproval object. Depending on the dollar amount, the PurchaseApproval object may approve the request or forward it on to the next approving authority in the chain. The approval authority at any level in the chain can be easily modified without affecting the original PurchaseRequest object.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2&gt;&lt;a href="" name="12c647ceabbe4d3b__Toc146441508"&gt;&lt;span lang="EN-GB"&gt;1.7&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;Example2&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;This code demonstrates the Chain of Responsibility pattern in which several linked objects (the Chain) are offered the opportunity to respond to a request or hand it off to the object next in line.&lt;i&gt; &lt;/i&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse; border: medium none; margin-left: 30.2pt;"&gt;&lt;tbody&gt;&lt;tr&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(192, 80, 77); border: 1pt solid rgb(191, 191, 191); padding: 0in 5.4pt; width: 333.9pt;" valign="top" width="445"&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(192, 80, 77); border-color: rgb(191, 191, 191) rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; border-style: solid solid solid none; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 328.5pt;" valign="top" width="438"&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 333.9pt;" valign="top" width="445"&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;static void Main()&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //   Setup Chain of Responsibility&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Handler   h1 = new ConcreteHandler1();&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Handler   h2 = new ConcreteHandler2();&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Handler   h3 = new ConcreteHandler3();&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; h1.SetSuccessor(h2);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; h2.SetSuccessor(h3);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //   Generate and process request&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int[]   requests = { 2, 5, 14, 22, 18, 3, 27, 20 };&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach   (int request in requests)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; h1.HandleRequest(request);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //   Wait for user&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.Read();&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 328.5pt;" valign="top" width="438"&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;abstract class   Handler&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected   Handler successor;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public   void SetSuccessor(Handler successor)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.successor   = successor;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public   abstract void HandleRequest(int request);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 333.9pt;" valign="top" width="445"&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;class ConcreteHandler1 : Handler&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public override void HandleRequest(int request)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   if (request &amp;gt;= 0 &amp;amp;&amp;amp; request &amp;lt; 10)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Console.WriteLine("{0} handled request {1}",&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   this.GetType().Name, request);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   else if (successor != null)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   successor.HandleRequest(request);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 328.5pt;" valign="top" width="438"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;// "ConcreteHandler2"&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; class ConcreteHandler2 :   Handler&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   public override void HandleRequest(int request)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   if (request &amp;gt;= 10 &amp;amp;&amp;amp; request &amp;lt; 20)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Console.WriteLine("{0} handled request {1}",&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   this.GetType().Name, request);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   else if (successor != null)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   successor.HandleRequest(request);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 333.9pt;" valign="top" width="445"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;// "ConcreteHandler3"&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; class ConcreteHandler3 :   Handler&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public   override void HandleRequest(int request)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   if (request &amp;gt;= 20 &amp;amp;&amp;amp; request &amp;lt; 30)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   Console.WriteLine("{0} handled request {1}",&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   this.GetType().Name, request);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   else if (successor != null)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   successor.HandleRequest(request);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;}&lt;/span&gt;&lt;i&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 328.5pt;" valign="top" width="438"&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2&gt;&lt;a href="" name="12c647ceabbe4d3b__Toc146441509"&gt;&lt;span lang="EN-GB"&gt;1.8&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;Example3&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;This real-world code demonstrates the Chain of Responsibility pattern in which several linked managers and executives can respond to a purchase request or hand it off to a superior. Each position has can have its own set of rules which orders they can approve.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse; border: medium none; margin-left: 30.2pt;"&gt;&lt;tbody&gt;&lt;tr&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(192, 80, 77); border: 1pt solid rgb(191, 191, 191); padding: 0in 5.4pt; width: 4.45in;" valign="top" width="427"&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(192, 80, 77); border-color: rgb(191, 191, 191) rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; border-style: solid solid solid none; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 4.75in;" valign="top" width="456"&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(192, 80, 77) rgb(192, 80, 77); border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 4.45in;" valign="top" width="427"&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;static void Main()&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Setup Chain of   Responsibility&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Director Larry = new   Director();&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; VicePresident Sam = new   VicePresident();&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; President Tammy = new   President();&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Larry.SetSuccessor(Sam);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sam.SetSuccessor(Tammy);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Generate and process   purchase requests&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Purchase p = new   Purchase(2034, 350.00, "Supplies");&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Larry.ProcessRequest(p);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p = new Purchase(2035,   32590.10, "Project X");&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Larry.ProcessRequest(p);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p = new Purchase(2036,   122100.00, "Project Y");&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Larry.ProcessRequest(p);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Wait for user&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.Read();&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color rgb(192, 80, 77) rgb(192, 80, 77) -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 4.75in;" valign="top" width="456"&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;abstract class Approver&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; protected Approver successor;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; public void SetSuccessor(Approver successor)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp; this.successor = successor;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; public abstract void ProcessRequest(Purchase purchase);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 4.45in;" valign="top" width="427"&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;class Director : Approver&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; public override void ProcessRequest(Purchase purchase)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp; if (purchase.Amount &amp;lt; 10000.0)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("{0}   approved request# {1}",&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; this.GetType().Name,   purchase.Number);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp; else if (successor != null)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; successor.ProcessRequest(purchase);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 4.75in;" valign="top" width="456"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;class &lt;/span&gt;&lt;span style="color: #ff6600; font-family: Consolas; font-size: 10pt;"&gt;VicePresident&lt;/span&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt; : Approver&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp; public override void   ProcessRequest(Purchase purchase)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if   (purchase.Amount &amp;lt; 25000.0)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("{0}   approved request# {1}",&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   this.GetType().Name, purchase.Number);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (successor   != null)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   successor.ProcessRequest(purchase);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(192, 80, 77) rgb(192, 80, 77); border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 4.45in;" valign="top" width="427"&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;class President : Approver&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;public override void ProcessRequest(Purchase purchase)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;{&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; if (purchase.Amount &amp;lt; 100000.0)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine("{0}   approved request# {1}",&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; this.GetType().Name,   purchase.Number);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;else&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;{&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp; Console.WriteLine("Request# {0} requires an  &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; executive   meeting!",purchase.Number);&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-GB" style="color: navy; font-family: Consolas; font-size: 10pt;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color rgb(192, 80, 77) rgb(192, 80, 77) -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 4.75in;" valign="top" width="456"&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// Request details&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: teal;"&gt;Purchase&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; number;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;double&lt;/span&gt; amount;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; purpose;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// Constructor&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; Purchase(&lt;span style="color: blue;"&gt;int&lt;/span&gt; number, &lt;span style="color: blue;"&gt;double&lt;/span&gt; amount, &lt;span style="color: blue;"&gt;string&lt;/span&gt; purpose)&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.number = number;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.amount = amount;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.purpose = purpose;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// Properties&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;double&lt;/span&gt;  Amount&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; amount; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;set&lt;/span&gt; { amount = &lt;span style="color: blue;"&gt;value&lt;/span&gt;; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt;  Purpose&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; purpose; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;set&lt;/span&gt; { purpose = &lt;span style="color: blue;"&gt;value&lt;/span&gt;; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt; Number&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; number; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;set&lt;/span&gt; { number = &lt;span style="color: blue;"&gt;value&lt;/span&gt;; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="font-family: Consolas; font-size: 10pt;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2&gt;&lt;a href="" name="12c647ceabbe4d3b__Toc146441510"&gt;&lt;span lang="EN-GB"&gt;1.9&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;Examples in C#&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class="MsoNormal"&gt;Under the covers, C# form windows receive various events, such as MouseMove, and then forward them to the controls the form contains. However, only the final control ever receives the message in C# whereas in some other languages, each containing control does as well. This is a clear implementation of Chain of Responsibility pattern. &lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;We could also argue that, in general, the C# class inheritance structure itself exemplifies this pattern. If you call for a method to be executed in a deeply derived class, that method is passed up the inheritance chain until the first parent class containing that method is found. The fact that further parents contain other implementations of that method does not come into play.&lt;/div&gt;&lt;div class="MsoNormal"&gt;We will also see that the Chain of Responsibility is ideal for implementing Interpreters and use one in the Interpreter pattern we discuss later.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Hope this helps.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Thanks &amp;amp; Regards,&lt;/div&gt;&lt;div class="MsoNormal"&gt;Arun Manglick&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8307718319698992522-4624452390872177142?l=arun-ts.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://arun-ts.blogspot.com/feeds/4624452390872177142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://arun-ts.blogspot.com/2010/11/chain-of-responsibility-design-pattern.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8307718319698992522/posts/default/4624452390872177142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8307718319698992522/posts/default/4624452390872177142'/><link rel='alternate' type='text/html' href='http://arun-ts.blogspot.com/2010/11/chain-of-responsibility-design-pattern.html' title='Chain of Responsibility Design Pattern - Behavioural'/><author><name>Arun Manglick</name><uri>http://www.blogger.com/profile/03915326692989759515</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_k4180KU275M/TOaIYLKErDI/AAAAAAAAAWc/wZdCZ2p-EkI/s72-c/CR1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8307718319698992522.post-6490857564031707877</id><published>2010-11-19T05:59:00.000-08:00</published><updated>2010-11-19T06:40:14.578-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Design n Architect'/><title type='text'>Command Design Pattern - Behavioural</title><content type='html'>&lt;div class="gmail_quote"&gt;&lt;div lang="EN-US" link="blue" vlink="purple"&gt;&lt;div&gt;&lt;h2&gt;&lt;a href="" name="12c646d1e15180a0__Toc202706193"&gt;&lt;span lang="EN-GB"&gt;1.1&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;Definition&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class="MsoNormal" style="margin-left: 0.3366in;"&gt;&lt;span style="font-size: 10pt;"&gt;-&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt; &lt;/span&gt;&lt;/span&gt;Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and&amp;nbsp; support undoable operations.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.3366in;"&gt;&lt;span style="font-size: 10pt;"&gt;-&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;In Command pattern objects are used to represent &lt;span style="color: #ff6600;"&gt;actions&lt;/span&gt;. A Command object &lt;a href="http://en.wikipedia.org/wiki/Information_Hiding" target="_blank" title="Information Hiding"&gt;&lt;span style="color: black; text-decoration: none;"&gt;encapsulates&lt;/span&gt;&lt;/a&gt; an action and its parameters.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.75in;"&gt;&lt;span style="font-size: 10pt;"&gt;&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2&gt;&lt;a href="" name="12c646d1e15180a0__Toc202706194"&gt;&lt;span lang="EN-GB"&gt;1.2&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;Intent&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-GB"&gt; &lt;/span&gt;&lt;/h2&gt;&lt;div style="margin-left: 0.5in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;There are times when developing an application framework that you need to pass requests between objects without knowing anything about operation requested  or the receiver of the request. By encapsulating the request as an object itself, one can "parameterize clients with different requests, queue or log requests, and support undoable operations." (GOF) This is the Command behavioral design pattern. You can separate the requesting object from the object that "knows" how to fulfill it.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-left: 0.5in; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2&gt;&lt;a href="" name="12c646d1e15180a0__Toc202706195"&gt;&lt;span lang="EN-GB"&gt;1.3&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;Motivation&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-GB"&gt; &lt;/span&gt;&lt;/h2&gt;&lt;div style="margin-left: 0.5in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;In object-oriented programming, the Command pattern is a design pattern in which objects are used to represent actions. A command object encapsulates an action and its parameters.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-left: 0.5in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;For example, a printing library might include a PrintJob class. A user would typically create a new PrintJob object, set its properties (the document to  be printed, the number of copies, and so on), and finally call a method to send the job to the printer.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-left: 0.5in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;In this case, the same functionality could be exposed via a single SendJobToPrinter() procedure with many parameters. As it takes more code to write a command class than to write a procedure, there must be some reason to use a class. There are many possible reasons:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.4in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.9in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;It can improve API design. In some cases, code that uses a command object is shorter, clearer, and more declarative than code that uses a procedure with many parameters. This is particularly true if a caller typically uses only a handful of the parameters and is willing to accept sensible defaults for the rest.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.9in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;A command object is convenient temporary storage for procedure parameters. It can be used while assembling the parameters for a function call and allows the command to be set aside for later use.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.9in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;A class is a convenient place to collect code and data related to a command. A command object can hold information about the command, such as its name or which user launched it; and answer questions about it, such as how long it will likely take.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.9in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;Treating commands as objects enables data structures containing multiple commands. A complex process could be treated  as a tree or graph of command objects. A thread pool could maintain a priority queue of command objects consumed by worker threads.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.9in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;Treating commands as objects supports undo-able operations, provided that the command objects are stored (for example in a stack)&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.9in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;The command is a useful abstraction for building generic components, such as a thread pool, that can handle command objects of any type. If a new type of command object is created later, it can work with these generic components automatically. For example, in Java, a generic ThreadPool class could have a method addTask(Runnable task) that accepts any object that implements the java.lang.Runnable interface.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.9in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2&gt;&lt;a href="" name="12c646d1e15180a0__Toc202706196"&gt;&lt;span lang="EN-GB"&gt;1.4&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;Uses for the command object&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div style="margin-left: 0.5in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;Command objects are useful for implementing:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h5&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;Multi-level undo &lt;/span&gt;&lt;/h5&gt;&lt;div class="MsoNormal" style="margin-left: 0.25in;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/div&gt;&lt;div style="margin-left: 0.5in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;If all user actions in a program are implemented as command objects, the program can keep a stack of the most recently executed commands. When the user wants to undo a command, the program simply pops the most recent command object and executes its undo() method.&lt;/span&gt;&lt;/div&gt;&lt;h5&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;Transactional behavior &lt;/span&gt;&lt;/h5&gt;&lt;div class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-left: 0.5in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;Undo is perhaps even more essential when it's called rollback and happens automatically when an operation fails partway through. Installers need this. So do databases. Command objects can also be used to implement two-phase commit.&lt;/span&gt;&lt;/div&gt;&lt;h5&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;Progress bars &lt;/span&gt;&lt;/h5&gt;&lt;div class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-left: 0.5in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;Suppose a program has a sequence of commands that it executes in order. If each command object has a getEstimatedDuration() method, the program can easily estimate  the total duration. It can show a progress bar that meaningfully reflects how close the program is to completing all the tasks.&lt;/span&gt;&lt;/div&gt;&lt;h5&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;Wizards &lt;/span&gt;&lt;/h5&gt;&lt;div class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-left: 0.5in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;Often a wizard presents several pages of configuration for a single action that happens only when the user clicks the "Finish" button on the last page. In these cases, a natural way to separate user interface code from application code is to implement the wizard using a command object. The command object is created when the wizard is first displayed. Each wizard page stores its GUI changes in the command object, so the object is populated as the user progresses. "Finish" simply triggers a call to execute(). This way, the command class contains no user interface code.&lt;/span&gt;&lt;/div&gt;&lt;h5&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;GUI buttons and menu items &lt;/span&gt;&lt;/h5&gt;&lt;div class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-left: 0.5in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;In Swing programming, an Action is a command object. In addition to the ability to perform the desired command, an Action may have an associated icon, keyboard shortcut, tooltip text, and so on. A toolbar button or menu item component may be completely initialized using only the Action object.&lt;/span&gt;&lt;/div&gt;&lt;h5&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;Thread pools &lt;/span&gt;&lt;/h5&gt;&lt;div class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-left: 0.5in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;A typical, general-purpose thread pool class might have a public addTask() method that adds a work item to an internal queue of tasks waiting to be done. It maintains a pool of threads that execute commands from the queue. The items  in the queue are command objects. Typically these objects implement a common interface such as java.lang.Runnable that allows the thread pool to execute  the command even though the thread pool class itself was written without any knowledge of the specific tasks for which it would be used.&lt;/span&gt;&lt;/div&gt;&lt;h5&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;Macro recording &lt;/span&gt;&lt;/h5&gt;&lt;div class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-left: 0.5in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;If all user actions are represented by command objects, a program can record a sequence of actions simply by keeping a list of the command objects as they  are executed. It can then "play back" the same actions by executing the same command objects again in sequence. If the program embeds a scripting engine, each command object can implement a toScript() method, and user actions can then be easily recorded as scripts.&lt;/span&gt;&lt;/div&gt;&lt;h5&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;Networking &lt;/span&gt;&lt;/h5&gt;&lt;div class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-left: 0.5in; text-align: justify;"&gt;&lt;span lang="EN-GB" style="font-size: 11pt;"&gt;It is possible to send whole command objects across the network to be executed on  the other machines, for example player actions in computer games.&lt;/span&gt;&lt;/div&gt;&lt;h2&gt;&lt;a href="" name="12c646d1e15180a0__Toc202706197"&gt;&lt;span lang="EN-GB"&gt;1.5&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;Structure&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.5in;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_k4180KU275M/TOaDO2X1qJI/AAAAAAAAAWY/YAVpJ9sY98Y/s1600/Command1.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_k4180KU275M/TOaDO2X1qJI/AAAAAAAAAWY/YAVpJ9sY98Y/s1600/Command1.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;h2&gt;&lt;a href="" name="12c646d1e15180a0__Toc202706198"&gt;&lt;span lang="EN-GB"&gt;1.1&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;Participants&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;&amp;nbsp;The classes and/or objects participating in this pattern are:&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse; border: medium none;"&gt;&lt;tbody&gt;&lt;tr&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(192, 80, 77); border: 1pt solid rgb(191, 191, 191); padding: 0in 5.4pt; width: 135.25pt;" valign="top" width="180"&gt;&lt;/td&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(192, 80, 77); border-color: rgb(191, 191, 191) rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; border-style: solid solid solid none; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 399.85pt;" valign="top" width="533"&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 135.25pt;" valign="top" width="180"&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;Command&amp;nbsp;&amp;nbsp;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 399.85pt;" valign="top" width="533"&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;declares an interface for   executing an operation &lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 135.25pt;" valign="top" width="180"&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;ConcreteCommand&amp;nbsp;&amp;nbsp;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 399.85pt;" valign="top" width="533"&gt;&lt;div class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;span lang="EN-GB" style="font-size: 10pt;"&gt;-&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &lt;/span&gt;&lt;/span&gt;defines a binding between a Receiver object   and an action &lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.25in;"&gt;&lt;span style="font-size: 10pt;"&gt;-&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;   &lt;/span&gt;&lt;/span&gt;implements Execute by invoking the   corresponding operation(s) on Receiver&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 135.25pt;" valign="top" width="180"&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;Client&amp;nbsp;&amp;nbsp;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 399.85pt;" valign="top" width="533"&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;creates a ConcreteCommand  object   and sets its receiver &lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 135.25pt;" valign="top" width="180"&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;Invoker&amp;nbsp;&amp;nbsp;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 399.85pt;" valign="top" width="533"&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;asks the command to carry  out the   request&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 135.25pt;" valign="top" width="180"&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;Receiver&amp;nbsp;&amp;nbsp;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 399.85pt;" valign="top" width="533"&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;knows how to perform the   operations associated with carrying out the request.&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="MsoNormal" style="margin-left: 0.3in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2&gt;&lt;a href="" name="12c646d1e15180a0__Toc202706199"&gt;&lt;span lang="EN-GB"&gt;1.2&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;Typical Usage&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class="MsoNormal" style="margin-left: 0.4in;"&gt;The GOF recommend using the  Command pattern when you want to:&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.4in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.9in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;parameterize objects by an action to perform (much like SqlCommands allowing different types of command text and execute methods)&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.9in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;specify, queue, and execute requests at different times. Your Command object may live independently of a request&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.9in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;support undo. State can be stored on the Command object, and an "undo" operation performs a "reverse" of  the execute. For unlimited undo/redo, a list of Commands could be maintained, and one could traverse it backwards or forwards calling "undo" or "execute" appropriately&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.9in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;build systems from "primitive or atomic operations" such as transactions&lt;/div&gt;&lt;span style="font-size: 11pt;"&gt;&lt;br clear="all" /&gt; &lt;/span&gt;  &lt;br /&gt;&lt;div class="MsoNormal" style="margin-left: 0.9in;"&gt;&lt;span style="font-family: Symbol;"&gt;·&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;h2&gt;&lt;a href="" name="12c646d1e15180a0__Toc202706200"&gt;&lt;span lang="EN-GB"&gt;1.3&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-GB"&gt;Sample Code&lt;/span&gt;&lt;/a&gt;&lt;span lang="EN-GB"&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div class="MsoNormal" style="margin-left: 0.4in;"&gt;This code demonstrates the Command pattern which stores requests as objects allowing clients to execute or playback the requests.&lt;/div&gt;&lt;div class="MsoNormal" style="margin-left: 0.4in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse; border: medium none;"&gt;&lt;tbody&gt;&lt;tr&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(192, 80, 77); border: 1pt solid rgb(191, 191, 191); padding: 0in 5.4pt; width: 346.1pt;" valign="top" width="461"&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="background: none repeat scroll 0% 0% rgb(192, 80, 77); border-color: rgb(191, 191, 191) rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; border-style: solid solid solid none; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 292.5pt;" valign="top" width="390"&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 346.1pt;" valign="top" width="461"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: #003366; font-family: Consolas; font-size: 10pt;"&gt;class Invoker &lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private Command command;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public void SetCommand(Command command)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.command = command;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public void ExecuteCommand()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;command.Execute();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/td&gt;   &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191) -moz-use-text-color; border-style: none solid solid none; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 292.5pt;" valign="top" width="390"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: #003366; font-family: Consolas; font-size: 10pt;"&gt;abstract class Command &lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;protected Receiver receiver;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Constructor &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public Command(Receiver receiver)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.receiver = receiver;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public abstract void Execute();&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt;   &lt;td style="border-color: -moz-use-text-color rgb(191, 191, 191) rgb(191, 191, 191); border-style: none solid solid; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 346.1pt;" valign="top" width="461"&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: #003366; font-family: Consolas; font-size: 10pt;"&gt;class ConcreteCommand : Command&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Constructor &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;n
