<?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>Bradley Holt &#187; Software Design</title>
	<atom:link href="http://bradley-holt.com/tag/software-design/feed/" rel="self" type="application/rss+xml" />
	<link>http://bradley-holt.com</link>
	<description></description>
	<lastBuildDate>Mon, 23 Aug 2010 13:23:11 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Domain-Driven Design</title>
		<link>http://bradley-holt.com/2009/07/domain-driven-design/</link>
		<comments>http://bradley-holt.com/2009/07/domain-driven-design/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 17:25:00 +0000</pubDate>
		<dc:creator>Bradley Holt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software Design]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://bradley-holt.com/2009/07/domain-driven-design/</guid>
		<description><![CDATA[I am currently reading Eric Evans&#8217; Domain-Driven Design book. Having read most of the book I can say that his presentations on Putting the Model to Work and Strategic Design are an amazingly concise overview of the book&#8217;s content (note that InfoQ provides slides below the videos). If you&#8217;ve been interested in reading the book [...]]]></description>
			<content:encoded><![CDATA[<p>I am currently reading Eric Evans&#8217; <a href="http://domaindrivendesign.org/books#DDD">Domain-Driven Design</a> book. Having read most of the book I can say that his presentations on <a href="http://www.infoq.com/presentations/model-to-work-evans">Putting the Model to Work</a> and <a href="http://www.infoq.com/presentations/strategic-design-evans">Strategic Design</a> are an amazingly concise overview of the book&#8217;s content (note that InfoQ provides slides below the videos). If you&#8217;ve been interested in reading the book but just haven&#8217;t had time yet then I&#8217;d recommend watching these two presentations.</p>
<p>I have a lot of experience building web applications that separate business logic from presentation and have been using Zend Framework&#8217;s <a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller">model–view–controller</a> (MVC) components for over two years now. This has certainly helped make web applications I work on more maintainable. However, creating effective models (the &#8220;M&#8221; in &#8220;MVC&#8221;) has always been difficult (this has nothing to do with Zend Framework and has everything to do with the difficulty of modeling in general). The Zend Framework team has been relatively quiet on models since modeling tends to be specific to your application&#8217;s domain (although Matthew Weier O&#8217;Phinney recently gave a great <a href="http://www.phparch.com/main/news/view/51/The_Recording_for_Friday_s_Webcast_is_Now_Available">webcast</a> and <a href="http://www.slideshare.net/weierophinney/playdoh-modelling-your-objects-1766001">presentation</a> on modeling in Zend Framework).</p>
<p>The Domain-Driven Design book has helped make a lot of things &#8220;click&#8221; for me. It drives home the point that modeling is a domain-specific task and that the complexity is usually in the domain, not the technical aspects of your project. If you think the complexity is in the technology then you should question your choice of tools (in my opinion) but in this case perhaps domain-driven design isn&#8217;t right for you. The book provides many patterns that help keep the focus on the domain. Arguably the most important of these patterns is the <a href="http://domaindrivendesign.org/node/132">Ubiquitous Language</a> which is &#8220;a language structured around the domain model and used by all team members to connect all the activities of the team with the software.&#8221; Other important patterns include <a href="http://domaindrivendesign.org/node/109">Entities</a>, <a href="http://domaindrivendesign.org/node/135">Value Objects</a>, <a href="http://domaindrivendesign.org/node/125">Services</a>, <a href="http://domaindrivendesign.org/node/123">Repositories</a> and <a href="http://domaindrivendesign.org/node/110">Factories</a>.</p>
<p>If effective modeling has been something that you&#8217;ve struggled with then I&#8217;d urge you to check out Eric Evans&#8217; presentations and then read his Domain-Driven Design book.</p>
]]></content:encoded>
			<wfw:commentRss>http://bradley-holt.com/2009/07/domain-driven-design/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>API Design</title>
		<link>http://bradley-holt.com/2008/03/api-design/</link>
		<comments>http://bradley-holt.com/2008/03/api-design/#comments</comments>
		<pubDate>Mon, 31 Mar 2008 20:15:00 +0000</pubDate>
		<dc:creator>Bradley Holt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Software Design]]></category>

		<guid isPermaLink="false">http://bradley-holt.com/2008/03/api-design/</guid>
		<description><![CDATA[Artima has an older (but still relevant and interesting) interview with Josh Bloch, a Sun Microsystems Architect.  While the interview focuses on Java, Josh Bloch has some interesting things to say about software design in general. The main topic is thinking about design in terms of APIs instead of monolithic software construction.
Reuse is extremely [...]]]></description>
			<content:encoded><![CDATA[<p>Artima has an older (but still relevant and interesting) <a href="http://www.artima.com/intv/bloch.html">interview with Josh Bloch</a>, a Sun Microsystems Architect.  While the interview focuses on Java, Josh Bloch has some interesting things to say about software design in general. The main topic is thinking about design in terms of APIs instead of monolithic software construction.<br />
<blockquote>Reuse is extremely important but difficult to achieve. You don&#8217;t get it for free, but it is achievable.</p></blockquote>
<p> The lure of object-oriented programming is the ability to reuse code. However, creating reusable code is not as simple as switching from procedural to object-oriented programming. One may make the switch from procedural to object-oriented programming and then be disappointed that object-oriented programming didn&#8217;t deliver on the promise of reuse. Josh Bloch has a potential solution to this problem but it requires one to think about software in terms of public APIs.</p>
<p>Being disappointed with object-oriented programming, one may then decide to try agile programming, perhaps even extreme programming. One tenant of extreme programming is to &#8220;do the simplest thing that could possible work.&#8221; Josh Bloch points out that this is easy to misconstrue:</p>
<blockquote><p>The extreme programming proponents don&#8217;t advocate writing something that will barely work as fast as you can. They don&#8217;t advise you to forgo any design. They do advocate leaving out the bells, whistles, and features you don&#8217;t need and add them later, if a real need is demonstrated. And that&#8217;s incredibly important, because you can always add a feature, but you can never take it out. Once a feature is there, you can&#8217;t say, sorry, we screwed up, we want to take it out because other code now depends on it. People will scream. So, when in doubt, leave it out.</p></blockquote>
<p> He goes on to talk about other topics such as minimizing mutability, protected vs. private members, when to make a class final, and the copy constructor as a cloning mechanism. It is interesting reading if you are striving for the goal of reusable object-oriented code.</p>
]]></content:encoded>
			<wfw:commentRss>http://bradley-holt.com/2008/03/api-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
