<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>DiegumZone. Who Wanna Be An Architect? : Aspiring Solution Architects</title><link>http://blogs.msdn.com/diegumzone/archive/tags/Aspiring+Solution+Architects/default.aspx</link><description>Tags: Aspiring Solution Architects</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Agility: Automation for Better Outcomes and Feedback</title><link>http://blogs.msdn.com/diegumzone/archive/2006/12/04/agility-automation-for-better-outcomes-and-feedback.aspx</link><pubDate>Mon, 04 Dec 2006 08:33:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1202780</guid><dc:creator>diegumzone</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/diegumzone/comments/1202780.aspx</comments><wfw:commentRss>http://blogs.msdn.com/diegumzone/commentrss.aspx?PostID=1202780</wfw:commentRss><description>&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;A bad habit of several developers has to do with entering in a long tunnel of coding for an application project, relegating a more or less acceptable executable for the last project stages. That has several risks:&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL style="MARGIN-TOP: 0in; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.5in; DIRECTION: ltr; unicode-bidi: embed" type=disc&gt;
&lt;LI style="MARGIN-TOP: 0px; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; mso-outline-level: 1"&gt;&lt;SPAN style="FONT-FAMILY: Verdana"&gt;Feedback from users and customers delayed, what can carry a poor customer satisfaction for who was going to receive the outcome. Business are in constant change so late delivery can bring outdated results&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; mso-outline-level: 1"&gt;&lt;SPAN style="FONT-FAMILY: Verdana"&gt;Urgent and/or expensive changes for the developing team, and in those environments of changes made under great pressure, conditions for bugs proliferation are optimal&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;:-D&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; mso-outline-level: 1"&gt;&lt;SPAN style="FONT-FAMILY: Verdana"&gt;When that happens, when bugs are running everywhere, the vicious circle recycles: more urgent and/or more expensive changes with even better conditions for bugs generation&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; mso-outline-level: 1"&gt;&lt;SPAN style="FONT-FAMILY: Verdana"&gt;Those can lead to a dead end known of project paralysis, manifested in the moral of developers, analysts, architects and project leaders, due to the fact that every initiative to regain control is anyway expensive and requires, although the previously invested effort, a new one greater&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; mso-outline-level: 1"&gt;&lt;SPAN style="FONT-FAMILY: Verdana"&gt;This project paralysis can affect also the user / customer side, when the confidence on the outcomes is ran out&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI style="MARGIN-TOP: 0px; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; mso-outline-level: 1"&gt;&lt;SPAN style="FONT-FAMILY: Verdana"&gt;After this happens it comes… Not. Nothing comes after this: when the confidence runs out, the project is over&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;So the key here is achieve a schema of frequent builds for iterative, incremental running results. But trying to adopt that practice manually is stressful and could lead to early lack of motivation&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;So the key of the key has to do with automating the building process. Turning it to a industrial scale. Fortunately several tools can leverage us with building automation (MSBuild, NAnt, NMake), unit testing (NUnit, NUnitForms, Visual Studio 2005 Testing support, etc) and code analysis (FxCop, ...)&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;In his ninth chapter on the webcast series "Architecting Desktop Applications", PhD. Joe Hummel will show us how static code analysis prevents, in compile-time, design rule breaching (for instance for security, low coupling, performance, naming conventions, etc) thanks to a built-in VS2005 extensible mechanism known as FxCop. This feature is fundamental in those cases where source code is being written by several people with different styles, background and knacks&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;Also, learn how repeatable unit testing helps you keeping component health under control for those sudden changes with VS2005' Testing projects and its assertion mechanism. This will surely avoid several debugging hours. Here, the code coverage will give us a reliable estimation about how many code is really being subject of tests (with the possibility of finding out which code lines aren't)&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;Finally, you'll be taught about scaling the process of building, analyzing the code and running the tests through a facility included with the Visual Studio 2005 distribution called MSBuild. MSBuild is the process that VS2005 launches in background every time we select rebuilding our project. Here you'll see how to schedule MSBuild to build our project with a regular frequence. What about nightly builds, for instance? That would be helpful to know, as soon as possible, if a newly integrated source file is making fail some tests&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;So, what else can I do? Just point where the webcast is:&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&lt;A class="" title="MSDN Webcast: Architecting Desktop Applications with 2.0 (Part 09 of 15): Build, Build, Build, Test, Test, Test (Level 300)" href="http://msevents.microsoft.com/cui/WebCastEventDetails.aspx?EventID=1032280471&amp;amp;EventCategory=5&amp;amp;culture=en-US&amp;amp;CountryCode=US" mce_href="http://msevents.microsoft.com/cui/WebCastEventDetails.aspx?EventID=1032280471&amp;amp;EventCategory=5&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;Build, Build, Build, Test, Test, Test&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1202780" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/diegumzone/archive/tags/Aspiring+Solution+Architects/default.aspx">Aspiring Solution Architects</category></item><item><title>From Classes To Components</title><link>http://blogs.msdn.com/diegumzone/archive/2006/11/13/from-classes-to-components.aspx</link><pubDate>Mon, 13 Nov 2006 08:41:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1066552</guid><dc:creator>diegumzone</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/diegumzone/comments/1066552.aspx</comments><wfw:commentRss>http://blogs.msdn.com/diegumzone/commentrss.aspx?PostID=1066552</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Garamond color=#000080 size=5&gt;&amp;nbsp;In&lt;/FONT&gt;&amp;nbsp; n-tier, distributed applications, we have to decide which logic deploy where. Those deployments are all about installing components in specific places but, what are components exactly? What distinguishes a component&amp;nbsp;with respect of&amp;nbsp;a mere class?&lt;/P&gt;
&lt;P&gt;Actually, as classes do, components take ownership of cohesive responsability but components are logical units from a physical perspective. In MS .NET terms, components are redistributable assemblies (.dll) of one or more classes&lt;/P&gt;
&lt;P&gt;But, wait, it's not so easy: new considerations arise in this context&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Security&lt;/STRONG&gt;: When one part delivers a component to some other, how can the receiver be sure he/she's loading the original component (not tampered, not violated in any way). How can the sender be sure that calls to his/her component come from the receiver and not from someone else who got an illegal copy of the component? How can we protect, given a component, about illegal decompiling, illegal use of reflection on it and, most of all, illegal inheritance from one or more classes which, under the façade of the expected ancestor, expose a different behavior than expected? 
&lt;LI&gt;&lt;STRONG&gt;Versioning&lt;/STRONG&gt;: how to deal with different versions of a component without breaking usage&amp;nbsp;for legacy clients of such component? In the previous infrastructure, Windows DNA, such issue was known as DLL Hell 
&lt;LI&gt;&lt;STRONG&gt;Configuration&lt;/STRONG&gt;: where must be put, in the &lt;FONT face="Courier New" size=2&gt;Setting.settings&lt;/FONT&gt; project file or in the &lt;FONT face="Courier New" size=2&gt;app.config&lt;/FONT&gt; file? What if the solution has several project-components? Where the component config info has to go in such scenario?&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;In this eighth webcast, Dr. Joe Hummel focuses on the design and creation of .NET components. He explains what component references are and how the .NET CLR deals with them via component metadata&lt;/P&gt;
&lt;P&gt;With respect of security issues, Hummel offers some notions on Threat Modeling and how to avoid it via strong-named assemblies&lt;/P&gt;
&lt;P&gt;About versioning, know the benefits of the .NET's Global Assembly Cache and how it says &lt;EM&gt;bye-bye&lt;/EM&gt; to the Windows Registry (leaving behind the DLL Hell)&lt;/P&gt;
&lt;P&gt;Finally some notions of pluggable components or, said in other words, what role play in .NET the elements &lt;FONT face="Courier New" size=2&gt;configuration&lt;/FONT&gt;, &lt;FONT face="Courier New" size=2&gt;configSections&lt;/FONT&gt;, &lt;FONT face="Courier New" size=2&gt;sectionGroup&lt;/FONT&gt; and &lt;FONT face="Courier New" size=2&gt;section&lt;/FONT&gt;? What role plays the &lt;FONT face="Courier New" size=2&gt;applicationSettings&lt;/FONT&gt; element? Tired of being tired of never finishing to understand it?&lt;/P&gt;
&lt;P&gt;So come on, join us again and let's watch together a new chapter of Dr Hummel's series "Architecting&amp;nbsp;Smart Client&amp;nbsp;applications"&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msevents.microsoft.com/cui/WebCastEventDetails.aspx?EventID=1032280469&amp;amp;EventCategory=5&amp;amp;culture=en-US&amp;amp;CountryCode=US" mce_href="http://msevents.microsoft.com/cui/WebCastEventDetails.aspx?EventID=1032280469&amp;amp;EventCategory=5&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;&lt;STRONG&gt;Turning Tiers into Components&lt;/STRONG&gt;&lt;/A&gt;&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1066552" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/diegumzone/archive/tags/Aspiring+Solution+Architects/default.aspx">Aspiring Solution Architects</category></item><item><title>Software Architecture: Past, Present and Future</title><link>http://blogs.msdn.com/diegumzone/archive/2006/11/10/software-architecture-past-present-and-future.aspx</link><pubDate>Fri, 10 Nov 2006 07:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1051393</guid><dc:creator>diegumzone</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/diegumzone/comments/1051393.aspx</comments><wfw:commentRss>http://blogs.msdn.com/diegumzone/commentrss.aspx?PostID=1051393</wfw:commentRss><description>&lt;DIV class=Section1&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;&lt;FONT style="BACKGROUND-COLOR: #000080" face=Garamond color=#f5f5dc size=5&gt;&amp;nbsp;What&amp;nbsp;&lt;/FONT&gt; is exactly software architecture? Do we really need it? Why have we only recently been discussing it? Is there suddenly a contagious fever about software architecture infecting those who claim to be architects? Who are they actually: gurus, just senior developers, or maybe smooth-talkers?&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;These are questions that developers, junior and senior, are asking about software architecture and software architects. In this article we, the members of the MS Architecture Strategy Team, will answer all of them and even more: we will face the forbidden question “Can a developer become software architect?”&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H6 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;The Need for Software Architecture&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/H6&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;&lt;BR&gt;A longtime ago, programming platforms were more self-sufficient than nowadays. From robust and complex environments like mainframe COBOL to light and easy to understand &lt;I style="mso-bidi-font-style: normal"&gt;xBase&lt;/I&gt; languages, the most important technical decisions were already taken. In terms of software projects, that implied both benefits and deficits. A benefit, because where a decision exists, no time needs to be spent in discussions about the best way to do anything.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;In non enterprise environments (academics, small business), this solutions model was adequate and successful for a long time. But it was a deficit as well, because at the largest companies, there was one notorious downfall - “all-or-nothing” platforms were too rigid to adapt to the competitive, highly changeable environments required by a global economy. Also, during mergers and acquisitions, it’s really hard to get two self-sufficient platforms to play togetether.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;Thus, component-oriented software was born with the goal of a new agility in scaling applications. This style of applications enabled us to choose among a broad set of platforms, to produce modular pieces (or components) ready to be used by other components made by us or bought from third parties. Once we could prove that integration was not an issue, this feature gained popularity in the enterprise, where the technical decision makers discovered the advantage of using the right platform and tools as solutions for specific problems. However, eventually the need to plan and manage components became evident to guarantee the success. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H6 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Defining Software Architecture&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/H6&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;&lt;BR&gt;So, thanks to component-oriented software we could choose the platform which best fit a specific problem. Despite that, the paradigm shift of new platforms was difficult to learn for many developers. Thus, one of the first objectives of a good architecture was &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;to gently hide &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;the complexity of new platforms and APIs behind simpler ones, more focused in the context of the problem being solved (typically a business problem), and, most of all, easily understandable by regular programmers.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;That way software architecture became a highway to develop business solutions in a timely, secure, accurate manner. Under the pavement of that highway is nothing but technological decisions, the critical ones. Decisions the architect had to take to make the developers’ tasks easier.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;The difference with past platforms is that now, rather than buying general purpose software from a vendor, an organization’s members make the decisions regarding the function of the business solution to be developed.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H6 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;What Software Architecture Used To Be&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/H6&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;&lt;BR&gt;Software Architecture emerged from a bundle of practices that applied by senior developers. Some of these merit mention:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in; mso-list: l3 level1 lfo1"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&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&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;Design Patterns&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;. The legend started with a book called simply &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;“Design Patterns” (&lt;A href="http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612" mce_href="http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612"&gt;http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612&lt;/A&gt;) that is still a best seller. These patterns cover highly decoupled, reusable solutions for frequent problems about responsibility assignment in object-oriented programming (OOP). Actually, they merely solve the problem at a small scale, but surely this book sowed the seed for a new way of thinking about applications, constituting the DNA of several enterprise systems. We suggest as a reading the article “Last Call to Design Patterns,” at &lt;A href="http://www.skyscrapr.net/blogs/solution/archive/2006/07/30/248.aspx" mce_href="http://www.skyscrapr.net/blogs/solution/archive/2006/07/30/248.aspx"&gt;http://www.skyscrapr.net/blogs/solution/archive/2006/07/30/248.aspx&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://msdn.microsoft.com/msdnmag/issues/05/07/DesignPatterns/fig05.gif" mce_src="http://msdn.microsoft.com/msdnmag/issues/05/07/DesignPatterns/fig05.gif"&gt;&lt;BR&gt;&lt;STRONG&gt;&lt;FONT face=Arial size=1&gt;Figure 1. The Strategy Pattern, as explained in &lt;/FONT&gt;&lt;/STRONG&gt;&lt;A href="http://msdn.microsoft.com/msdnmag/issues/05/07/DesignPatterns/default.aspx" mce_href="http://msdn.microsoft.com/msdnmag/issues/05/07/DesignPatterns/default.aspx"&gt;&lt;STRONG&gt;&lt;FONT face=Arial size=1&gt;MSDN Magazine (July, 2005)&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in; mso-list: l3 level1 lfo1"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&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&gt;&lt;?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /&gt;&lt;v:shapetype id=_x0000_t202 coordsize="21600,21600" o:spt="202" path="m,l,21600r21600,l21600,xe"&gt;&lt;v:stroke joinstyle="miter"&gt;&lt;/v:stroke&gt;&lt;v:path gradientshapeok="t" o:connecttype="rect"&gt;&lt;/v:path&gt;&lt;/v:shapetype&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;Architecture Patterns&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;. In the days of Smaltalk, one pattern proposed an extraordinary way of decoupling user experience from persistence mechanisms. This pattern, the Model-View-Controller, granted the responsibility of user interaction handling to a component which played a role known “the View.” “The Model” component had the responsibility of consistently keeping the business model state. A third component, called “the Controller” interpreted events originated from the View, promoting changes in the Model state accordingly. This pattern permitted very inexpensively interchanging components of any role, thus enabling multi-channel applications (that is, applications available in a vast variety of platforms and contexts). Think beyond the typical dichotomy of client versus server. Think of ATMs, mobile phones and other platforms. We have just to re-implement the View component in these use cases (“Bill payment,” “Book service,” and so on). The same applies to the Model. It isn’t just a discussion about Oracle versus SQL Server versus IBM DB/2 versus MySql vesus whichever. Think also of legacy mainframe environments or XML files for smaller data repositories (useful to easily mount development environments where the whole infrastructure could not be present). This pattern brought not just &lt;I style="mso-bidi-font-style: normal"&gt;execution distribution&lt;/I&gt; but &lt;I style="mso-bidi-font-style: normal"&gt;development distribution&lt;/I&gt;. Development could be better organized in different teams working in an asynchronous manner thanks to the inherent decoupling capabilities of this pattern. An interesting reference of this pattern is available at &lt;A href="http://www.skyscrapr.net/blogs/solution/archive/2006/08/07/262.aspx" mce_href="http://www.skyscrapr.net/blogs/solution/archive/2006/08/07/262.aspx"&gt;http://www.skyscrapr.net/blogs/solution/archive/2006/08/07/262.aspx&lt;/A&gt;. But MVC was just the beginning, because since the middle of nineties a series of books appeared to classify and organize many other architecture patterns. We must merely mention and recommend the POSA books (Patterns of Software Architecture), Sun’s Core J2EE Patterns, Martin Fowler’s series and, -with the launch of .NET - the MS Patterns and Practices guides. (Which include an interesting, ready-to-use set of application blocks, see &lt;I style="mso-bidi-font-style: normal"&gt;Frameworks.&lt;/I&gt;) For more information visit &lt;A href="http://msdn.microsoft.com/practices/" mce_href="http://msdn.microsoft.com/practices/"&gt;http://msdn.microsoft.com/practices/&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://msdn2.microsoft.com/en-us/library/ms978748.des_MVC_Fig01(en-us,MSDN.10).gif" mce_src="http://msdn2.microsoft.com/en-us/library/ms978748.des_MVC_Fig01(en-us,MSDN.10).gif"&gt;&lt;BR&gt;&lt;FONT face=Arial size=1&gt;&lt;STRONG&gt;Figure 2. The&amp;nbsp;MVC&amp;nbsp;Pattern, as explained&amp;nbsp;in &lt;/STRONG&gt;&lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/practices" mce_href="http://msdn.microsoft.com/practices"&gt;&lt;FONT face=Arial size=1&gt;&lt;STRONG&gt;MS Patterns&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Arial size=1&gt;&lt;STRONG&gt; &amp;amp; Practices' book &lt;/STRONG&gt;&lt;A href="http://msdn2.microsoft.com/en-us/architecture/ms998469.aspx" mce_href="http://msdn2.microsoft.com/en-us/architecture/ms998469.aspx"&gt;&lt;STRONG&gt;"Enterprise Solution Patterns"&lt;/STRONG&gt;&lt;/A&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in; mso-list: l3 level1 lfo1"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&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&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;Anti-patterns&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;. A counter-concept grew in parallel with the concept of patterns. If a pattern is seen as a best practice, an anti-pattern is a worst one. There is an infamous common anti-pattern, which aspiring architects and junior ones apply all the time: that of over architect all and every software component. This is commonly specially seen in the need of adopting immediately the new version of everything without actually considering if its benefits are helpful. Perhaps with the misconception that doing so will provide a comprehensive, easy to change architecture in some near future. But experience is showing that the opposite is happening - nobody wants to touch unnecessarily complex solutions so they remain “as is” until they are completely replaced. For a discussion about this, we suggest this article &lt;A href="http://www.skyscrapr.net/blogs/solution/archive/2006/08/28/282.aspx" mce_href="http://www.skyscrapr.net/blogs/solution/archive/2006/08/28/282.aspx"&gt;http://www.skyscrapr.net/blogs/solution/archive/2006/08/28/282.aspx&lt;/A&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in; mso-list: l3 level1 lfo1"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&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&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;Frameworks&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;. In a remarkable effort of enabling large scale software production, a variety of component blocks (better known as &lt;I style="mso-bidi-font-style: normal"&gt;frameworks&lt;/I&gt;) appeared. There are frameworks to solve the gap between the domain object model and the relational database schema (called Object/Relational Mappers); there are other ones intended to achieve a clean MVC componentization; and recently, a new generation of dependency-injection frameworks is dominating the scene. Dependency injection allows a component to not to be responsible for knowing what its dependencies are, it just has to know which interface they expose. Thus, any tier change will not impact on its associated classes, because they don’t know each other directly. The undeniable success of dependency injection frameworks coined a reputation for them as &lt;I style="mso-bidi-font-style: normal"&gt;lightweight&lt;/I&gt; (application) &lt;I style="mso-bidi-font-style: normal"&gt;containers&lt;/I&gt;, in opposition to heavy, &lt;I style="mso-bidi-font-style: normal"&gt;all or nothing&lt;/I&gt; solutions. There are some other specific purpose frameworks: integration, monitoring, and so on. These all share one concept: to keep developers focused on business logic (functional requirements) instead of cross-cutting aspects like security, manageability, and other non-functional requirements.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H6 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Emerging Architect Roles&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/H6&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;&lt;BR&gt;The considerations of economical changes like globalization and technological achievements like the Internet’s impact 0n the digital economy, pressed for formalizing software architecture as a discipline.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;Although there is not yet a definite agreement in the distinct roles, we can sketch three major personas:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&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&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;Infrastructure Architect&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;. These define the platform and other environments (hardware, basic software) to provide for business applications’ high availability. They must also work with developers to define mechanisms and standards that allow applications to achieve the security, reliability, manageability, transparency, and policy compliance essential to the modern business. It’s expected that the natural evolution of a senior IT professional is an Infrastructure Architect.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&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&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;Solutions Architect&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;. These are responsible for the design of one or more applications or services within an organization, usually within the scope of a division (and for that reason also known as Application Architect). Examples of such applications are: Internet banking, companywide knowledge sharing portal, and distributed point of sales applications. A senior developer is a good candidate to become Solutions Architect.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&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&gt;&lt;?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /&gt;&lt;st1:City w:st="on"&gt;&lt;st1:place w:st="on"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;Enterprise&lt;/SPAN&gt;&lt;/B&gt;&lt;/st1:place&gt;&lt;/st1:City&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt; Architect&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;. Their job is to keep the business and its IT systems in alignment. They strive to maximize the return on IT investment by making sure that IT spending is prioritized towards business opportunity, and by optimizing the impact of investments across the organization’s portfolios of services, resources, projects, and processes. They must be a bridge between business leaders, development, and operations to ensure that mutual understanding is achieved, goals are realistic, and expectations are properly managed. Enterprise Architecture is about the big picture — how people and technology work together to produce world-class, long-term results. For that reason, this persona is also referred as Strategic Architect. What is expected is that a Solutions Architect or Infrastructure Architect becomes Enterprise Architect.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H6 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;What Software Architecture worry about nowadays&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/H6&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;&lt;BR&gt;Recent years have been really challenging for software architecture. An elemental concept like service-oriented components (and its, as time goes by, more winner implementation: the Web Services), gave place to a whole enterprise strategy known as Service-Oriented Architecture (SOA). SOA has as a goal the complete connection of the business application portfolio.&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://msdn2.microsoft.com/en-us/library/aa480021.aj1soa01(en-us,msdn.10).gif" mce_src="http://msdn2.microsoft.com/en-us/library/aa480021.aj1soa01(en-us,msdn.10).gif"&gt;&lt;BR&gt;&lt;STRONG&gt;&lt;FONT face=Arial size=1&gt;Figure 3. A &lt;A href="http://msdn.microsoft.com/architecture/soa" mce_href="http://msdn.microsoft.com/architecture/soa"&gt;Service-Oriented Architecture&lt;/A&gt; as told in the &lt;A href="http://msdn2.microsoft.com/en-us/architecture/aa480021.aspx" mce_href="http://msdn2.microsoft.com/en-us/architecture/aa480021.aspx"&gt;MS Architecture Journal (January, 2004)&lt;/A&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&lt;BR&gt;&lt;BR&gt;Former silos like company CRM, ERP, and every line of business (LOB) application, are expected to enable their functions to the others for synergy and mutual profit. The SOA challenge is scattered in five major problems to address:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo3"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&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&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;Federated Identity and Access&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;: How to manage the authentication and authorization systems in a centralized way, available for every application? Once the user logs in, how to propagate his identity to every service? How to treat external customers with respect to internal users? As just another role or maybe a completely different policy should be considered?&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo3"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&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&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;Federated Data&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;. How to keep the distributed repositories synchronized? How to gently gather enterprise entities by data aggregation? Which levels of redundancy are reasonable? How to deal with offline situations?&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo3"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&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&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;Business Processes&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;. Service-oriented components are granular pieces combinable in business workflows. Thus, every service could be seen as an activity to be executed in a definite order and upon definite conditions. The workflow engine becomes a sort of infrastructure piece in a SOA.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo3"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&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&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;Service-oriented components&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;. There are four tenets that the pieces must comply with, to meet the SOA goals: explicit boundaries, autonomy, contract sharing, and policy-based compatibility. Those premises are better discussed at &lt;A href="http://msdn.microsoft.com/architecture/default.aspx?pull=/library/en-us/dnbda/html/SOADesign.asp" mce_href="http://msdn.microsoft.com/architecture/default.aspx?pull=/library/en-us/dnbda/html/SOADesign.asp"&gt;http://msdn.microsoft.com/architecture/default.aspx?pull=/library/en-us/dnbda/html/SOADesign.asp&lt;/A&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo3"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&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&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;Integrated User Experience&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;. What does an SOA UI look like? There is a new range of UI frameworks around the concept of composed applications. We can find examples of them in CRM solutions and Web portal engines, where the UI is built through a combination of simpler, connected UI components.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;The &lt;st1:place w:st="on"&gt;&lt;st1:PlaceName w:st="on"&gt;MSDN&lt;/st1:PlaceName&gt; &lt;st1:PlaceName w:st="on"&gt;Architecture&lt;/st1:PlaceName&gt; &lt;st1:PlaceType w:st="on"&gt;Center&lt;/st1:PlaceType&gt;&lt;/st1:place&gt; provides a complete reference about these capabilities: &lt;A href="http://msdn.microsoft.com/architecture/solutions_architecture/default.aspx" mce_href="http://msdn.microsoft.com/architecture/solutions_architecture/default.aspx"&gt;http://msdn.microsoft.com/architecture/solutions_architecture/default.aspx&lt;/A&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H6 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Where Software Architecture Goes from Here&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/H6&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;&lt;BR&gt;While now concepts like patterns and SOA became or are becoming mainstream, software architecture continues evolving and expanding to new spaces. Because of space, we cannot discuss some other software architecture trends which build on SOA, like model-driven architecture (MDA) or software factories, but you can find more information at &lt;A href="http://msdn.microsoft.com/architecture/factories/default.aspx" mce_href="http://msdn.microsoft.com/architecture/factories/default.aspx"&gt;http://msdn.microsoft.com/architecture/factories/default.aspx&lt;/A&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;However,&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;there are two particular topics, not yet massively embraced, but watched very closely by the industry. (Usually, &lt;I style="mso-bidi-font-style: normal"&gt;the industry&lt;/I&gt; is interpreted as the most important companies, IT analysts, and global system integrators.) They are:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo4"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&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&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;Software as a Service (SaaS)&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;. A new software delivery model, where companies don’t really hold their line-of-business (LOB) software bits, but only its right of use. That way, a new concept of software provider emerges (the so-called &lt;I style="mso-bidi-font-style: normal"&gt;SaaS provider&lt;/I&gt;). Clearly, from the enterprise perspective, the inclusion of such software implies a certain impact. How to combine an SaaS application, for instance, in the company’s SOA? How to manage identities, workflows, and so on? From the provider perspective: a &lt;I style="mso-bidi-font-style: normal"&gt;multi-tenant issue&lt;/I&gt; arises. If the provider is &lt;I style="mso-bidi-font-style: normal"&gt;renting&lt;/I&gt; the software - its infrastructure -, to more than one enterprise customer, how can they enable further customization? Consider as examples various database schema; country policies that impact business processes, and other customer-specific modification. Perhaps even more pertinent, how to scale the environment for a growing number of tenants? The &lt;st1:place w:st="on"&gt;&lt;st1:PlaceName w:st="on"&gt;MSDN&lt;/st1:PlaceName&gt; &lt;st1:PlaceName w:st="on"&gt;Architecture&lt;/st1:PlaceName&gt; &lt;st1:PlaceType w:st="on"&gt;Center&lt;/st1:PlaceType&gt;&lt;/st1:place&gt; granted this topic its own space: &lt;A href="http://msdn.microsoft.com/architecture/saas/default.aspx" mce_href="http://msdn.microsoft.com/architecture/saas/default.aspx"&gt;http://msdn.microsoft.com/architecture/saas/default.aspx&lt;/A&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.25in; TEXT-INDENT: -0.25in; mso-list: l2 level1 lfo4"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&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&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;Web 2.0&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;. Another area of architecture research is how to get the most of the &lt;I style="mso-bidi-font-style: normal"&gt;writable Web&lt;/I&gt;, Web based on participation. We talk about the Web ads, blogs, wikis, and other implementations. Those participative applications have existed for a while. The point is how companies can benefit from them, merging these kinds of community applications into their enterprise architecture. How to offer “the long tail” of those goods and services, each of which individually may not be the most wanted (possibly the least), but surely all of them together are becoming important in terms of revenue.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H6 style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;&lt;FONT size=3&gt;Conclusion&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/H6&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;BR&gt;Some pundits wonder if being an architect is a condition they are born with or if it’s something acquirable with discipline and practice. In Microsoft, at the Architecture Strategy Team (AST) we are convinced that being an architect is a condition you can gain. SkyScrapr, &lt;A href="http://www.skyscrapr.net/" mce_href="http://www.skyscrapr.net/"&gt;&lt;FONT color=#800080&gt;http://www.skyscrapr.net/&lt;/FONT&gt;&lt;/A&gt;, is a community space for aspiring architects to share ideas, common knowledge, experiences, and - most of all - to discuss architectural issues.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Here we have reviewed how software architecture evolved from what software engineering was realizing about its existence.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;The first software architects were &lt;I style="mso-bidi-font-style: normal"&gt;de facto&lt;/I&gt; architects, in the sense that nobody officially granted them such titles. It was just a common perception, a sort of consensus.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 11pt"&gt;But now software architecture is leaving behind its alchemist stage to become a real scientific discipline. Microsoft is contributing with the generation of a common space, an architecture collective community to make this real.&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1051393" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/diegumzone/archive/tags/Aspiring+Solution+Architects/default.aspx">Aspiring Solution Architects</category></item><item><title>Architecture Best Practices</title><link>http://blogs.msdn.com/diegumzone/archive/2006/10/30/architecture-best-practices.aspx</link><pubDate>Mon, 30 Oct 2006 05:42:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:900219</guid><dc:creator>diegumzone</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/diegumzone/comments/900219.aspx</comments><wfw:commentRss>http://blogs.msdn.com/diegumzone/commentrss.aspx?PostID=900219</wfw:commentRss><description>&lt;P&gt;&lt;FONT face="Times New Roman" color=#000080 size=5&gt;&amp;nbsp;In&amp;nbsp;&lt;/FONT&gt; &lt;A href="http://www.skyscrapr.net/blogs/solution/archive/2006/07/30/248.aspx" mce_href="http://www.skyscrapr.net/blogs/solution/archive/2006/07/30/248.aspx"&gt;"Last Call To Design Patterns"&lt;/A&gt; we described design patterns as "reusable solutions for frequent problems". It's all about thoughtful approaches to avoid common pitfalls&lt;/P&gt;
&lt;P&gt;And, actually, Patterns are just one of a set of disciplines which help us to achieve software easy to understand and maintain. But, as PhD. Joe Hummel states in his seventh installment of his series "Architecting Smart Client Applications" on "Architectural Best Practices", best practices come at many levels (statement, method, class, architecture, process)&lt;/P&gt;
&lt;P&gt;Despite, as Hummel says, "nothing beats experience" as the best teacher for best practices, he offers an awesome sets of resources and suggested readings, books and&amp;nbsp;links to&amp;nbsp;get the walk shorter&lt;/P&gt;
&lt;P&gt;And there's more, because then the author addresses seven improvement areas and discusses each of them in further detail. They are&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Security thru Threat Modeling&lt;/STRONG&gt;. Which are our application vulnerabilities and how much exploitable are they?&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Improved Design with Design Patterns&lt;/STRONG&gt;. How can we avoid reinvent the wheel in order to solve already solved problems?&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Design for Performance&lt;/STRONG&gt;, but without using &lt;STRONG&gt;Correctness&lt;/STRONG&gt; as an afterthought&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Predictability&lt;/STRONG&gt; (of bottlenecks or other aftermaths) and &lt;STRONG&gt;Application Behavior Insight&lt;/STRONG&gt; with &lt;STRONG&gt;Instrumentation&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Adequate Usage of Debug Features&lt;/STRONG&gt; without interfering with the Release build&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Proper Diagnostic of Exception Causes&lt;/STRONG&gt; with a Correct &lt;STRONG&gt;Exception Handling&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Smart Documentation&lt;/STRONG&gt; as automated as possible&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The author explains the mindsets behind every improvement area and actions to take, showing how Visual Studio 2005, Windows Management, Instrumentation (WMI), the Microsoft Enterprise Library and many other third parties tools (Log4Net, NDoc, etc) can help us to&amp;nbsp;apply best practices painlessly&lt;/P&gt;
&lt;P&gt;You can&amp;nbsp;spend your time just coding, being that way a developer&lt;/P&gt;
&lt;P&gt;Or you can also learn in greater detail all .NET APIs, CLR policies for security, threading, memory usage, being that way a senior developer&lt;/P&gt;
&lt;P&gt;Or you can watch this webcast, learn about best practices, apply them consciously&amp;nbsp;wherever they are necessary, being that way a respectable Software Architect!!&lt;/P&gt;
&lt;P&gt;Why to be satisfied with less?&lt;/P&gt;
&lt;P&gt;Come on, click here and raise your bar&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msevents.microsoft.com/cui/eventdetail.aspx?eventID=1032280466&amp;amp;Culture=en-US" mce_href="http://msevents.microsoft.com/cui/eventdetail.aspx?eventID=1032280466&amp;amp;Culture=en-US"&gt;Best Practices for Developing N-Tier Applications&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=900219" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/diegumzone/archive/tags/Aspiring+Solution+Architects/default.aspx">Aspiring Solution Architects</category></item><item><title>Passing Data Between Layers and/or Tiers</title><link>http://blogs.msdn.com/diegumzone/archive/2006/10/26/passing-data-between-layers-and-tiers.aspx</link><pubDate>Thu, 26 Oct 2006 08:34:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:875437</guid><dc:creator>diegumzone</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/diegumzone/comments/875437.aspx</comments><wfw:commentRss>http://blogs.msdn.com/diegumzone/commentrss.aspx?PostID=875437</wfw:commentRss><description>&lt;P&gt;&lt;FONT style="BACKGROUND-COLOR: #deb887" face=Garamond color=#000080 size=5&gt;&amp;nbsp;While&amp;nbsp;&lt;/FONT&gt; we were commenting some high-level strategies for data-access in a &lt;A class="" title="Data Access Strategies" href="http://blogs.msdn.com/diegumzone/archive/2006/10/17/about-data-access.aspx" mce_href="http://blogs.msdn.com/diegumzone/archive/2006/10/17/about-data-access.aspx"&gt;previous article&lt;/A&gt;, we mentioned a popular pattern used to interchange information between &lt;A class="" title="3-Tier, 3-Layer, MVC: a Trio of Famous Trios" href="http://blogs.msdn.com/controlpanel/blogs/3-Tier,%203-Layer,%20MVC:%20a%20Trio%20of%20Famous%20Trios" mce_href="http://blogs.msdn.com/controlpanel/blogs/3-Tier, 3-Layer, MVC: a Trio of Famous Trios"&gt;layers or tiers&lt;/A&gt;. We are talking about the &lt;A class="" title="Data Transfer Object" href="http://msdn.microsoft.com/architecture/solutions_architecture/data/default.aspx?pull=/library/en-us/dnpatterns/html/DesDTO.asp" mce_href="http://msdn.microsoft.com/architecture/solutions_architecture/data/default.aspx?pull=/library/en-us/dnpatterns/html/DesDTO.asp"&gt;Data Transfer Object (DTO) pattern&lt;/A&gt;. As the &lt;A class="" title="Patterns &amp;amp; Practices" href="http://msdn.microsoft.com/practices" mce_href="http://msdn.microsoft.com/practices"&gt;MS Patterns &amp;amp; Practices&lt;/A&gt;'&amp;nbsp;book &lt;A class="" title="Enterprise Solution Patterns" href="http://msdn.microsoft.com/architecture/default.aspx?pull=/library/en-us/dnpatterns/html/Esp.asp" mce_href="http://msdn.microsoft.com/architecture/default.aspx?pull=/library/en-us/dnpatterns/html/Esp.asp"&gt;"Enterprise Solution Patterns"&lt;/A&gt;&amp;nbsp;states, this&amp;nbsp;solution strategy&amp;nbsp;helps to reach&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Reduced number of remote calls&lt;/LI&gt;
&lt;LI&gt;Improved performance&lt;/LI&gt;
&lt;LI&gt;Hidden internals&lt;/LI&gt;
&lt;LI&gt;Discovery of business objects&lt;/LI&gt;
&lt;LI&gt;Testability&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;But, because nothing is for free in this life, at a cost of&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Possible class explosion&lt;/LI&gt;
&lt;LI&gt;Additional computation&lt;/LI&gt;
&lt;LI&gt;Aditional codding effort&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Is there any way to mitigate the risks, while still reaching its benefits? The .NET platform answers this fundamental question with &lt;A class="" title="Efficient Coding With Strongly Typed DataSets" href="http://msdn.microsoft.com/architecture/solutions_architecture/data/default.aspx?pull=/msdnmag/issues/04/12/DataPoints/default.aspx" mce_href="http://msdn.microsoft.com/architecture/solutions_architecture/data/default.aspx?pull=/msdnmag/issues/04/12/DataPoints/default.aspx"&gt;Typed-DataSets&lt;/A&gt;: collections of custom classes backed as ADO.NET's DataSets. Technically speaking, &lt;A class="" title="Efficient Coding With Strongly Typed DataSets" href="http://msdn.microsoft.com/architecture/solutions_architecture/data/default.aspx?pull=/msdnmag/issues/04/12/DataPoints/default.aspx" mce_href="http://msdn.microsoft.com/architecture/solutions_architecture/data/default.aspx?pull=/msdnmag/issues/04/12/DataPoints/default.aspx"&gt;Typed-DataSets&lt;/A&gt; are extended DataSets ready to work specifically with a specific type, being able to validate we aren't using anything but such type in compile-time&lt;/P&gt;
&lt;P&gt;So, what we usually express like this, working with ordinary, untyped DataSets&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;//-- Untyped DataSet&lt;BR&gt;string sCoName =&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; oDs.Tables["Customers"].Rows[0]["CompanyName"].ToString();&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;We can abbreviate and validate against the DB schema at compile-time with typed DataSets with a sentence like&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;//-- Strongly typed DataSet&lt;BR&gt;string sCoName = oDs.Customers[0].CompanyName;&amp;nbsp;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;As you can see, there's no need to&amp;nbsp;lookup tables, because&amp;nbsp;a typed-dataset's&amp;nbsp;called Customers is actually a table; there's no need to&amp;nbsp;explicitly access Rows or Columns through indexers, because we have available properties (like CompanyName in the above example) with the same name and type as DB table columns&lt;/P&gt;
&lt;P&gt;Because they are DataSets, typical features like filtering, sorting, searching and other powerful DataSet capabilities are still available at no charge. But best of all, Visual Studio 2005 provides facilities for creating Typed-DataSets directly from DB tables, just by dragging and dropping&amp;nbsp;them from the Server Explorer&lt;/P&gt;
&lt;P&gt;Furthermore, Visual Studio 2005 creates for us a Table Adapter: a Data-Access layer component which moves data back and force between the Data Tier (i.e. the Database) and the Typed-DataSet. There are TONS of coding time saved because Visual Studio 2005 generates, by default, basic CRUD (for Create-Retrieve-Update-Delete) methods when generating the Table Adapter for us. We can, in turn, add our own specific data-access methods like GetCustomersByProvinceId(), etc&lt;/P&gt;
&lt;P&gt;For those who believes I could be exagerating&amp;nbsp;a little, I would like to invite them to watch Brian Noyes's webcast &lt;A class="" title="Implementing a Data Access Layer with the Visual Studio 2005 Dataset Designer " href="http://msevents.microsoft.com/cui/WebCastEventDetails.aspx?EventID=1032301476&amp;amp;EventCategory=5&amp;amp;culture=en-US&amp;amp;CountryCode=US" mce_href="http://msevents.microsoft.com/cui/WebCastEventDetails.aspx?EventID=1032301476&amp;amp;EventCategory=5&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;"Implementing a Data Access Layer with the Visual Studio 2005 Dataset Designer"&lt;/A&gt;. Brian, solution architect from IDesign, is a MS Regional Director, author of several books and magazine articles on .NET applications&lt;/P&gt;
&lt;P&gt;I also recommend the &lt;A class="" title="Patterns &amp;amp; Practices" href="http://msdn.microsoft.com/practices" mce_href="http://msdn.microsoft.com/practices"&gt;MS Patterns &amp;amp; Practices&lt;/A&gt;'&amp;nbsp;&lt;A class="" title="Enterprise Solution Patterns" href="http://msdn.microsoft.com/architecture/default.aspx?pull=/library/en-us/dnpatterns/html/Esp.asp" mce_href="http://msdn.microsoft.com/architecture/default.aspx?pull=/library/en-us/dnpatterns/html/Esp.asp"&gt;"Enterprise Solution Patterns"&lt;/A&gt;&amp;nbsp;chapter called &lt;A class="" title="Implementing Data Transfer Object in .NET with a Typed DataSet" href="http://msdn.microsoft.com/architecture/solutions_architecture/data/default.aspx?pull=/library/en-us/dnpatterns/html/ImpDTOtypedDataSet.asp" mce_href="http://msdn.microsoft.com/architecture/solutions_architecture/data/default.aspx?pull=/library/en-us/dnpatterns/html/ImpDTOtypedDataSet.asp"&gt;Implementing Data Transfer Object in .NET with a Typed DataSet&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Enjoy it!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=875437" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/diegumzone/archive/tags/Aspiring+Solution+Architects/default.aspx">Aspiring Solution Architects</category></item><item><title>Data Access Strategies</title><link>http://blogs.msdn.com/diegumzone/archive/2006/10/17/about-data-access.aspx</link><pubDate>Tue, 17 Oct 2006 08:34:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:834206</guid><dc:creator>diegumzone</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/diegumzone/comments/834206.aspx</comments><wfw:commentRss>http://blogs.msdn.com/diegumzone/commentrss.aspx?PostID=834206</wfw:commentRss><description>&lt;P&gt;&lt;FONT face=Garamond color=#000080 size=5&gt;&amp;nbsp;We&amp;nbsp;&lt;/FONT&gt; have seen in the post about &lt;A class="" title="3-Tier, 3-Layer, MVC: a Trio of Famous Trios" href="http://www.skyscrapr.net/blogs/solution/archive/2006/10/08/349.aspx" mce_href="http://www.skyscrapr.net/blogs/solution/archive/2006/10/08/349.aspx"&gt;3-Layer architectures&lt;/A&gt;, that the Data Access Layer isn't the persistence repository, but a set of strategies for accessing it&lt;BR&gt;&lt;BR&gt;The challenge you as an architect have to face when designing this layer is multiple:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;How much possible is the RDBMS being replaced for a competitor? This possibility is usually low on traditional enterprises, but&amp;nbsp;on independent software vendors (ISV) and other software companies is frequent the need for developing a solution compliant with several RDBMS -Oracle, IBM DB/2, MS SQL Server, MySql- in order to easily accomodate to what the customer already has&lt;/LI&gt;
&lt;LI&gt;How frequent can the database schema change? As the business evolves and the application needs to consider more data, the possibility increases&lt;/LI&gt;
&lt;LI&gt;How can we be sure that incoming requests from the business layer have the user already authenticated?&lt;/LI&gt;
&lt;LI&gt;How can we design a layer reusable from different applications?&lt;/LI&gt;
&lt;LI&gt;Are we accessing just one database? If not, how to guarantee integrity in multipart transactions? (NOTE: we discussed about Two Phase Commit &lt;A class="" title="Two-Phase Commit (2PC): Coordinating Transactions in Distributed Environments" href="http://www.skyscrapr.net/blogs/solution/archive/2006/08/14/273.aspx" mce_href="http://www.skyscrapr.net/blogs/solution/archive/2006/08/14/273.aspx"&gt;here&lt;/A&gt;)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;In his sixth session, Ph.D. Joe Hummel offers his guidance in order to better address these topics, with an approach based on &lt;A class="" title="Last Call to Design Patterns" href="http://www.skyscrapr.net/blogs/solution/archive/2006/07/30/248.aspx" mce_href="http://www.skyscrapr.net/blogs/solution/archive/2006/07/30/248.aspx"&gt;Design Patterns&lt;/A&gt; like the Data Access Object (usually mentioned as DAO), an agent which hides the complexities&amp;nbsp;in the conversation with the repository (connectors, connector pools, tables, commands and possibly DataSet and other mid-level components). The DAO at the Data-Access Layer, interchanges information with the Business and upper layers thru &lt;A class="" title="Data Transfer Object" href="http://msdn.microsoft.com/architecture/default.aspx?pull=/library/en-us/dnpatterns/html/DesDTO.asp" mce_href="http://msdn.microsoft.com/architecture/default.aspx?pull=/library/en-us/dnpatterns/html/DesDTO.asp"&gt;Data Transfer Objects (DTO)&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;Hummel, as usual, doesn't imposse his solution but just shows&amp;nbsp;some possible answers, explaining design decisions to take into account in front of different scenarios. Some of them:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Should we design our DTOs reflecting exactly our business entities? What happens later with reusability?&lt;/LI&gt;
&lt;LI&gt;Should our data-access layer expose use case-driven, high-level&amp;nbsp;methods, or the typical per-table CRUD methods? (for Create /&amp;nbsp;Retrieve / Update / Delete)&lt;/LI&gt;
&lt;LI&gt;Can we apply Dynamic SQL directly from the application? What about security, performance in such case? Eventually can we call stored procedures? So, what if we need a data-access layer compliant with several database engines?&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Together with data-access best practices, Hummel analyses what architects did in three different case studies. But he also shows examples of SQL injection attacks and how to protect&amp;nbsp;from them&lt;BR&gt;&lt;BR&gt;Before finishing, the presenter provides recommendations for those who wants to design a data-access layer easy to change as new applications appear or as database schema changes&lt;BR&gt;&lt;BR&gt;So, don't stay there looking this, click below and watch now&lt;BR&gt;&lt;BR&gt;&lt;A class="" title="MSDN Webcast: Architecting Desktop Applications with 2.0 (Part 06 of 15): Designing the Data Access Tier" href="http://msevents.microsoft.com/cui/eventdetail.aspx?eventID=1032280464&amp;amp;Culture=en-US" mce_href="http://msevents.microsoft.com/cui/eventdetail.aspx?eventID=1032280464&amp;amp;Culture=en-US"&gt;MSDN Webcast: Architecting Desktop Applications with 2.0 (Part 06 of 15): Designing the Data Access Tier&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;After finishing, you are also invited to visit the &lt;A class="" href="http://msdn.microsoft.com/architecture/solutions_architecture/data/" mce_href="http://msdn.microsoft.com/architecture/solutions_architecture/data/"&gt;Data Access&amp;nbsp;knowledge base&amp;nbsp;at the Microsoft Solution Architecture Center&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=834206" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/diegumzone/archive/tags/Aspiring+Solution+Architects/default.aspx">Aspiring Solution Architects</category></item><item><title>3-Tier, 3-Layer, MVC: a Trio of Famous Trios</title><link>http://blogs.msdn.com/diegumzone/archive/2006/10/09/3_2D00_Tier_2C00_-3_2D00_Layer_2C00_-MVC_3A00_-a-Trio-of-Famous-Trios.aspx</link><pubDate>Mon, 09 Oct 2006 07:58:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:807362</guid><dc:creator>diegumzone</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/diegumzone/comments/807362.aspx</comments><wfw:commentRss>http://blogs.msdn.com/diegumzone/commentrss.aspx?PostID=807362</wfw:commentRss><description>&lt;P&gt;&lt;FONT style="BACKGROUND-COLOR: #deb887" face=Garamond color=#000080 size=5&gt;&amp;nbsp;Contemporary&amp;nbsp;&lt;/FONT&gt; applications are being based on three popular architectural approaches. They are&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;3-layered architecture&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;3-tier architecture&lt;/STRONG&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Model-View-Controller architecture&lt;/STRONG&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;There exists certain degree of confusion between all the three approaches. Mostly the first two are often referred as if they were the same one (see at &lt;A class="" href="http://en.wikipedia.org/wiki/Three-tier_%28computing%29" target=_blank mce_href="http://en.wikipedia.org/wiki/Three-tier_%28computing%29"&gt;Wikipedia&lt;/A&gt;). This can happen, possibly, because the three approaches aren't antagonistic. Actually, is pretty possible to find applications where the three are present. So let's dedicate some words to each of them&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;3-Layered Architecture&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;This approach implies a division of responsibilities in logical components. They are:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Presentation&lt;/STRONG&gt;, where input forms and results are rendered&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Business&lt;/STRONG&gt;, or also &lt;STRONG&gt;Domain Logic&lt;/STRONG&gt;, where core application logic lives. Here it's all about business nouns: Customers, Invoices, Purchases, etc. No explicit references to rendering mechanisms or persistence ones are made here&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Data Access&lt;/STRONG&gt;, where all those concerns related with persistence mechanisms (database connections, tables, records, etc) take place&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Although a physical distribution of these or other application components can arise, this is not mandatory. Actually the benefits this architecture style brings are &lt;EM&gt;maintenance&lt;/EM&gt; and &lt;EM&gt;reusability&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Maintenance&lt;/EM&gt;, because every layer comprises a set of few, cohesive APIs (the Presentation layer, APIs like WinForms, or ASP.NET, maybe Atlas; the Data Access layer, possibly ADO.NET, System.Xml; the Business layer probably can be almost agnostic of platform APIs, except the basic ones like Collections, etc)&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Reusability&lt;/EM&gt; is possible as we can add a new presentation layer for mobile devices, change the persistence mechanism by another database, possibly some static data in XML; but changes in one layer shouldn't impact on the others&lt;/P&gt;
&lt;P&gt;For a deeper discussion on 3-Layered Architecture, I suggest the chapter ad hoc at the book Enterprise Solution Patterns (MS Patterns and Practices): &lt;A href="http://msdn.microsoft.com/architecture/default.aspx?pull=/library/en-us/dnpatterns/html/ArcThreeLayeredSvcsApp.asp"&gt;http://msdn.microsoft.com/architecture/default.aspx?pull=/library/en-us/dnpatterns/html/ArcThreeLayeredSvcsApp.asp&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;3-Tier Architecture&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;In this approach, we privilege a physical division of activities. Let's see:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Client&lt;/STRONG&gt; (&lt;EM&gt;aka&lt;/EM&gt; &lt;STRONG&gt;Front-end&lt;/STRONG&gt;, &lt;STRONG&gt;Channels&lt;/STRONG&gt;), consistent in a set of different hardware and software infrastructure where the application user interface (UI) can be executed&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Application Server&lt;/STRONG&gt; (&lt;EM&gt;aka&lt;/EM&gt; &lt;STRONG&gt;Middleware&lt;/STRONG&gt;), ranging from just one server up to a farm of them, where client requirements arrive through transport and message protocols (HTTP, SMTP, SOAP and other XML-based, etc)&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Back-end&lt;/STRONG&gt;, a set of heterogeneous supporting infrastructures. We can find examples like databases (for persistence ends), or complex legacy systems on a mainframe infrastructure&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The application server here plays a key role as a concentrator of low-level services (communication, security, etc), thus joining different channels in their access to enterprise back-ends&lt;/P&gt;
&lt;P&gt;This approach brings &lt;EM&gt;Scalability&lt;/EM&gt;, &lt;EM&gt;Centralized Security&lt;/EM&gt; and &lt;EM&gt;Fault Tolerance&lt;/EM&gt;. A better explanation of this approach is available in the same book, at &lt;A href="http://msdn.microsoft.com/architecture/default.aspx?pull=/library/en-us/dnpatterns/html/ArcThreeTieredDistribution.asp"&gt;http://msdn.microsoft.com/architecture/default.aspx?pull=/library/en-us/dnpatterns/html/ArcThreeTieredDistribution.asp&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;Model-View-Controller&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;We have already reviewed this behavioral architecture pattern at Starting with Model/View/Controller (MVC) Architecture Pattern (&lt;A href="http://www.skyscrapr.net/blogs/solution/archive/2006/08/07/262.aspx"&gt;http://www.skyscrapr.net/blogs/solution/archive/2006/08/07/262.aspx&lt;/A&gt;). In brief words, this time the three components are&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;The View&lt;/STRONG&gt;, although it seems that we are talking about the Presentation layer of the 3-Layered architecture, or the Client of the 3-Tier architecture, this version of view just carry presentation logic without event handling. Such later responsibility belongs to&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;The Controller&lt;/STRONG&gt;, a component which receives Actor actions thru the View and motivates System responses in the same way envisioned in the Use Case document (a two column document enlisting stimulus/responses). These responses almost always involve&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;The Model&lt;/STRONG&gt;, the status of the system, its business entities and the business rules which govern itself&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;This pattern is very useful to comprehend and implement behavioral aspects of the user interface, and its relationship with the rest of the system. It permits &lt;EM&gt;keep low the coupling&lt;/EM&gt; between UI technologies and business logic together with persistence mechanisms. A deeper discussion is available at &lt;A href="http://msdn.microsoft.com/architecture/default.aspx?pull=/library/en-us/dnpatterns/html/ArcThreeTieredDistribution.asp"&gt;http://msdn.microsoft.com/architecture/default.aspx?pull=/library/en-us/dnpatterns/html/ArcThreeTieredDistribution.asp&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Conclusion&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;As said above, these three approaches allow us a better understanding and organization of components. Both logical and physically speaking. Although they help us gain different features like Reusability or Scalability, they can perfectly be present in a same implementation&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=807362" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/diegumzone/archive/tags/Aspiring+Solution+Architects/default.aspx">Aspiring Solution Architects</category></item><item><title>Layered Applications: Let's Talk About Business</title><link>http://blogs.msdn.com/diegumzone/archive/2006/10/02/Layered-Applications_3A00_-Let_2700_s-Talk-About-Business.aspx</link><pubDate>Mon, 02 Oct 2006 08:12:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:780440</guid><dc:creator>diegumzone</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/diegumzone/comments/780440.aspx</comments><wfw:commentRss>http://blogs.msdn.com/diegumzone/commentrss.aspx?PostID=780440</wfw:commentRss><description>&lt;P&gt;&lt;FONT style="BACKGROUND-COLOR: #deb887" face=Garamond color=#000080 size=5&gt;&amp;nbsp;I&amp;nbsp;&lt;/FONT&gt; remember a time when applications were just end to end programs, collections of lines of code with no distinction between presentation,&amp;nbsp;domain logic&amp;nbsp;and data access. Such kind of applications is remembered as &lt;EM&gt;spaghetti code&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Fortunately nowadays enterprise applications are made in a better organized way: Layered&amp;nbsp;Architectures helped reach that goal, separating in a clear and clean way the presentation logic from the domain logic, and at the same time,&amp;nbsp;from the data-access code as well&lt;/P&gt;
&lt;P&gt;Some month ago we started commenting a webcast series on Architecting Modern Applications, hosted by PhD Joe Hummel. This time is the turn of the &lt;STRONG&gt;Business Layer&lt;/STRONG&gt;. In his fifth webcast, Hummel starts by revisiting the MVC pattern his series is about, showing where a business tier fits in the holistic picture&lt;/P&gt;
&lt;P&gt;Then, he explains the Business Layer in depth, the need for it and the expected benefits (no, I don't gonna tell you: I want to encourage you to watch the webcast). But wait, because there's more&lt;/P&gt;
&lt;P&gt;It follows an examination of the business tier in three case studies, and it's amazing how different teams implement a same idea&amp;nbsp;in different ways, emphasizing different features in each case. Hummel explains each project background, showing how the application executes, some implemented code samples and, the most important, explaining the pros and contras of each approach&lt;/P&gt;
&lt;P&gt;I strongly recommend you to check the three&amp;nbsp;cases and think what you would take of everyone&lt;/P&gt;
&lt;P&gt;The webcast finishes with a revealing discussion about Application Frameworks. Because developing enterprise applications is hard and critical issues arise, frameworks aid to speed development up, reaching higher production rates&lt;/P&gt;
&lt;P&gt;Particularly two wanted cases are covered&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Object / Relational Mappers, those are, frameworks to solve the impedance mismatch between business objects and relational tables. Here you'll know some of available ones for the .NET platform&lt;/LI&gt;
&lt;LI&gt;Rocky Lhotka's Component-based, Scalable, Logical Architecture (CSLA), a very famous framework, used in numberous world class projects, available for different versions of .NET framework and other platforms, and analysis material of Lhotka's Business Objects books series&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Surely we will devote some space to discuss a little further both and other kinds of application frameworks. In the meanwhile c'mon, join us and let's watch Hummel's&lt;/P&gt;
&lt;P&gt;&lt;A class=stdLink onclick="javascript: wwe=window.open('http://msevents.microsoft.com/cui/eventdetail.aspx?eventID=1032280009&amp;amp;Culture=en-US','wwe','toolbar=yes,location=yes,directories=no,status=no,menubar=yes,scrollbars=yes,resizable=yes,width=800,height=600,left=0,top=0'); wwe.focus(); return false;" href="http://msevents.microsoft.com/cui/eventdetail.aspx?eventID=1032280009&amp;amp;Culture=en-US" mce_href="http://msevents.microsoft.com/cui/eventdetail.aspx?eventID=1032280009&amp;amp;Culture=en-US"&gt;&lt;STRONG&gt;MSDN Webcast: Architecting Desktop Applications with 2.0 (Part 05 of 15): Designing the Business Tier&lt;/STRONG&gt;&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=780440" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/diegumzone/archive/tags/Aspiring+Solution+Architects/default.aspx">Aspiring Solution Architects</category></item><item><title>Aims and Means of Asymmetric Cryptography</title><link>http://blogs.msdn.com/diegumzone/archive/2006/09/12/752315.aspx</link><pubDate>Wed, 13 Sep 2006 01:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:752315</guid><dc:creator>diegumzone</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/diegumzone/comments/752315.aspx</comments><wfw:commentRss>http://blogs.msdn.com/diegumzone/commentrss.aspx?PostID=752315</wfw:commentRss><description>&lt;P&gt;&lt;FONT style="BACKGROUND-COLOR: #deb887" face=Garamond color=#000080 size=5&gt;&amp;nbsp;Usually&amp;nbsp;&lt;/FONT&gt; we tend to center the concept of Authentication to mere users, through and exhibited password as a &lt;EM&gt;credential&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;But beyond the user, how to be sure about authenticity of other &lt;EM&gt;assets&lt;/EM&gt;? For example, how can we be sure about, once the user is authenticated, every received message, claiming in its header that it comes&amp;nbsp;from his session is not a fake message created somewhere else (another user, a BOT, ...)? Even being originated from the expected user, what does guarantee us that the message wasn't change in its walk toward the server?&lt;/P&gt;
&lt;P&gt;I'll explain this risk better: an always present&amp;nbsp;&lt;EM&gt;threat&lt;/EM&gt; in networking is the so-known &lt;EM&gt;Man in the Middle&lt;/EM&gt;. Someone intercepts our message, filters it by&amp;nbsp;changing sensitive parts (a transfer amount, a destination account, ...) and resends his altered version. The server receives it, and because it came from a proven identity&amp;nbsp;session, it accepts it without noticing it was changed&lt;/P&gt;
&lt;P&gt;How can we deal with this reality?&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Public-Key Cryptography&lt;/STRONG&gt; (aka &lt;STRONG&gt;Asymmetric-Key Cryptography&lt;/STRONG&gt;)&amp;nbsp;comes to rescue us. This algorithm works this way:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The issuer, before sending his message, applies to it a function consisting in calculating a &lt;EM&gt;digest&lt;/EM&gt; based on the message itself (a hashing value, a checksum, etc) 
&lt;LI&gt;This digest is encrypted by applying a key the sender owns, only. This key is well-known as the &lt;STRONG&gt;Private Key&lt;/STRONG&gt; 
&lt;LI&gt;The encrypted&amp;nbsp;digest is then added to the original message, together with a key the receiver will need in order to decrypt it. This new key, publicly&amp;nbsp;available, is consequently known as &lt;STRONG&gt;Public Key&lt;/STRONG&gt; 
&lt;LI&gt;The receiver, so, calculates the digest and compares his result with the decrypted received digest&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Yes, the man in the middle could spy the message but he can't alter it in any way: if so he did, the digest would change and he doesn't have the private key to encrypt the new digest. So the conclusion is that every message, with both calculated and received digests matching, belongs to the original user and it's unadulterated. This algorithm, so, is useful to avoid two threats: &lt;EM&gt;message repudiation&lt;/EM&gt; by the original user (for instance, after issuing a purchase) and tampering by anyone in the middle (to&amp;nbsp;avoid message interception, there are another countermeasures)&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Asymmetric-Key Cryptography&lt;/STRONG&gt; examples are anywhere, even though we don't notice that. For instance, &lt;EM&gt;.NET's Code-Access Security&amp;nbsp;(CAS)&lt;/EM&gt; capability permits us, among lots of other features, &lt;A href="http://msdn.microsoft.com/architecture/solutions_architecture/identity/default.aspx?pull=/library/en-us/cpguide/html/cpconworkingwithstrongly-namedassemblies.asp"&gt;guaranteeing that an assembly can't be replaced&lt;/A&gt;. How? Pretty easy:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The assembly provider has his private key. Whit that key he digitally &lt;A href="http://msdn.microsoft.com/architecture/solutions_architecture/identity/default.aspx?pull=/library/en-us/cptools/html/cpgrfAssemblyGenerationUtilityAlexe.asp"&gt;signs the assembly&lt;/A&gt; 
&lt;LI&gt;The assembly, that way, contains a digital signature based on its name, version and optionally culture information. This signature is encrypted with the private key and enclosed, together&amp;nbsp;with the public key, into the assembly (which becomes a &lt;EM&gt;strong-named assembly&lt;/EM&gt;) 
&lt;LI&gt;When, during execution time, the CLR loads the assembly in order to execute it, first it calculates the assembly signature based on assembly evidences (its name, etc). Then, with the enclosed public key, it decrypts the encrypted signature and compares it with the calculated one 
&lt;LI&gt;If they don't match, a &lt;FONT face="Courier New"&gt;SecurityException&lt;/FONT&gt; will be issued. Thus, in the case that anyone other than the original provider changes the assembly, be sure that the signatures won't match... with the solely exception of... 
&lt;LI&gt;Yes! Except the case the fake provider uses his own pair of keys (private and public). But .NET's security strategy prevents that thru the &lt;EM&gt;Microsoft .NET Framework 2.0 Configuration Tool (Administrative Tools)&lt;/EM&gt;. That tool allows is to provide which public keys will be trusted 
&lt;LI&gt;That way, we just need to load there the public key of our trusted provider&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Another example of &lt;STRONG&gt;Asymmetric-Key Cryptography&lt;/STRONG&gt; usage, more agnostic, is present in &lt;EM&gt;WS-Security&lt;/EM&gt; specification, applicable, for instance, thru &lt;EM&gt;X.509 certificates&lt;/EM&gt;. This is available in &lt;EM&gt;&lt;A href="http://msdn.microsoft.com/architecture/solutions_architecture/identity/default.aspx?pull=/msdnmag/issues/06/08/securitybriefs/default.aspx#S4"&gt;Windows Communication Foundation (WCF)&lt;/A&gt;&lt;/EM&gt; as well in the transient &lt;EM&gt;&lt;A href="http://msdn.microsoft.com/architecture/solutions_architecture/identity/default.aspx?pull=/library/en-us/dnpag2/html/wss_ch3_impmlsx509_wse30.asp"&gt;Web Services Enhancements (WSE) version 3&lt;/A&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Finishing this article, I want to mention a variation of the &lt;STRONG&gt;Public-Key Cryptography&lt;/STRONG&gt;,&amp;nbsp;intended not for &lt;EM&gt;non repudiation&lt;/EM&gt; purposes but for &lt;EM&gt;information disclosure&lt;/EM&gt; avoidance. The variation consists in using -the sender- a public key to encrypt the whole message. The receiver, in this occasion, is the only who owns the private key, necessary to decrypt the message received. This variation avoids unauthorized inspection of incoming messages, but doesn't prevent &lt;EM&gt;spoofing&lt;/EM&gt; of the sender identity&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=752315" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/diegumzone/archive/tags/Aspiring+Solution+Architects/default.aspx">Aspiring Solution Architects</category></item><item><title>How Sure Are You About Security?</title><link>http://blogs.msdn.com/diegumzone/archive/2006/09/07/743844.aspx</link><pubDate>Thu, 07 Sep 2006 07:48:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:743844</guid><dc:creator>diegumzone</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/diegumzone/comments/743844.aspx</comments><wfw:commentRss>http://blogs.msdn.com/diegumzone/commentrss.aspx?PostID=743844</wfw:commentRss><description>&lt;P&gt;&lt;FONT style="BACKGROUND-COLOR: #deb887" face=Garamond color=#000080 size=5&gt;&amp;nbsp;Even&amp;nbsp;&lt;/FONT&gt; though it´s surprising, an important number of architects don't worry enough about security aspects&lt;/P&gt;
&lt;P&gt;Talking with some of them, they considered that Security is a topic so complex -they are right in this appreciation- that developers don't have to care about it, just delegating its concerns to infrastructure pieces like firewalls and&amp;nbsp;directory servers&lt;/P&gt;
&lt;P&gt;I admit that keeping developers focused in business logic is always desirable,&amp;nbsp;however I consider that security infrastructure, by itself, is an important part of the security strategy. Surely not the only one&lt;/P&gt;
&lt;P&gt;My grand mother always said me &lt;EM&gt;"we can't trust in anyone anymore"&lt;/EM&gt; and I didn't understand why she thought like that. Until I started making my first enterprise web applications and suffered my first attacks from unknown people. Those attacks were categorized in what is known as &lt;EM&gt;STRIDE&lt;/EM&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Spoofing&lt;/STRONG&gt; identity. An example of identity spoofing is illegally accessing and then using another user's authentication information, such as username and password&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Tampering&lt;/STRONG&gt; with data. Data tampering involves the malicious modification of data. Examples include unauthorized changes made to persistent data, such as that held in a database, and the alteration of data as it flows between two computers over an open network, such as the Internet&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Repudiation&lt;/STRONG&gt;. Repudiation threats are associated with users who deny performing an action without other parties having any way to prove otherwise—for example, a user performs an illegal operation in a system that lacks the ability to trace the prohibited operations. Nonrepudiation refers to the ability of a system to counter repudiation threats. For example, a user who purchases an item might have to sign for the item upon receipt. The vendor can then use the signed receipt as evidence that the user did receive the package&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Information disclosure&lt;/STRONG&gt;. Information disclosure threats involve the exposure of information to individuals who are not supposed to have access to it—for example, the ability of users to read a file that they were not granted access to, or the ability of an intruder to read data in transit between two computers&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Denial&lt;/STRONG&gt; of service. Denial of service (DoS) attacks deny service to valid users—for example, by making a Web server temporarily unavailable or unusable. You must protect against certain types of DoS threats simply to improve system availability and reliability&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Elevation&lt;/STRONG&gt; of privilege. In this type of threat, an unprivileged user gains privileged access and thereby has sufficient access to compromise or destroy the entire system. Elevation of privilege threats include those situations in which an attacker has effectively penetrated all system defenses and become part of the trusted system itself, a dangerous situation indeed&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Because one of the missions of application architecture is dealing with complexity, particularly the complexity of dealing with such kinds of atacks, there exist a technique called Threat Modeling, consisting in &lt;EM&gt;acting like the enemy&lt;/EM&gt;, thus anticipating his/her attacks in order to avoid them&amp;nbsp;by opposing countermeassures&lt;/P&gt;
&lt;P&gt;How to start learning about security topics? In his fourth presentation, Joe Hummel requests just one hour and half of your time to&amp;nbsp;make you learn about security without assuming you have any kind of basic knowledge. As usual, he starts from the beginning, telling you about the security tenets and defining the most important terms, like Principal, Identity and&amp;nbsp;Role. Benefits and&amp;nbsp;disadvantages of using embedded security schemas like Windows', versus coding our own schema. Considerations when storing passwords or any other kind of secret (private information). .NET support for securing applications, different choices with pros and cons analysis&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msevents.microsoft.com/cui/WebCastEventDetails.aspx?EventID=1032280005&amp;amp;EventCategory=5&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;Architecting Desktop Applications with 2.0 (Part 04 of 15)&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Once you finish, I suggest you continue your exploration with what Patterns &amp;amp; Practices has to say about Threat Modeling practices&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/architecture/solutions_architecture/identity/default.aspx?pull=/library/en-us/dnpag2/html/tmwa.asp"&gt;Threat Modeling Web Applications&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Enjoy it!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=743844" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/diegumzone/archive/tags/Aspiring+Solution+Architects/default.aspx">Aspiring Solution Architects</category></item><item><title>An Old Antipattern: "Too Much Architecture"</title><link>http://blogs.msdn.com/diegumzone/archive/2006/08/28/727917.aspx</link><pubDate>Mon, 28 Aug 2006 08:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:727917</guid><dc:creator>diegumzone</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/diegumzone/comments/727917.aspx</comments><wfw:commentRss>http://blogs.msdn.com/diegumzone/commentrss.aspx?PostID=727917</wfw:commentRss><description>&lt;P&gt;&lt;FONT style="BACKGROUND-COLOR: #deb887" face=Garamond color=#000080 size=5&gt;&amp;nbsp;At&amp;nbsp;&lt;/FONT&gt; least in Software Engineering, but I guess the same applies to other sciences, there are ideas, concepts and paradigms easy to understand, but not so easy to implement in practice&lt;BR&gt;&lt;BR&gt;I remember, for instance, I understood very quickly OOP. It was pretty clear that Bird, Dog and Cat were subclasses of Animal, and that SiberianHusky or Labrador where subclasses of Dog, while Parrot was a subclass of Bird&lt;BR&gt;&lt;BR&gt;But then I was unable to write a piece of OO code that takes a number and tells if the number was even or odd. I mean, I did it. But I made a one-class application with a method, not so different of a simple C language function &lt;FONT face="Courier New"&gt;bool IsEven(int a)&lt;/FONT&gt;&lt;BR&gt;&lt;BR&gt;I have no doubts about the need of OO and its benefits over structured programming. I want to highlights that at the same time OO design is by far more complex&lt;BR&gt;&lt;BR&gt;So Design Patterns came to the rescue, with&amp;nbsp;a toolbox of pre-molded components, still unfinished from the point of view of our application, but with a very clear separation of roles and well established relationships&amp;nbsp;between participant classes of every pattern&lt;BR&gt;&lt;BR&gt;First, I borrowed the GoF book. Then I bought it. I read all the more than 20 patterns, Creational, Structural, Behavioral... I understood everything again. I figured out scenarios where to apply each one of them...&lt;BR&gt;&lt;BR&gt;And again when I had to start... Wow... Again my mind empty. It seemed clearer at the book&lt;BR&gt;&lt;BR&gt;After that first stage, I entered to the next one: try to make patterns fit everywhere. The more patterns in, the better... I made beatifuly complex applications I was&amp;nbsp;unable, in best cases,&amp;nbsp;to explain. In the rest of cases, I was unable to finish them&lt;BR&gt;&lt;BR&gt;Of course, again, the problem wasn't Dessign Patterns, but how easy was&amp;nbsp;for me falling in the temptation of abuse. Like with any medicine: who exagerates the dosis, turns the remedy into a new disease&lt;BR&gt;&lt;BR&gt;Nowadays I see two other adictions:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The need to adopt immediately the new version of everything (.NET framework, Spring framework, Eclipse, etc) without actually considering if its benefits are helpful for us (in several cases, without knowing which those benefits are. I insist: I'm not against modernisation but the fact of forgetting the last instance business goal (the forest) while being so concentrated just in a&amp;nbsp;new technology (the tree) 
&lt;LI&gt;The other adiction seems to be Object/Relational Mapping (or O/R-M). As with OOP, design patterns, etc I repeat over and over: I'm not against O/R-M! What I want to mean is: if then, as I saw in so much forum threads, yo will be wondering how to do to avoid loading a complete&amp;nbsp;object graph of nested elements just to show a simple table in an ASP.NET page, check how ready you were to get on O/R-M and if it's true that nowadays mappers are the solution you need or just a new problem you gotta solve&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;I want to show a dialogue kept in an architect forum at &lt;A href="http://msdn.microsoft.com/architecture"&gt;MSDN&lt;/A&gt;: please click here&lt;BR&gt;&lt;BR&gt;&lt;A href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=630361&amp;amp;SiteID=1"&gt;http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=630361&amp;amp;SiteID=1&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;The post is about problems derivated of O/R-M abuse. Just an example in thousands about how "easy" is to choose "the difficult one"&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=727917" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/diegumzone/archive/tags/Aspiring+Solution+Architects/default.aspx">Aspiring Solution Architects</category></item><item><title>Fighting Against Coupling: a Moment for Reflection</title><link>http://blogs.msdn.com/diegumzone/archive/2006/08/21/710402.aspx</link><pubDate>Mon, 21 Aug 2006 10:12:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:710402</guid><dc:creator>diegumzone</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/diegumzone/comments/710402.aspx</comments><wfw:commentRss>http://blogs.msdn.com/diegumzone/commentrss.aspx?PostID=710402</wfw:commentRss><description>&lt;P&gt;&lt;FONT style="BACKGROUND-COLOR: #deb887" face=Garamond color=#000080 size=5&gt;&amp;nbsp;One &lt;/FONT&gt;&amp;nbsp;of the most recurrent problems we have to face, as aspiring architects, is the problem of&amp;nbsp; dealing with highly adaptable applications for different environments&lt;/P&gt;
&lt;P&gt;For instance, we need to build an application able to access a DB/2 database in one environment, an Oracle database in another one, and an XML file in a third one. The data access logic in the two first cases is pretty similar, but the ADO.NET classes are not the same on each case. The XML file need also special logic (not based in SQL)&lt;/P&gt;
&lt;P&gt;The problem with the command new is that we need to explicitly write the name of the class we want to instantiate. So we need to put different names on each case and recompile the application before deploy it&lt;/P&gt;
&lt;P&gt;But, thus, the application could drive to an untenable maintenance. This is a limitation of Static (explicit) Instantiation. Fortunately, .NET provides a mechanism that enables another level of object creation: Dynamic Instantiation&lt;/P&gt;
&lt;P&gt;Dynamic Instantiation is possible thanks to a feature called Reflection. Reflection permits us to see the execution environment as first class objects. That way, we can load assemblies (for instance, taken their name from strings), we can instance classes located inside them (again, taken their names from strings or any other indirect mechanism)&lt;/P&gt;
&lt;P&gt;So, let's go ahead and start building highly adaptable applications&lt;/P&gt;
&lt;P&gt;But… wait… One moment… Strings, ha? So… where can we put those strings? That's a very good question that everybody ask. And be sure that most of them considers that there's no answer for that question, so they build, first of all, some infrastructure classes to support configuration properties, in order to read them while loading the application&lt;/P&gt;
&lt;P&gt;This is an unnecessary step, because .NET 2.0 comes with built-in support for configuration settings. This support, in .NET 1.1, was available through the Configuration Management Application Block (CMAB), later called Configuration Application Block in the Enterprise Library 1.0&lt;/P&gt;
&lt;P&gt;But in .NET 2.0 all that functionality is embedded and extended in the Visual Studio 2005 IDE. In fact, every project can define its own execution settings. Application settings can be thought in two levels&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Application-bound&lt;/STRONG&gt;: typically connection strings, timeout intervals, server names, etc. In general terms, parameters available for every user (not dependent on him/her). Usually this parameters can vary from an installation to another one. But, in each one, they vary very little&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;User-bound&lt;/STRONG&gt;: this kind of settings are kept in a per-user basis. Examples of this are: color and layout preferences, last five issued queries, etc. In few words, user settings are suitable to keep the last session state along different executions. Thus, high changeability is expected for these settings&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;What .NET 2.0 does with what the user loads as settings in Visual Studio 2005 is to create on the fly a class called Settings (in the project namespace), containing all the parameters defined by the user as read/write properties. Although usually properties are defined as strings, we can specify the type of everyone. Every serializable class can be the type of any property to be set&lt;/P&gt;
&lt;P&gt;We can change these properties during execution, and save all the bundle thanks the method Settings.Default.Save(). Application-bound properties will be stored in the same directory where its project assembly is, under the name&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;lt;assembly name&amp;gt;.exe.config&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;On the other hand, user-bound properties will stay at&lt;BR&gt;&lt;BR&gt;&lt;FONT face="Courier New" size=2&gt;C:\Documents and Settings\&amp;lt;username&amp;gt;\Local Settings\Application Data\&amp;lt;assembly name&amp;gt;\user.config&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;So, what we have learned so far is that we can, via application settings, indicates classes to be dynamically instanced by Reflection&lt;/P&gt;
&lt;P&gt;So far so good, but if you don't, I have a question: if the application won't know until runtime which class will be instanced, how can we, at development time, invoke methods on that still unknown class!?&lt;/P&gt;
&lt;P&gt;Without answering this question, all the benefits of using Reflection to avoid coupling are useless. But, once again, fortunately there exist a technique to address this issue: Interface-based programming&lt;/P&gt;
&lt;P&gt;Interface-based programming, aka "Programming against Interfaces" implies to define a clear set of properties and methods that must be present in the class to be known during execution. That's the idea of interfaces: not concrete logic but placeholder to be filled with concrete logic&lt;/P&gt;
&lt;P&gt;If you were wondering for a longtime about why interfaces exist, I guess this is a transcendental moment in your career. Welcome to the Truth! Say goodbye to your old folks in the club of people who don't know why interfaces exist. Have a nice stay in the club of people who already discovered why interfaces exist&lt;/P&gt;
&lt;P&gt;So, beyond jokes, we can code the application in order to talk with the defined interface and, during execution time, access to the application settings in order to get the concrete class to be instanced via Reflection&lt;/P&gt;
&lt;P&gt;Bibliography usually call interface implementers as "pluggable components". Now…&lt;/P&gt;
&lt;P&gt;How do you see if we check again all of these concepts, but in a deeper level, including demos? It's great, isn't it?&lt;/P&gt;
&lt;P&gt;Join this webcast, the third in the series of Architecting n-tier applications with Joe Hummel&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msevents.microsoft.com/cui/eventdetail.aspx?eventID=1032280003&amp;amp;Culture=en-US"&gt;&lt;FONT face=Verdana size=2&gt;&lt;STRONG&gt;Creating Dynamic and Configurable Applications&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Hasta la vista&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=710402" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/diegumzone/archive/tags/Aspiring+Solution+Architects/default.aspx">Aspiring Solution Architects</category></item><item><title>Two-Phase Commit (2PC): Coordinating Transactions in Distributed Environments</title><link>http://blogs.msdn.com/diegumzone/archive/2006/08/14/699219.aspx</link><pubDate>Mon, 14 Aug 2006 11:11:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:699219</guid><dc:creator>diegumzone</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/diegumzone/comments/699219.aspx</comments><wfw:commentRss>http://blogs.msdn.com/diegumzone/commentrss.aspx?PostID=699219</wfw:commentRss><description>&lt;P&gt;&lt;FONT style="BACKGROUND-COLOR: #f5f5dc" face=Garamond color=#000080 size=5&gt;&lt;FONT style="BACKGROUND-COLOR: #deb887"&gt;&amp;nbsp;There&lt;/FONT&gt;&lt;FONT style="BACKGROUND-COLOR: #deb887"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt; was a time when applications were isolated as a common&amp;nbsp;issue, and having each one just one repository was usual&lt;/P&gt;
&lt;P&gt;Sometimes, we needed to update diverse records to&amp;nbsp;the repository,&amp;nbsp;let's say a purchase order header with its purchased items. Those times, it was necessary that all that business&amp;nbsp;movement was made in an "all or nothing" manner. That is, every record should be saved, or elsewhere no record saved at all was the best contingent option (raising an exception to advice that something went wrong and the business movement couldn't be saved). The fact is that, saving some records and leaving the rest unsaved drives to inconsistencies&lt;/P&gt;
&lt;P&gt;So, to reflect such "all or nothing" policy, the concept of &lt;STRONG&gt;transaction&lt;/STRONG&gt; emerged. Transactions are said to be &lt;EM&gt;acid&lt;/EM&gt; :-) in the sense that they are&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Atomic: a transaction must completely occur, or must not occur at all. As we commented before&lt;/LI&gt;
&lt;LI&gt;Consistent: a transaction is the transition between two consistent states in the application and/or its data&lt;/LI&gt;
&lt;LI&gt;Isolated: a transaction is independent of other transactions occurring at the same time&lt;/LI&gt;
&lt;LI&gt;Durable: the state of the application or its data after a transaction occurrence, only can be changed by other transaction&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Up to here, nothing uncommon. In the context of single back-end solutions (i.e. a database), if the back-end is transaction-enabled, applications just demarcate where the transactional scope starts and where it finishes. Saving for them, if abnormal conditions arise,&amp;nbsp;the power to roll back a transaction to the former consistent state&lt;/P&gt;
&lt;P&gt;But, nowadays, applications aren't isolated anymore. Today we encounter, as an usual feature, that enterprise applications are built upon building blocks. Let's imagine, for instance, a call center application able to add or remove services to a customer account, resend bills or invoices, accept&amp;nbsp;different kind of&amp;nbsp;payments (credit card, debit,&amp;nbsp;banking transfer, etc)&lt;/P&gt;
&lt;P&gt;Call center applications&amp;nbsp;are frequently&amp;nbsp;"composite application": they expose consolidated GUIs from disparate applications, and invoke several back-ends (either directly, or through a middleware)&lt;/P&gt;
&lt;P&gt;So, imagine a customer has his/her account blocked (no services available) because unpaid bills. The customer calls the call center, wanting to correct his situation in order to get services back. The employee retrieve his debt, tells the customer and offers available payment mechanisms&lt;/P&gt;
&lt;P&gt;The customer choose bank account transfer so...&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;A debit on his account must be made (thus,&amp;nbsp;online access from the company to the bank must be presente)&lt;/LI&gt;
&lt;LI&gt;A credit on the company account, also (implying online access from the company to its bank)&lt;/LI&gt;
&lt;LI&gt;A payment record (through the collection system)&lt;/LI&gt;
&lt;LI&gt;The restablishment of services, that could imply posting commands to several back-ends (cellular phone, internet, cable TV, etc)&lt;/LI&gt;
&lt;LI&gt;Countable movements (accessing the accounting system)&lt;/LI&gt;
&lt;LI&gt;Auditing records (through the auditing system)&lt;/LI&gt;
&lt;LI&gt;...&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;In the past, such kind of operations were asynchronous. I mean, the company accepted the payment as conditional, and updated every back end through batch processing. In the meanwhile, the customer still didn't get his services back until the last critical back-end was succesfully updated&lt;/P&gt;
&lt;P&gt;Because of that, compensation processes had to be considered for the sack of consistency&lt;/P&gt;
&lt;P&gt;But, why not to think in including everything in a transaction? Because when just one back-end is involved, the transaction scope is managed by the back-end itself. But when, as in this case, several back-ends are involved, we need a superior instance able to establish a transactional scope, enrol the&amp;nbsp;involved tiers and coordinate the transaction in the distributed environment&lt;/P&gt;
&lt;P&gt;Fortunately when a problem is so common, the probability of finding a solution is greater. And that rule is met in this case: let me introduce Two-Phase Commit (2PC for short)&lt;/P&gt;
&lt;P&gt;2PC is a standard protocol for transaction coordination in distributed environments. Thus, we can think in 2PC-enabled back-ends, ready to handle a transaction locally, but following directions from a foreign coordinator&lt;/P&gt;
&lt;P&gt;For a deep explanation of Two-Phase Commit protocol, I suggest to visit this link &lt;A href="http://en.wikipedia.org/wiki/Two-phase_commit_protocol"&gt;http://en.wikipedia.org/wiki/Two-phase_commit_protocol&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;In the Microsoft platform, the Distributed Transaction Coordinator (DTC) is a Windows service capable to coordinate 2PC-enabled tiers (also known as XA-compliant resource managers). Here we have an interesting link to gain insight with MS DTC: &lt;A href="http://windowssdk.msdn.microsoft.com/en-us/library/ms679938.aspx"&gt;DTC Developers Guide&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;From the point of view of .NET development, .NET 2.0 brought a new namespace, System.Transactions, which made transaction-oriented services coding easier than ever. That is, System.Transactions is an abstraction level between the application logic and MS DTC as an infrastructure component. One of the best features of System.Transactions, in terms of transparency, is that this API is intelligent enough to infer that more than one back-end is involved in the transaction, and thus involving MS DTC&lt;/P&gt;
&lt;P&gt;I mean, the programming model is similar whether one only back-end participates in the transaction or we have several ones&lt;/P&gt;
&lt;P&gt;You can start learning this facility by reading an article of MSDN Magazine:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/architecture/default.aspx?pull=/msdnmag/issues/06/09/NETMatters/default.aspx"&gt;.NET Matters: Scope&amp;lt;T&amp;gt; and More&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Also, a deeper reference is here: &lt;A href="http://msdn2.microsoft.com/en-us/library/w97s6fw4.aspx"&gt;Transaction Processing&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;As a final reflection, however 2PC protocol is thought for both EAI (intra organizational) and B2B (inter enterprise) scenarios, still it's supposed that in the later won't be massively present for a while&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=699219" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/diegumzone/archive/tags/Aspiring+Solution+Architects/default.aspx">Aspiring Solution Architects</category></item><item><title>Starting with Model/View/Controller (MVC) Architecture Pattern</title><link>http://blogs.msdn.com/diegumzone/archive/2006/08/07/690518.aspx</link><pubDate>Mon, 07 Aug 2006 06:51:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:690518</guid><dc:creator>diegumzone</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/diegumzone/comments/690518.aspx</comments><wfw:commentRss>http://blogs.msdn.com/diegumzone/commentrss.aspx?PostID=690518</wfw:commentRss><description>&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&lt;FONT style="BACKGROUND-COLOR: #deb887" face=Garamond color=#000080 size=5&gt;&amp;nbsp;With&amp;nbsp;&lt;/FONT&gt; the massive advent of Internet, mobility and other network technologies, distributed programming is&amp;nbsp;more popular than ever and it's unimaginable the idea that stand alone applications can come back&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;They are gone&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;So immediately a coupling crisis appeared in distributed applications: how to avoid mentioning concrete technologies in order to keep the maintenance of distributed systems in acceptable levels of complexity. For instance, how to avoid code twice (or even more than twice) large portions of formerly desktop UI, if we need to add a web channel for home consumers, a mobile channels for executives during business trips, etc. How to provide a solution not tied to a specific database (SQL Server, Oracle, etc) or,&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;even more, able to handle small sets of data via an XML-based repository&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&lt;STRONG&gt;Model-View-Controller&lt;/STRONG&gt; (most referred as &lt;EM&gt;MVC&lt;/EM&gt;) is the name of one of the most successful architecture patterns, which address this issue. It consists in a separation of three application concerns in different logical tiers&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL style="MARGIN-TOP: 0in; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.5in; DIRECTION: ltr; unicode-bidi: embed" type=disc&gt;
&lt;LI style="MARGIN-TOP: 0px; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; mso-outline-level: 1"&gt;&lt;SPAN style="FONT-FAMILY: Verdana"&gt;The user interface (UI), that receives inputs from the user and exposes results. In this schema is referred as &lt;STRONG&gt;"the View"&lt;/STRONG&gt;, and it could be applied to the most basic text terminal, or the most advanced Pocket PC. The code of this tier deals with the specific available UI technologies&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL style="MARGIN-TOP: 0in; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.5in; DIRECTION: ltr; unicode-bidi: embed" type=disc&gt;
&lt;LI style="MARGIN-TOP: 0px; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; mso-outline-level: 1"&gt;&lt;SPAN style="FONT-FAMILY: Verdana"&gt;A tier were domain entities "live", and their status is kept, usually known as &lt;STRONG&gt;"the Model"&lt;/STRONG&gt;. It can be a database, an XML file or a whole mainframe system (accessible through communication technologies varying from propietary solutions to open standards like web services&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL style="MARGIN-TOP: 0in; MARGIN-BOTTOM: 0in; MARGIN-LEFT: 0.5in; DIRECTION: ltr; unicode-bidi: embed" type=disc&gt;
&lt;LI style="MARGIN-TOP: 0px; FONT-SIZE: 10pt; MARGIN-BOTTOM: 0px; VERTICAL-ALIGN: middle; mso-outline-level: 1"&gt;&lt;SPAN style="FONT-FAMILY: Verdana"&gt;And finally, a nexus between the View and the Model, capable to react to events from the View, transforming the signal in a request for the model. Clear examples of this: a button click motivates a purchase invoice printing. The tier which handles this transform is called &lt;STRONG&gt;"the Controller"&lt;/STRONG&gt; and basically contains use cases logic&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;The first benefit of this decomposition is the fact that the View and the Model are no more coupled. And with this, we can append more channels to our application (ATMs, etc) with no impact in the data access logic. Or conversely, we can change or extend the data repository with, for instance, aggregation services, immediately available for every channel at the same time&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;There are several uncoupling degrees of MVC in practice. Still the View can stay coupled with the Controller or vice versa, and the same applies for the Controller and the Model&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;So the question, again, is… &lt;EM&gt;where to start from?&lt;/EM&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;And the answer again is: from &lt;STRONG&gt;Joe Hummel&lt;/STRONG&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;In his second webcast in the series "Modern Software Development: Use Visual Studio 2005", he starts showing how Visual Studio 2005, although&amp;nbsp;being a very productive tool from the perspective both the developer and the business, it imposes "its" architecture. And architecture quick, easy to understand, but not so easy to extent&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;So he revisits the MVC pattern, unleashing there some popular GoF patterns embedded (those are abstract, low level patterns compiled in a book that is still a best seller; its author are known as "the Gang of Four" or simply GoF, and so the term "GoF patterns")&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;Hummel explains very clearly how these patterns enforce the whole MVC architecture, and applies them to the raw initial outcome that Visual Studio 2005 produces loosing, as the patterns go by, the coupling among the three layers&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;Still better, the author recommends when/where not to use them, in order to not to over design the application. This could increase unnecessarily its complexity… and its later maintenance&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;Hummel concludes by mentioning two MS application blocks to put this concepts in practice in a productive and elegant manner (unfortunately because of a matter of time, no demos are offered)&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;So, go for a coffee, seat comfortable, turn up the volume and start watching&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&lt;A href="http://msevents.microsoft.com/cui/WebCastEventDetails.aspx?EventID=1032278736&amp;amp;EventCategory=5&amp;amp;culture=en-US&amp;amp;CountryCode=US"&gt;&lt;STRONG&gt;Architecting Desktop Applications with 2.0: Design Patterns for GUI Applications&lt;/STRONG&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"&gt;Enjoy it!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=690518" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/diegumzone/archive/tags/Aspiring+Solution+Architects/default.aspx">Aspiring Solution Architects</category></item><item><title>Last Call to Design Patterns</title><link>http://blogs.msdn.com/diegumzone/archive/2006/07/30/683075.aspx</link><pubDate>Sun, 30 Jul 2006 10:44:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:683075</guid><dc:creator>diegumzone</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/diegumzone/comments/683075.aspx</comments><wfw:commentRss>http://blogs.msdn.com/diegumzone/commentrss.aspx?PostID=683075</wfw:commentRss><description>&lt;P&gt;&lt;FONT style="BACKGROUND-COLOR: #deb887" color=#000080&gt;&lt;FONT face=Garamond size=5&gt;&amp;nbsp;When&lt;/FONT&gt; &lt;/FONT&gt;&amp;nbsp;planing the architecture of an application, the architect has a powerful set of tools available: Design Patterns&lt;/P&gt;
&lt;P&gt;Design Patterns are reusable solutions for frequent problems, upon different contexts. The more you know about them, the more self-confidence you gain while doing your architecture. And possibly (I'm not saying probably, yet) the more robust your results&lt;/P&gt;
&lt;P&gt;What is the risk when an aspiring architect recently knew about design patterns? Overarchitecture of his designs, felling himself obliged to apply the new acquired knowledge&lt;/P&gt;
&lt;P&gt;A common mistake around this is considering that a solution which has design patterns applied is better than other which has less or doesn't have at all. Quantity doesn't imply quality. It's all about the opportunity to apply them when it's useful and relevant&lt;/P&gt;
&lt;P&gt;So, taking into account this reminder, where to start?&lt;/P&gt;
&lt;P&gt;There is a book that was a hit and established a "before and after" in software engineering: "&lt;EM&gt;Design Patterns: Elements of Reusable...&lt;/EM&gt;". Its authors are also known as the "&lt;EM&gt;Gang of Four&lt;/EM&gt;", or simply the GoF&lt;/P&gt;
&lt;P&gt;Starting from this book wasn't bad, but in some cases drove to inadequate application of the concepts, because patterns there are very very fundational&lt;/P&gt;
&lt;P&gt;I want to suggest another starting point, better focused in application contexts (web, smart client, SOA) and concerns (security, data access, etc), because applying GoF patterns to real world enterprise class applications is not an intuitive task (it requires patience to become experienced)&lt;/P&gt;
&lt;P&gt;The place I say is "&lt;STRONG&gt;Patterns and Practices Patterns repository&lt;/STRONG&gt;"&lt;BR&gt;&lt;A href="http://msdn.microsoft.com/practices/topics/patterns/default.aspx"&gt;http://msdn.microsoft.com/practices/topics/patterns/default.aspx&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=683075" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/diegumzone/archive/tags/Aspiring+Solution+Architects/default.aspx">Aspiring Solution Architects</category></item></channel></rss>