<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>.Net Smoothie &#187; Architecture</title>
	<atom:link href="http://www.richardbushnell.net/category/architecture/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.richardbushnell.net</link>
	<description></description>
	<lastBuildDate>Wed, 30 Dec 2009 11:42:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>My own ASP.Net MVP Framework</title>
		<link>http://www.richardbushnell.net/2008/02/03/my-own-aspnet-mvp-framework/</link>
		<comments>http://www.richardbushnell.net/2008/02/03/my-own-aspnet-mvp-framework/#comments</comments>
		<pubDate>Sun, 03 Feb 2008 13:59:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[ASP.Net]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[MVP]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[framework]]></category>

		<guid isPermaLink="false">http://richardbushnell.net/index.php/2008/02/03/my-own-aspnet-mvp-framework/</guid>
		<description><![CDATA[So, I did it! I finally did it! I wanted to publish my ideas for a framework, and I did. You can find it on CodePlex at http://www.codeplex.com/aspnetmvp. Go have a look. I really want to know what you think. Now, I know there are a million and one frameworks for the web, so I [...]]]></description>
			<content:encoded><![CDATA[
<!-- using Like-Button-Plugin-For-Wordpress [v4.2] | by http://www.gb-world.net -->
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.richardbushnell.net%2F2008%2F02%2F03%2Fmy-own-aspnet-mvp-framework%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="false" style="border:none; overflow:; width:450px; height:30px"></iframe>
<!-- using Like-Button-Plugin-For-Wordpress [v4.2] | by http://www.gb-world.net -->
<br><p>So, I did it! I finally did it!</p>
<p>I wanted to publish my ideas for a framework, and I did. You can find it on CodePlex at <a href="http://www.codeplex.com/aspnetmvp">http://www.codeplex.com/aspnetmvp</a>.</p>
<p>Go have a look. I really want to know what you think.</p>
<p><span id="more-44"></span></p>
<p>Now, I know there are a million and one frameworks for the web, so I don&#8217;t intend on trying to make anything  big out of this. But I also know that my customers, usually decent developers with basic ASP.Net knowledge, are constantly asking me for guidance for creating ASP.Net projects. To avoid repeating myself over and over, this project gives them a good starting point. When something better comes along, I can point them to that instead.</p>
<p>I can also use the project as a place for creating new ideas, like</p>
<ul>
<li>WF integration and reusable workflows, like shopping carts or the &#8220;hub and spoke UI pattern&#8221;.</li>
<li>plug-ins and skins, like Dotnetnuke</li>
</ul>
<p>I definitely do not want to reinvent the wheel. But I believe that there are currently loads of great ideas which could be used in a framework, but just require a little bit of effort to make them simple to use (e.g. UrlRewriting). Most of the developers I know want those extra features without having to spend a lot of time learning a new technology. This framework should be for them.</p>
<p>Instead of totally turning the heads of such developers around, asking them to use a completely new system (e.g. the ASP.Net MVC framework), this framework is meant to provide helpful stuff without stopping you from doing things the way you want (favicons and robots.txt files, for example). It gives you guidance on where to put your CSS files, master pages, scripts, and images. It also provides a way to do testing and project management in a sensible and flexible way. It uses the MVP pattern, but that isn&#8217;t mandatory. You can still write code in webforms if you really want to, and then you can refactor them out quite easily later.</p>
<p>I based my MVP implementation on some of the code from the Microsoft Patterns and Practices Web Client Software Factory. However, they made extensive use of the ObjectBuilder and attributes, which I found to be overengineering and too complex. So, as an alternative, I recreated the ideas using generics. I found it works well, and doesn&#8217;t have the performance overhead or the learning curve required with WCS.</p>
<p>The code currently uses the AdventureWorks Database, which you will need to install first before using the code. You can find the database on CodePlex here.</p>
<p>I&#8217;m currently working on another top-secret project, so I won&#8217;t really be spending much time on this. If you&#8217;re interested in discussing ideas or doing something with the project, let me know. I&#8217;d love to hear what you have to offer.</p>
<p>Otherwise, head on over to the <a href="http://www.codeplex.com/aspnetmvp">ASP.Net MVP Framework site</a>, and check out the code.</p>
<p>Oh, and until the lawyers call and ask me to change the name, let&#8217;s just leave it as it is.</p>
<p>P.S. I forgot to mention a &#8220;feature&#8221;. The Yahoo UI Framework has some great stuff for CSS, including grid layouts and css reset files. I integrated that too. I put it in the default theme. It means you don&#8217;t have to do much work to get your stylesheets to lay out your webpages well.</p>
<p>More to come on that later.</p>

<!-- using Like-Button-Plugin-For-Wordpress [v4.2] | by http://www.gb-world.net -->
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.richardbushnell.net%2F2008%2F02%2F03%2Fmy-own-aspnet-mvp-framework%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="false" style="border:none; overflow:; width:450px; height:30px"></iframe>
<!-- using Like-Button-Plugin-For-Wordpress [v4.2] | by http://www.gb-world.net -->
]]></content:encoded>
			<wfw:commentRss>http://www.richardbushnell.net/2008/02/03/my-own-aspnet-mvp-framework/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Are you keeping up with software development?</title>
		<link>http://www.richardbushnell.net/2008/01/08/are-you-keeping-up-with-software-development/</link>
		<comments>http://www.richardbushnell.net/2008/01/08/are-you-keeping-up-with-software-development/#comments</comments>
		<pubDate>Tue, 08 Jan 2008 06:25:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Quaility]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[changes in software development]]></category>

		<guid isPermaLink="false">http://richardbushnell.net/index.php/2008/01/08/are-you-keeping-up-with-software-development/</guid>
		<description><![CDATA[DotNetRocks, the internet talkshow for .Net developers, has a great show about development changes over the past 20 years. Carl Franklin interviews Kathleen Dollard, who has put a list of changes together, and is publishing them online. If you want to know where you currently stand in your software development, you want to listen to [...]]]></description>
			<content:encoded><![CDATA[
<!-- using Like-Button-Plugin-For-Wordpress [v4.2] | by http://www.gb-world.net -->
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.richardbushnell.net%2F2008%2F01%2F08%2Fare-you-keeping-up-with-software-development%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="false" style="border:none; overflow:; width:450px; height:30px"></iframe>
<!-- using Like-Button-Plugin-For-Wordpress [v4.2] | by http://www.gb-world.net -->
<br><p><a href="http://www.dotnetrocks.com/default.aspx" target="_blank">DotNetRocks</a>, the internet talkshow for .Net developers, has a great <a href="http://www.dotnetrocks.com/default.aspx?showNum=304" target="_blank">show about development changes</a> over the past 20 years. <a href="http://www.intellectualhedonism.com/2007/12/27/NETRocks302JeffProsiseGoesDeepOnSilverlight.aspx" target="_blank">Carl Franklin</a> interviews <a href="http://msmvps.com/blogs/kathleen/default.aspx" target="_blank">Kathleen Dollard</a>, who has put a <a href="http://msmvps.com/blogs/kathleen/archive/2007/11/14/looking-at-the-list-1-of-6-or-7.aspx" target="_blank">list of changes together</a>, and is publishing them online.</p>
<p>If you want to know where you currently stand in your software development, you want to listen to this show. You might even want to take notes.</p>
<p>If you are recruiting developers, you also should listen to this show. You could use very effectively it to find out what kind of people you are interviewing. </p>
<p>The first 10 of 60 items on Kathleen&#8217;s list of changes are:</p>
<ol>
<li>Parallel entities</li>
<li>N-Tier</li>
<li>Sheer magnitude</li>
<li>Application code generation</li>
<li>SOA (Service Oriented Architecture)</li>
<li>Semantics and canonical messages</li>
<li>Workflow</li>
<li>Rules engines</li>
<li>Aspect oriented programming</li>
<li>Impact of libraries</li>
</ol>
<p>Every software developer or architect should know at least a little about each item on this list. If you don&#8217;t, maybe you could use this to pull your career up a level.</p>

<!-- using Like-Button-Plugin-For-Wordpress [v4.2] | by http://www.gb-world.net -->
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.richardbushnell.net%2F2008%2F01%2F08%2Fare-you-keeping-up-with-software-development%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="false" style="border:none; overflow:; width:450px; height:30px"></iframe>
<!-- using Like-Button-Plugin-For-Wordpress [v4.2] | by http://www.gb-world.net -->
]]></content:encoded>
			<wfw:commentRss>http://www.richardbushnell.net/2008/01/08/are-you-keeping-up-with-software-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Qualities of a .Net Application Design</title>
		<link>http://www.richardbushnell.net/2007/12/23/qualities-of-a-dot-net-application-design/</link>
		<comments>http://www.richardbushnell.net/2007/12/23/qualities-of-a-dot-net-application-design/#comments</comments>
		<pubDate>Sun, 23 Dec 2007 11:00:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[ASP.Net]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Quaility]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[architecture software quality .net asp.net scalability]]></category>

		<guid isPermaLink="false">http://richardbushnell.net/?p=8</guid>
		<description><![CDATA[I&#8217;m often asked to produce design documents for new applications. I can&#8217;t do this without discussing the advantages and disadvantages to each part of the design. A great way to do this is to focus on the desired qualities of the system you&#8217;re trying to build. Define the qualities you are trying to achieve, and [...]]]></description>
			<content:encoded><![CDATA[
<!-- using Like-Button-Plugin-For-Wordpress [v4.2] | by http://www.gb-world.net -->
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.richardbushnell.net%2F2007%2F12%2F23%2Fqualities-of-a-dot-net-application-design%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="false" style="border:none; overflow:; width:450px; height:30px"></iframe>
<!-- using Like-Button-Plugin-For-Wordpress [v4.2] | by http://www.gb-world.net -->
<br><p>I&#8217;m often asked to produce design documents for new applications. I can&#8217;t do this without discussing the advantages and disadvantages to each part of the design. A great way to do this is to focus on the desired qualities of the system you&#8217;re trying to build. Define the qualities you are trying to achieve, and design each part of the system to match those qualities as best as possible.</p>
<p>It helps to have a list of things to consider. Here&#8217;s a list of some of the qualities you need to address for a .typical Net application:</p>
<h2></h2>
<h2>Development-Time Qualities</h2>
<ul>
<li><strong>Modifiability</strong> &#8211; (Often called &#8220;<strong>flexibility</strong>&#8220;, and especially important for agile development.) How easily can the software be modified to additional requirements and changes? Can changes be localized to as little code as possible? Do public interfaces have to change? How are the parts of the application dependent on one another? Are the most-likely-to-change areas of the application depended upon to be stable? To what extent are concerns separated?
<li><strong>Reusability</strong> &#8211; Can units of the application be reused elsewhere? Does the code fit the &#8220;DRY&#8221; principle (Don&#8217;t Repeat Yourself)? Does the system make good use of existing standards? Reusing code from other frameworks and systems can help keep testing and maintenance down, but reduce modifiability.
<li><strong>Portability</strong> &#8211; Could the system be easily ported to other platforms? This is often not an issue for most enterprise applications, as business requirements typically change more frequently than the technical platforms, and the .Net framework takes care of most of the issues. For a web application, portability could also include browser compatibility. What happens if the users suddenly receive an upgrade to their browsers?
<li><strong>Testability</strong> &#8211; How easy is it to prove that the application functions correctly, and that the various parts of the application do what they are supposed to do in isolation of one another? Can the application be tested automatically? Can the application eventually be tested easily end-to-end as part of an integration test? Can the application be load-tested?
<li><strong>Buildability</strong> &#8211; Can the application be built on systems other than those in the development environment? How often can it be built? The more often it can be built, the better. What tools can be used to do the builds? Can they implement continuous integration by building at every check-in? Which third-party controls or components are used? What part do licenses for third-party products play in the ability to build centrally?
<li><strong>Maintainability</strong> &#8211; How easy is it to understand the software for people other than the original developers? How easy is it to correct defects? Is the system documented enough to make it understandable?
<li><strong>Debugability</strong> &#8211; How easy is it to find out where and why there is an error in the system? How easy is it to find what is going wrong in a live, productive system?
<li><strong>Extensibility</strong> &#8211; How easy is it to extend the functionality of the system beyond its original specification?</li>
</ul>
<h2>Runtime Qualities</h2>
<ul>
<li><strong>Functionality</strong> &#8211; How well does the software help the users to do their work? Are there missing features which make the software useless? Does the software provide end-to-end support for a particular process?
<li><strong>Usability</strong> &#8211; How easy is it for users to understand and learn to use the software?&nbsp; Is the interface intuitive? Is there a supportive help system? Does the user interface match the users&#8217; needs? Are basic usability standards and conventions adhered to?
<li><strong>Performance</strong> &#8211; Does the system perform fast enough? How does it perform when multiple users are active? Where are the bottlenecks and latency in the system?
<li><strong>Concurrency</strong> &#8211; Is it possible for more than one user to use the system at a time? What is the performance impact of multiple sessions? Is state shared across the application, making the system unreliable?
<li><strong>Security</strong> &#8211; Does the system prevent unauthorized access or misuse? What happens if access is wrongly denied to a user? How easy can security be administrated? Does the STRIDE threat model show up any weaknesses? What is the potential outcome of a successful attack?&nbsp;
<li><strong>Integrity</strong> &#8211; This can be related to security, but it also refers to the data integrity of the system. Is the data always kept in a consistent state, or is it sometimes possible to infer different states of the system because of inconsistencies in the system? Do transactions pass the ACID test?
<li><strong>Reliability</strong> &#8211; Can the users rely on the software? Will it always perform correctly? Is it still usable at peak usage periods?
<li><strong>Availability</strong> &#8211; How often and for how long is the system available for use? How do upgrades affect its availability? Is the system meant to be used across time-zones?
<li><strong>Scalability</strong> &#8211; How does the software cope with adding more users over time? Can the system cope with an increase in the volume of data? What happens if the users start to use the system more often? Must the software scale up or can it scale out?
<li><strong>Deployability</strong> &#8211; How easy is it to deploy the initial release of the software? How easy is it to release future releases? Does software need to be replaced, or just patched? How does the deployment affect scalability?
<li><strong>Ugradability</strong> &#8211; Can a new version be deployed without stopping the normal operation of the system? What must be changed or upgraded when a new version is released? What third-party software may be upgraded which would affect the software?
<li><strong>Correctness</strong> &#8211; Does the software do exactly what was specified?
<li><strong>Conceptual Integrity</strong> &#8211; How balanced, simple, elegant, and practical is the whole system? Is there a clear vision as to what the software should do? Is the design consistent?
<li><strong>User Responsiveness</strong> &#8211; Related to performance and usability; how does the user perceive the application to be responding? Does the system stop responding for long periods of time, especially when retrieving data? Does the latency of parts of the system lead to decreased usability? Does the software use multiple threads to improve responsiveness?
<li><strong>Interoperability</strong> &#8211; How easily can the system be used with other systems?
<li><strong>Robustness</strong> &#8211; How does the system react to abnormal conditions? Does it crash, or recover gracefully? Do error messages baffle users and decrease usability?</li>
</ul>
<h2>Priorities</h2>
<p>Software qualities must always be balanced against one another. There&#8217;s no point in having performance good enough for MySpace.com if it&#8217;s not needed, for example, especially if it makes maintenance harder. Each quality has a particular importance for the system being developed. </p>
<p>In general the highest priority qualities are:</p>
<ul>
<li>Maintainability
<li>Correctness
<li>Reliability</li>
</ul>
<p>Also important for .Net Object-Oriented design are:</p>
<ul>
<li>Reusability
<li>Extensibility</li>
</ul>
<p>Most of what I focus on in my day-to-day work is focused on good maintainability and modifiability. Changes come along all the time, and the people paying for the software want them done fast. The faster you can adapt to their needs, the more they trust you, and the better your business relationship.</p>

<!-- using Like-Button-Plugin-For-Wordpress [v4.2] | by http://www.gb-world.net -->
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.richardbushnell.net%2F2007%2F12%2F23%2Fqualities-of-a-dot-net-application-design%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="false" style="border:none; overflow:; width:450px; height:30px"></iframe>
<!-- using Like-Button-Plugin-For-Wordpress [v4.2] | by http://www.gb-world.net -->
]]></content:encoded>
			<wfw:commentRss>http://www.richardbushnell.net/2007/12/23/qualities-of-a-dot-net-application-design/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

