<?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>Future-Proofing A Design</title><link>http://blogs.msdn.com/b/ericlippert/archive/2009/01/16/future-proofing-a-design.aspx</link><description>Last time on FAIC a user asked for guidance on the potential pitfalls of refactoring an automatic property into a regular explicit property. This is just an example of a far more general problem: how can we design programs so that they are easy to get</description><dc:language>en-US</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>re: Future-Proofing A Design</title><link>http://blogs.msdn.com/b/ericlippert/archive/2009/01/16/future-proofing-a-design.aspx#9344739</link><pubDate>Tue, 20 Jan 2009 12:22:11 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9344739</guid><dc:creator>Phylyp</dc:creator><description>&lt;p&gt;Great post Eric, and an excellent comment from Darren Clark&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9344739" width="1" height="1"&gt;</description></item><item><title>re: Future-Proofing A Design</title><link>http://blogs.msdn.com/b/ericlippert/archive/2009/01/16/future-proofing-a-design.aspx#9340649</link><pubDate>Mon, 19 Jan 2009 23:05:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9340649</guid><dc:creator>Jose</dc:creator><description>&lt;p&gt;All these is good advise but could seem a little too much diluted.&lt;/p&gt;
&lt;p&gt;It all comes down to using and knowing when/how to use design patterns. &lt;/p&gt;
&lt;p&gt;Future-Proofing A Design means writing the code in such a way that is easy to modify/change in the future, this is covered very well in the &amp;quot;Open Close Principle&amp;quot; (Open to extension but close to modification) also having a good understnading of Encapsulation, ecapsulation of data is good but encapsulating behavior is even better(Ex: encapsulate responsibility using the strategy pattern, or encapsulate creation using the factory pattern), because that way the specific behavior can be isloated to one area, less redundant and easier to change in the future.&lt;/p&gt;
&lt;p&gt;If you don't know how to use the &amp;quot;commonality and variability metrix&amp;quot; pattern from netobjectives, please do yourself a favor the check it out, it will help you write software that is easier to change and therefore ready for the future, using concepts like strategy and factory pattern. &lt;/p&gt;
&lt;p&gt;Jose.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9340649" width="1" height="1"&gt;</description></item><item><title>re: Future-Proofing A Design</title><link>http://blogs.msdn.com/b/ericlippert/archive/2009/01/16/future-proofing-a-design.aspx#9339950</link><pubDate>Mon, 19 Jan 2009 15:24:23 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9339950</guid><dc:creator>rbirkby</dc:creator><description>&lt;p&gt;#1 rule: Separate your object graph construction (aka wiring, aka 'new') from your logic.&lt;/p&gt;
&lt;p&gt;If you do this, you end up with manual dependency injection and a very flexible system which allows your objects to be wired together to suit unforeseen circumstances. It's a shame no language designer has yet created a language which enforces this.&lt;/p&gt;
&lt;p&gt;This and many more tips on Misko Hevery's blog: &lt;a rel="nofollow" target="_new" href="http://misko.hevery.com/"&gt;http://misko.hevery.com/&lt;/a&gt; syndicated on the Google Testing blog.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9339950" width="1" height="1"&gt;</description></item><item><title>re: Future-Proofing A Design</title><link>http://blogs.msdn.com/b/ericlippert/archive/2009/01/16/future-proofing-a-design.aspx#9337432</link><pubDate>Sun, 18 Jan 2009 10:32:52 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9337432</guid><dc:creator>Tom Kirby-Green</dc:creator><description>&lt;p&gt;Brilliant posting Eric! I can't help hoping that this will be the first of such in one of your intermittent themed series of posts.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9337432" width="1" height="1"&gt;</description></item><item><title>re: Future-Proofing A Design</title><link>http://blogs.msdn.com/b/ericlippert/archive/2009/01/16/future-proofing-a-design.aspx#9337225</link><pubDate>Sun, 18 Jan 2009 08:23:08 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9337225</guid><dc:creator>Greg</dc:creator><description>&lt;p&gt;#1 future proof rule: &lt;/p&gt;
&lt;p&gt; &amp;nbsp;Do not use the latest model, coding style, methodology, third party control, api call, etc. &amp;nbsp;Using the latest new thing will increase the chance your system is married to a buggy, poorly supported, poorly thought out, etc concept, library, tool, api, etc.&lt;/p&gt;
&lt;p&gt;This is one of the traps I've seen people with less than 5 years experience fall into where they avoid solving the business problem and think that applying the latest methodology, object model, library, etc will ensure them delivering a functioning system that meets business needs.&lt;/p&gt;
&lt;p&gt;I ask whether or not their system/design will a) be maintainable by someone with less than 2 years experience and b) be maintainable by someone on a monday morning where they did not sleep the previous two days. &amp;nbsp;This helps cut down on the premature optimization increasing code complexity needlessly as well as the increased code complexity for the sake of developer ego boost by writing code as if it is a creative writing project instead of a solution to a business problem.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9337225" width="1" height="1"&gt;</description></item><item><title>Future-Proofing A Design</title><link>http://blogs.msdn.com/b/ericlippert/archive/2009/01/16/future-proofing-a-design.aspx#9336816</link><pubDate>Sun, 18 Jan 2009 03:34:56 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9336816</guid><dc:creator>DotNetShoutout</dc:creator><description>&lt;p&gt;Thank you for submitting this cool story - Trackback from DotNetShoutout&lt;/p&gt;
&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9336816" width="1" height="1"&gt;</description></item><item><title>re: Future-Proofing A Design</title><link>http://blogs.msdn.com/b/ericlippert/archive/2009/01/16/future-proofing-a-design.aspx#9336273</link><pubDate>Sat, 17 Jan 2009 21:06:22 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9336273</guid><dc:creator>Bahador</dc:creator><description>&lt;p&gt;That was the best OO back-to-basic post I've read in 2009 ;)&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9336273" width="1" height="1"&gt;</description></item><item><title>re: Future-Proofing A Design</title><link>http://blogs.msdn.com/b/ericlippert/archive/2009/01/16/future-proofing-a-design.aspx#9333274</link><pubDate>Sat, 17 Jan 2009 04:15:29 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9333274</guid><dc:creator>Craig</dc:creator><description>&lt;p&gt;With regards to premature generality, the non-coding example that popped immediately into my head was the bus tunnel system in Seattle. &amp;nbsp;They tried early on to plan for a future problem, solved it badly, and had to rip the whole thing out and start over.&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9333274" width="1" height="1"&gt;</description></item><item><title>re: Future-Proofing A Design</title><link>http://blogs.msdn.com/b/ericlippert/archive/2009/01/16/future-proofing-a-design.aspx#9333173</link><pubDate>Sat, 17 Jan 2009 04:04:42 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9333173</guid><dc:creator>Darren Clark</dc:creator><description>&lt;p&gt;This reminds me of issues I've seen with developers and databases. The tendency is to thing of the user interface or process, and model the DB to act as a backing store for that process.&lt;/p&gt;
&lt;p&gt;What I always advise is &amp;quot;model the world, not the activity&amp;quot;. In other words, as closely as possible create the datamodel based on the entities and relationships of the problem domain, NOT on the actual problem being solved.&lt;/p&gt;
&lt;p&gt;A lot of times you will end up with a technically more complex data model, but over a very few iterations the complexity pays off in being able to change(fix) your workflow without fighting with or remodeling your data.&lt;/p&gt;
&lt;p&gt;The absolute worst outcome is to take a workflow based datamodel, alter the workflow and then try to avoid changing the datamodel. After a couple iterations that system becomes nearly incomprehensible as half of things on the UI have a direct relationship with data, and half some some completely confusing derivation.&lt;/p&gt;
&lt;p&gt;In short, databases model things and &amp;nbsp;code models activities, therefore the design of the datamodel should be derived from things and the design of the code should be modeled from activities. The job of the programmer is to bridge the gap.&lt;/p&gt;
&lt;p&gt;-Darren&lt;/p&gt;
&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9333173" width="1" height="1"&gt;</description></item></channel></rss>