<?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>thinking in geek &#187; design</title>
	<atom:link href="http://joshrobb.com/blog/category/design/feed/" rel="self" type="application/rss+xml" />
	<link>http://joshrobb.com/blog</link>
	<description>tagline's are so web2.0</description>
	<lastBuildDate>Wed, 02 Jun 2010 14:47:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>[ControllerAction] and sane defaults</title>
		<link>http://joshrobb.com/blog/2007/12/11/controlleraction-and-sane-defaults/</link>
		<comments>http://joshrobb.com/blog/2007/12/11/controlleraction-and-sane-defaults/#comments</comments>
		<pubDate>Tue, 11 Dec 2007 02:04:35 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://joshrobb.com/blog/2007/12/11/controlleraction-and-sane-defaults/</guid>
		<description><![CDATA[[Ed: For anyone who's living under a bush Microsoft have released a CTP of the new ASP.NET MVC framework. ] I&#8217;m reluctant to get involved in this &#8211; but I feel like there&#8217;s another side to this story which is worth considering. Since it was first presented at altnetconf &#8211; the decision to require users1 [...]]]></description>
			<content:encoded><![CDATA[<p>[Ed: For anyone who's living under a bush Microsoft have released a CTP of the new ASP.NET MVC framework. ]</p>
<p>I&#8217;m reluctant to get involved in this &#8211; but I feel like there&#8217;s another side to this story which is worth considering.</p>
<p>Since it was first presented at altnetconf &#8211; the decision to require users<sup>1</sup> to have to specify which methods on controllers are available to be routed to ([ControllerAction]) and which view (RenderView()) to render has come in for <a href="http://www.lostechies.com/blogs/sean_chambers/archive/2007/12/08/phil-haack-posts-about-asp-net-mvc.aspx">a</a> <a href="http://tech.groups.yahoo.com/group/altnetconf/msearch?query=%5BControllerAction%5D&amp;submit=Search&amp;charset=ISO-8859-1">lot </a>of <a href="http://ayende.com/Blog/archive/2007/12/08/Configuration-over-Convention.aspx">criticism</a>.</p>
<p>Lots of the brightest and best minds in the .net world are screaming about this in various forums. Claiming that it violates:</p>
<ul>
<li> the DRY principle</li>
<li>convention over configuration</li>
<li>best practice in other frameworks</li>
<li>commonly accepted laws of physics</li>
</ul>
<p>Not one of the people complaining is going to use this framework vanilla. They are going to add their own layer of behavior over the top. It&#8217;s been designed to make it easy (trivial in this case) to extend and change the policy.</p>
<p>Sane defaults are <strong>really</strong> important for frameworks. Yes they get in the way of power users.  Yes it normally takes a power user 10 minutes to work around them and add that piece of code to their toolbox from then on.</p>
<p>I don&#8217;t know how many people were following the emergent rails community back in 2005 when the Google <a href="http://www.37signals.com/svn/archives2/google_web_accelerator_hey_not_so_fast_an_alert_for_web_app_designers.php">Web Accelerator</a> was <a href="http://radar.oreilly.com/archives/2005/05/google_web_acce_1.html">released</a> &#8211; but many of them (including the <a href="http://www.loudthinking.com/arc/000454.html">smartest</a><sup>2</sup> ) got a <a href="http://www.intertwingly.net/blog/2005/05/06/This-Stuff-Matters">salient</a> <a href="http://www.intertwingly.net/blog/2005/10/24/Theyre-baaaaaaack">lesson</a> in <a href="http://www.w3.org/2001/tag/doc/whenToUseGet.html">GET idempotence</a>. (i.e. GET Order?id=23&amp;action=delete &#8211; should <em>never</em> delete anything).</p>
<p>Here was a situation where the framework (rails) came with not so safe defaults and bad example code which encouraged doing the wrong thing.  These days &#8211; rails has absorbed this lesson so completely that it could be described as a REST server and in some ways leads developers into following best practices for web apps by default.</p>
<p>I really don&#8217;t understand what the huge deal is here? This seems as clear cut to me as the built in RequestValidation in ASP.NET or automatically escaping SqlParameters for SQL injection. Sure &#8211; if your a power user it can be a pain &#8211; but it takes 10 seconds to turn off and then your responsible when your site get p0wn&#8217;d.</p>
<p>It&#8217;s not like ControllerBase is sealed.</p>
<ol class="footnotes"><li id="footnote_0_48" class="footnote">by default &#8211; but <a href="http://haacked.com/archive/2007/12/09/extending-asp.net-mvc-to-add-conventions.aspx">easily modifiable</a></li><li id="footnote_1_48" class="footnote">or is that loudest?</li></ol>]]></content:encoded>
			<wfw:commentRss>http://joshrobb.com/blog/2007/12/11/controlleraction-and-sane-defaults/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enterprise plaforms &#8211; teaching new dogs old tricks</title>
		<link>http://joshrobb.com/blog/2007/11/19/enterprise-plaforms-teaching-new-dogs-old-tricks/</link>
		<comments>http://joshrobb.com/blog/2007/11/19/enterprise-plaforms-teaching-new-dogs-old-tricks/#comments</comments>
		<pubDate>Mon, 19 Nov 2007 23:23:19 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[web architecture]]></category>

		<guid isPermaLink="false">http://joshrobb.com/blog/2007/11/19/enterprise-plaforms-teaching-new-dogs-old-tricks/</guid>
		<description><![CDATA[Oren is talking about building a substrate for an enterprise platform. This has been something I&#8217;ve wanted to do since I first got my hands on c# and the rest of the .net framework in 2001. I&#8217;ve never done it because it always seemed that a one size fits all solution would be unworkable. At [...]]]></description>
			<content:encoded><![CDATA[<p>Oren is talking about building a <a href="http://ayende.com/Blog/archive/2007/11/17/A-vision-of-enterprise-platform.aspx">substrate for an enterprise platform</a>. This has been something I&#8217;ve wanted to do since I first got my hands on c# and the rest of the .net framework in 2001. I&#8217;ve never done it because it always seemed that a one size fits all solution would be unworkable.</p>
<p>At the time &#8211; the best web architecture I knew of was the <a href="http://en.wikipedia.org/wiki/ArsDigita_Corporation">ArsDigita</a> <a href="http://en.wikipedia.org/wiki/ArsDigita_Community_System">Community System</a> (still available and maintained as <a href="http://openacs.org/">OpenACS</a>). What Oren is describing sounds similar in many ways.</p>
<p>The ACS architecture is based on the days when Oracle and TCL were good options for building web based systems&#8230;. but the underlying design is still very very good (e.g. it was the first place I every saw the Party pattern). They were focused on designing good data models and separating concerns.</p>
<p>They have the following available in their <a href="http://openacs.org/doc/current/kernel-doc.html">kernel</a>:</p>
<ul>
<li><a href="http://openacs.org/doc/current/parties.html">Parties</a>, Users and <a href="http://openacs.org/doc/current/groups-design.html">(nestable) groups</a></li>
<li><a href="http://openacs.org/doc/current/permissions-tediously-explained.html">A permissions system</a> which supports per &#8220;<a href="http://openacs.org/doc/current/objects.html">object</a>&#8221; (think row) permissions.</li>
<li>A <a href="http://openacs.org/doc/current/apm-design.html">package manager</a> which allows you to install (and remove) modules of functionality into an existing system (including schema changes, new routes etc). e.g. adding a e-commerce, blogging or threaded discussion module is a matter of clicking in a web ui.</li>
<li><a href="http://openacs.org/doc/current/tutorial-schedule-procs.html">Scheduled tasks</a></li>
</ul>
<p>This thing was and is pretty scalable (it runs the <a href="http://photo.net">photo.net</a> community).</p>
<p>It&#8217;s over 10 years old still a source of good ideas. I recommend taking a poke around their documentation and seeing what you can learn.</p>
<p>(I remember reading once that Philip Greenspun &#8211; the original ACS designer was asked by Microsoft to build a new version while the .net framework 1.0 was in development as a showpiece. For some reason he didn&#8217;t but I always felt that it was a shame this never happened).</p>
]]></content:encoded>
			<wfw:commentRss>http://joshrobb.com/blog/2007/11/19/enterprise-plaforms-teaching-new-dogs-old-tricks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eric Evans on over-design and intrinsic complexity</title>
		<link>http://joshrobb.com/blog/2007/11/07/eric-evans-on-over-design-and-intrinsic-complexity/</link>
		<comments>http://joshrobb.com/blog/2007/11/07/eric-evans-on-over-design-and-intrinsic-complexity/#comments</comments>
		<pubDate>Wed, 07 Nov 2007 17:13:18 +0000</pubDate>
		<dc:creator>josh</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[development]]></category>

		<guid isPermaLink="false">http://joshrobb.com/blog/2007/11/07/eric-evans-on-over-design-and-intrinsic-complexity/</guid>
		<description><![CDATA[Just watched a great presentation by Eric Evans (of Domain Driven Design fame) called: Strategic Domain-Driven Design &#8211; Effective Modelling for Larger Projects. I highly recommend it. Here&#8217;s a couple of great quotes (It&#8217;s worth noting that he&#8217;s talking about large projects): Not everything is going to be well designed. You may have a part [...]]]></description>
			<content:encoded><![CDATA[<p>Just watched a great presentation by <a href="http://domainlanguage.com/about/ericevans.html">Eric Evans</a> (of <a href="http://domaindrivendesign.org/books/index.html#DDD">Domain Driven Design</a> fame) called: <a href="http://www.parleys.com/display/PARLEYS/Strategic%20Domain-Driven%20Design%20-%20Effective%20Modeling%20for%20Larger%20Projects?showComments=true">Strategic Domain-Driven Design &#8211; Effective Modelling for Larger Projects</a>. I highly recommend it.</p>
<p>Here&#8217;s a couple of great quotes (It&#8217;s worth noting that he&#8217;s talking about large projects):</p>
<blockquote><p>Not everything is going to be well designed.</p></blockquote>
<blockquote><p>You may have a part [of a system] which is not complex &#8211; or is just straight forward data collection. You&#8217;ve got a lot of screens , a lot of fields. You&#8217;ve got to put it into the data base and do a simple report on it.</p>
<p>Don&#8217;t spent a lot of effort modelling these things. Just find some simple technology that&#8217;s good at that stuff.</p></blockquote>
<blockquote><p><font color="#003330">The idea that the entire system is going to be based on an object oriented model is I think is a highly questionable assumption. </font></p></blockquote>
<p>It&#8217;s a really interesting perspective &#8211; and a great antidote to some of the discussion at the moment which almost treats DDD as a silver bullet.</p>
<p>Anyone who&#8217;s feeling guilty because they don&#8217;t have their solutions structured into Core, Model, Services, Presentation, UI layers &#8211; or even worse is using a SqlDataSource control in their app &#8211; should watch it. It&#8217;s an excellent dose of pragmatism.</p>
]]></content:encoded>
			<wfw:commentRss>http://joshrobb.com/blog/2007/11/07/eric-evans-on-over-design-and-intrinsic-complexity/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
