<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://interactiveasp.net/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>Search results matching tags 'Tools' and 'Testing'</title><link>http://interactiveasp.net/search/SearchResults.aspx?a=1&amp;o=DateDescending&amp;tag=Tools,Testing&amp;orTags=0</link><description>Search results matching tags 'Tools' and 'Testing'</description><dc:language>en-US</dc:language><generator>CommunityServer 2008 (Build: 30417.1769)</generator><item><title>Visual NDepend Blows My Socks Off!</title><link>http://interactiveasp.net/blogs/natesstuff/archive/2009/02/26/visual-ndepend-blows-my-socks-off.aspx</link><pubDate>Fri, 27 Feb 2009 00:10:23 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:515</guid><dc:creator>NathanZaugg</dc:creator><description>&lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Splash_5F00_2B39B8DE.png" target="_blank"&gt;&lt;img title="Splash" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 10px 5px 0px; border-right-width: 0px" height="94" alt="Splash" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Splash_5F00_thumb_5F00_0A25FA9D.png" width="229" align="left" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I’m not easily impressed by even the best of software.&amp;#160; There is usually some little thing that ruins my user experience.&amp;#160; I tell you this so you know that what I say next is something special.&amp;#160; Visual NDepend is AWESOME!&amp;#160; Everything meet or far exceeded my expectations!&amp;#160; If you are not yet running this software, you should be!&amp;#160; This is not one of those ‘nice to have’ pieces of software like you might thing.&amp;#160; This is a must have!&amp;#160; If Microsoft was smart they would do everything they could to package this in with Visual Studio 2010.&amp;#160; &lt;/p&gt;  &lt;p&gt;What does it do? It’s hard to answer that question in a paragraph or two.&amp;#160; The basic answer is that it gives you a set of different representations of your software in such a way that you can understand the architecture and complexity.&amp;#160; This can be a huge help before undertaking large refactor efforts.&amp;#160; It also gives you an idea or the quality of the code based off of some metrics.&amp;#160; This quality score can be a really good indicator of wither your code is going to be maintainable and if it’s not it can help you get it there.&amp;#160; Before I go through the quick walkthrough of the software it’s self I’ll just say this – If you’re not paying attention to code metrics and the maintainability of the code from the earliest stages of development your likely not going to develop code that is easy to maintain.&amp;#160; And as you probably know, software maintenance is usually more than 3/4ths the cost of the software lifecycle.&amp;#160; Therefore, if you can get a build process established early and use a tool like NDepend to keep a close watch on some important metrics I can guarantee you will be creating much higher quality software than you would have otherwise.&lt;/p&gt;  &lt;h2&gt;Installation Experience&lt;/h2&gt;  &lt;p&gt;This is the best kind of install – you simply unzip the files.&amp;#160; I bet you didn’t think I would do a whole section on install when there is nothing to the install.&amp;#160; I suppose if it were any other product there would be a lot under this section.&amp;#160; &lt;/p&gt;  &lt;h2&gt;Analyze a Project&lt;/h2&gt;  &lt;p&gt;The user interface is very intuitive.&amp;#160; I installed integration with Visual Studio 2008 and .NET Reflector with minimal effort and started to analyze my assembly.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Analyzing_5F00_3087DDE8.png" target="_blank"&gt;&lt;img title="Analyzing" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="115" alt="Analyzing" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Analyzing_5F00_thumb_5F00_73EFDF4A.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/MainScreen_5F00_334D92DB.png" target="_blank"&gt;&lt;img title="Main Screen" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="442" alt="Main Screen" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/MainScreen_5F00_thumb_5F00_0E4FD262.png" width="504" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;It took a while to analyze but this particular assembly is quite large!&amp;#160; It also pulls in any referenced assemblies so the graph can be complete.&amp;#160; It allows you to specify multiple assemblies just in case you have sets of assemblies in the same project that have no direct relationship.&amp;#160; In this case I had a WCF service that would need to be added separately as it’s technically not a direct dependency.&amp;#160; Once the analysis is complete it’s INFORMATION OVERLOAD!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Analysis_5F00_4DAD85F2.png" target="_blank"&gt;&lt;img title="Analysis" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="440" alt="Analysis" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Analysis_5F00_thumb_5F00_7819B70F.png" width="504" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h2&gt;Results&lt;/h2&gt;  &lt;p&gt;There are six or seven main results to view.&amp;#160; The most obvious is the bubble chart at the top.&amp;#160; This gives you a visual representation of different aspects of the code.&amp;#160; For example it’s currently set to Method level and the metric shown is number of lines of code.&amp;#160; the larger the bubble, the larger the method is in relation to the others.&amp;#160; I can select from Method, Field, Type, Namespace or Assembly.&amp;#160; In addition there are 11 different metrics that you can plot in the bubble chart.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/BubbleChart_5F00_73370353.png" target="_blank"&gt;&lt;img title="Bubble Chart" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="298" alt="Bubble Chart" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/BubbleChart_5F00_thumb_5F00_51D75DB7.png" width="504" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;The next thing you notice is the dependency graph.&amp;#160; Unfortunately this project doesn’t have a dependency graph like in my other &lt;a title="Avoiding Circular Dependencies" href="http://interactiveasp.net/blogs/natesstuff/archive/2008/06/09/avoiding-circular-dependencies.aspx" target="_blank"&gt;blog post&lt;/a&gt;.&amp;#160; Visual Studio makes it really tough to make circular dependencies but it is possible to create them if not all of your projects are loaded into the same solution.&amp;#160; And as I said in the other post, circular dependencies are very bad!&amp;#160; It’s also good to know what references what.&amp;#160; You might be surprised to see what kind of references get worked in over time.&amp;#160; On a recent project the data layer code kept working it’s way up to the UI even though it didn’t belong there.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DependencyGraph_5F00_711A048A.png" target="_blank"&gt;&lt;img title="Dependency Graph" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="613" alt="Dependency Graph" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DependencyGraph_5F00_thumb_5F00_1B8635A8.png" width="504" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The next section is the code metric-centric part. This is my most favorite portion of the results generated and can be a real good indicator of how maintainable a codebase is.&amp;#160; Of course it’s impossible to avoid all complexities in software so you probably can’t have a perfect score with every project but you can use this information to figure out what kinds of habits you have that contribute to un-maintainable code. As you can see from the image below when you select a metric it is highlighted in the bubble chart.&amp;#160; In fact, all of these reports are “active” so anything that is relevant to another will be indicated.&amp;#160; By the way, this application has amazing performance.&amp;#160; I’m pretty sure it’s using WPF under the hood.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/CodeMetrics_5F00_08D13BF1.png" target="_blank"&gt;&lt;img title="Code Metrics" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="308" alt="Code Metrics" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/CodeMetrics_5F00_thumb_5F00_59331D64.png" width="504" border="0" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/MethodsTooBig_5F00_383FAABD.png" target="_blank"&gt;&lt;img title="Methods Too Big" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="298" alt="Methods Too Big" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/MethodsTooBig_5F00_thumb_5F00_57161E9B.png" width="504" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Another really cool feature is the Dependency Matrix.&amp;#160; This takes some practice to use but it helps identify which pieces of which assemblies access pieces of other assemblies.&amp;#160; Again, great for refactoring efforts and a good indication of how an application is put together.&amp;#160; You may have to stair at the image below for a while to figure out what it’s trying to tell you but after a while it makes perfect sense.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DependencyMatrix_5F00_6F3988F6.png" target="_blank"&gt;&lt;img title="Dependency Matrix" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="192" alt="Dependency Matrix" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/DependencyMatrix_5F00_thumb_5F00_0352A580.png" width="504" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Last, but certainly not least is the comprehensive report compiled into HTML.&amp;#160; This is the kind of thing that I’d love to see emailed to me each day, so I hope it’s easy to put this into a build process.&amp;#160; The report is awesome!&amp;#160; My favorite part of the software and I really like this software.&amp;#160; Below is the screen shot of the table of contents that is generated at the top.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/AnalysisReport_5F00_6D88BD22.png" target="_blank"&gt;&lt;img title="Analysis Report" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="404" alt="Analysis Report" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/AnalysisReport_5F00_thumb_5F00_1A9DA9F1.png" width="504" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;The only feature I didn’t get a chance to try is code coverage results.&amp;#160; I would have loved to see that in action!&amp;#160; Too bad I don’t have a project with very good code coverage results and I’d be embarrassed to find out anything in detail about my code coverage.&amp;#160; Of course &lt;a href="http://interactiveasp.net/blogs/natesstuff/archive/2008/04/23/unit-testing-philosophy-code-coverage-is-meaningless.aspx" target="_blank"&gt;code coverage isn’t everything&lt;/a&gt; but it is a useful tool when taken into context and can be made more useful with nDepend.&lt;/p&gt;  &lt;p&gt;Overall, I would give this software very high marks!&amp;#160; I can’t wait to make this part of my build process!&amp;#160; It is worth the time and money!&lt;/p&gt;  &lt;h5&gt;Links:&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a title="http://www.ndepend.com/" href="http://www.ndepend.com/"&gt;http://www.ndepend.com/&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://interactiveasp.net/blogs/natesstuff/archive/2008/04/23/unit-testing-philosophy-code-coverage-is-meaningless.aspx" href="http://interactiveasp.net/blogs/natesstuff/archive/2008/04/23/unit-testing-philosophy-code-coverage-is-meaningless.aspx"&gt;http://interactiveasp.net/blogs/natesstuff/archive/2008/04/23/unit-testing-philosophy-code-coverage-is-meaningless.aspx&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="http://interactiveasp.net/blogs/natesstuff/archive/2008/06/09/avoiding-circular-dependencies.aspx" href="http://interactiveasp.net/blogs/natesstuff/archive/2008/06/09/avoiding-circular-dependencies.aspx"&gt;http://interactiveasp.net/blogs/natesstuff/archive/2008/06/09/avoiding-circular-dependencies.aspx&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;</description></item><item><title>Avoiding Circular Dependencies</title><link>http://interactiveasp.net/blogs/natesstuff/archive/2008/06/09/avoiding-circular-dependencies.aspx</link><pubDate>Mon, 09 Jun 2008 21:45:06 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:30</guid><dc:creator>NathanZaugg</dc:creator><description>&lt;p&gt;The term &amp;quot;circular dependency&amp;quot; may be foreign to some programmers (especially if you do Java as it is a pretty common practice).&amp;nbsp; However, anyone who has done some scripting for a referential database knows that you have to run scripts in a certain order.&amp;nbsp; Running scripts out of order causes errors when you run.&amp;nbsp; The interesting trick is that if you run that same incorrectly-ordered DDL script again and again you will eventually get it to run without errors.&amp;nbsp; If you were unaware of the order being incorrect and thought to yourself in that moment &amp;quot;Stupid database!&amp;quot; then this blog post is for you!&lt;/p&gt; &lt;h3&gt;What is a circular dependency? &lt;/h3&gt; &lt;p&gt;It is simply two libraries that use each other (either directly or indirectly) as shown below:&lt;/p&gt; &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="107" alt="circular depencency" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/circular-depencency_5F00_3.jpg" width="240" border="0" /&gt;&amp;nbsp; &lt;/p&gt; &lt;h6&gt;Figure 1: Circular Dependency&lt;/h6&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/image3.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="202" alt="image" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/image3_5F00_thumb.png" width="244" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt; &lt;h6&gt;Figure 2: Complex Circular Dependency&lt;/h6&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The complexity of a circular dependency may vary.&amp;nbsp; If you are using Visual Studio and have all of your projects loaded into a single solution AND you add Project References (Right click on project -&amp;gt; Add Reference -&amp;gt; Projects Tab -&amp;gt; {Project Name}) then the IDE will not allow you to create Circular Dependencies.&amp;nbsp; In fact, this is a good practice as Visual Studio will ensure the correct build order.&amp;nbsp; &lt;/p&gt; &lt;h3&gt;Why are circular dependencies bad?&lt;/h3&gt; &lt;p&gt;Just like our Database example above, a circular dependency makes it so you can not guarantee that your application has the latest code.&amp;nbsp; That is a big deal!&amp;nbsp; Here is why:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;I make changes to Application 1 (in Figure 2)  &lt;li&gt;I build my project, The changes I made in Application 1 may or may not have gotten into Application 2 (depending on build order).&amp;nbsp; It may have taken a copy of the compiled code that was left over from the last time I built.  &lt;li&gt;Application 2 depends on this new functionality to provide services to Application 3; This functionality will not work correctly with this build.  &lt;li&gt;Application 3 may or may not depend on these same services to provide &lt;strong&gt;back&lt;/strong&gt; to Application 1&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;As you can see in this scenario, there is no such thing as a &amp;quot;correct&amp;quot; build order when there are these circular dependencies.&amp;nbsp; The only way you can arrive at the correct version of the code is to build it as many times as there are nodes in our circle.&amp;nbsp; That would mean for Figure 1 that we would need to build twice and three times for Figure 3.&amp;nbsp; Some of these dependencies can get really ugly!&amp;nbsp; Here is some actual code running in an actual company that I did analysis on some time ago using a tool called &lt;a href="http://www.structure101.com/"&gt;Structure 101&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/image9.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="150" alt="image" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/image9_5F00_thumb.png" width="143" border="0" /&gt;&lt;/a&gt; &lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/image12.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="199" alt="image" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/image12_5F00_thumb.png" width="218" border="0" /&gt;&lt;/a&gt; &lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/image15.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="196" alt="image" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/image15_5F00_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/image18.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="244" alt="image" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/image18_5F00_thumb.png" width="202" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;How do I fix circular dependencies?&lt;/h3&gt; &lt;p&gt;There are some steps to take to solve even the most complex tangles!&amp;nbsp; They all involve refactoring your code though.&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Refactor common code into a &amp;quot;base&amp;quot; dependency; I usually call this &amp;quot;&lt;em&gt;Common&lt;/em&gt;&amp;quot; (figure 3).&amp;nbsp; &lt;strong&gt;&lt;em&gt;BEST SOLUTION&lt;/em&gt;&lt;/strong&gt;  &lt;li&gt;Remove code that is unused.&amp;nbsp; In the tangles shown above many of them are using deprecated/unused code.  &lt;li&gt;Duplicate the sections of code used.&amp;nbsp; This should be seen as a &lt;strong&gt;&lt;em&gt;last resort&lt;/em&gt;&lt;/strong&gt; but given the choice between code duplication and circular dependencies, I take code duplication ever time!&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/image21.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="173" alt="image" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/image21_5F00_thumb.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;/p&gt; &lt;h6&gt;Figure 3: Refactor a Common&lt;/h6&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;Summary&lt;/h3&gt; &lt;p&gt;There are two kinds of design concepts for nTier (and other types of architectures as well) called &lt;em&gt;Logical Layout Design&lt;/em&gt; and &lt;em&gt;Physical Layout Design&lt;/em&gt;.&amp;nbsp; The Logical Layout is simply that your software occupies the same project/package but leverage different classes.&amp;nbsp; In contrast Physical Layout Design forces each tier to be separated into different Projects/Packages.&amp;nbsp; So long as we are careful to manage the dependencies between these packages from the start this is the preferable way to code.&amp;nbsp; While the logical layout does not suffer from the dependency problem eventually you may wish to break these classes apart and find that there are a lot of inner-dependency that should not exist simply because they occupied the same project.&amp;nbsp; &lt;strong&gt;Remember to keep it clean!&lt;/strong&gt;&lt;/p&gt;</description></item></channel></rss>