<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Spring&#8217;s Structure is &#8220;almost perfect&#8221;</title>
	<atom:link href="http://www.headwaysoftware.com/blog/2006/07/springs-structure-is-almost-perfect/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.headwaysoftware.com/blog/2006/07/springs-structure-is-almost-perfect/</link>
	<description></description>
	<lastBuildDate>Fri, 23 Dec 2011 12:59:15 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>By: Chris</title>
		<link>http://www.headwaysoftware.com/blog/2006/07/springs-structure-is-almost-perfect/comment-page-1/#comment-47</link>
		<dc:creator>Chris</dc:creator>
		<pubDate>Thu, 15 Mar 2007 11:06:27 +0000</pubDate>
		<guid isPermaLink="false">http://headway.structure101.com/blog/2006/07/springs-structure-is-almost-perfect/#comment-47</guid>
		<description>&lt;p&gt;Slava - I take your point, though my post refers to a different aspect of a code-base. The &quot;structure&quot; I talk about is a level above the language specifics. How is the code recursively organized into higher-level components, and are the inter-component dependencies nice and orderly? A clean structure in this sense does not imply elegant code-level design, nor vice versa.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Slava &#8211; I take your point, though my post refers to a different aspect of a code-base. The &#8220;structure&#8221; I talk about is a level above the language specifics. How is the code recursively organized into higher-level components, and are the inter-component dependencies nice and orderly? A clean structure in this sense does not imply elegant code-level design, nor vice versa.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Slava Pestov</title>
		<link>http://www.headwaysoftware.com/blog/2006/07/springs-structure-is-almost-perfect/comment-page-1/#comment-46</link>
		<dc:creator>Slava Pestov</dc:creator>
		<pubDate>Tue, 13 Mar 2007 08:53:52 +0000</pubDate>
		<guid isPermaLink="false">http://headway.structure101.com/blog/2006/07/springs-structure-is-almost-perfect/#comment-46</guid>
		<description>&lt;p&gt;When evaluating a piece of code, you have to consider the language it is written in. Nothing written in Java can qualify as elegant or well-structured, because of Java&#039;s grave design flaws. The best you can say about a Java project is that it uses standardized copy and paste boilerplate (&quot;design patterns&quot;) rather than something ad-hoc.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>When evaluating a piece of code, you have to consider the language it is written in. Nothing written in Java can qualify as elegant or well-structured, because of Java&#8217;s grave design flaws. The best you can say about a Java project is that it uses standardized copy and paste boilerplate (&#8220;design patterns&#8221;) rather than something ad-hoc.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Chris</title>
		<link>http://www.headwaysoftware.com/blog/2006/07/springs-structure-is-almost-perfect/comment-page-1/#comment-45</link>
		<dc:creator>Chris</dc:creator>
		<pubDate>Wed, 22 Nov 2006 12:44:32 +0000</pubDate>
		<guid isPermaLink="false">http://headway.structure101.com/blog/2006/07/springs-structure-is-almost-perfect/#comment-45</guid>
		<description>&lt;p&gt;Likewise, it&#039;s good that your experience matches the complexity numbers!&lt;/p&gt;

&lt;p&gt;No community version at the moment. There is a separate publisher however. With just one of these, you can &quot;measure&quot; as many projects as you like and then compare projects and track complexity over time through a web browser...&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Likewise, it&#8217;s good that your experience matches the complexity numbers!</p>
<p>No community version at the moment. There is a separate publisher however. With just one of these, you can &#8220;measure&#8221; as many projects as you like and then compare projects and track complexity over time through a web browser&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Paul Browne - TIPE</title>
		<link>http://www.headwaysoftware.com/blog/2006/07/springs-structure-is-almost-perfect/comment-page-1/#comment-44</link>
		<dc:creator>Paul Browne - TIPE</dc:creator>
		<pubDate>Wed, 22 Nov 2006 12:27:28 +0000</pubDate>
		<guid isPermaLink="false">http://headway.structure101.com/blog/2006/07/springs-structure-is-almost-perfect/#comment-44</guid>
		<description>&lt;p&gt;It&#039;s good to see that the &#039;gut feeling&#039; I had about the quality of the Spring Framework being validated by some hard numbers.&lt;/p&gt;

&lt;p&gt;As an aside , is there a community version of your product (maybe without all the graphical reports, but enough to give an indication of the code complexity)?&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>It&#8217;s good to see that the &#8216;gut feeling&#8217; I had about the quality of the Spring Framework being validated by some hard numbers.</p>
<p>As an aside , is there a community version of your product (maybe without all the graphical reports, but enough to give an indication of the code complexity)?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Chris</title>
		<link>http://www.headwaysoftware.com/blog/2006/07/springs-structure-is-almost-perfect/comment-page-1/#comment-43</link>
		<dc:creator>Chris</dc:creator>
		<pubDate>Thu, 20 Jul 2006 13:16:17 +0000</pubDate>
		<guid isPermaLink="false">http://headway.structure101.com/blog/2006/07/springs-structure-is-almost-perfect/#comment-43</guid>
		<description>&lt;p&gt;Ok Chris, I&#039;ll put that on my list ;-). I have worked with Bob Martin&#039;s DMS metrics a fair bit and I&#039;d say that they are often good indicators, especially at the macro level (like &quot;components&quot; rather than &quot;packages&quot;). In fact I&#039;ve tried to use most &quot;quality&quot; metrics, and I keep coming back to the view that, for the vast majority of code-bases, the highest priority is to reign in the structural complexity. Once you&#039;ve balanced the complexity, then it may make sense to consider Abstractness vs. Instablility or look at the OO metrics or afferent and efferent coupling or whatever.  But until your structure is under control, you&#039;re just rearanging deck chairs.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Ok Chris, I&#8217;ll put that on my list <img src='http://www.headwaysoftware.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> . I have worked with Bob Martin&#8217;s DMS metrics a fair bit and I&#8217;d say that they are often good indicators, especially at the macro level (like &#8220;components&#8221; rather than &#8220;packages&#8221;). In fact I&#8217;ve tried to use most &#8220;quality&#8221; metrics, and I keep coming back to the view that, for the vast majority of code-bases, the highest priority is to reign in the structural complexity. Once you&#8217;ve balanced the complexity, then it may make sense to consider Abstractness vs. Instablility or look at the OO metrics or afferent and efferent coupling or whatever.  But until your structure is under control, you&#8217;re just rearanging deck chairs.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Chris Murphy</title>
		<link>http://www.headwaysoftware.com/blog/2006/07/springs-structure-is-almost-perfect/comment-page-1/#comment-42</link>
		<dc:creator>Chris Murphy</dc:creator>
		<pubDate>Thu, 20 Jul 2006 03:37:21 +0000</pubDate>
		<guid isPermaLink="false">http://headway.structure101.com/blog/2006/07/springs-structure-is-almost-perfect/#comment-42</guid>
		<description>&lt;p&gt;If you are interested in analysing open source code bases generally then take a look at www.strandz.org. You won&#039;t find any dependency cycles in it - JDepend has always been used to ensure this. It would be interesting to know if someone could relatively easily pinpoint some areas that need improvement. I must admit I have never really paid too much attention to the more detailed JDepend metrics (although I have read Robert C Martin&#039;s book), although perhaps I should!&lt;/p&gt;

&lt;p&gt;https://sourceforge.net/projects/strandz/&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>If you are interested in analysing open source code bases generally then take a look at <a href="http://www.strandz.org" rel="nofollow">http://www.strandz.org</a>. You won&#8217;t find any dependency cycles in it &#8211; JDepend has always been used to ensure this. It would be interesting to know if someone could relatively easily pinpoint some areas that need improvement. I must admit I have never really paid too much attention to the more detailed JDepend metrics (although I have read Robert C Martin&#8217;s book), although perhaps I should!</p>
<p><a href="https://sourceforge.net/projects/strandz/" rel="nofollow">https://sourceforge.net/projects/strandz/</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Chris</title>
		<link>http://www.headwaysoftware.com/blog/2006/07/springs-structure-is-almost-perfect/comment-page-1/#comment-41</link>
		<dc:creator>Chris</dc:creator>
		<pubDate>Wed, 19 Jul 2006 13:16:02 +0000</pubDate>
		<guid isPermaLink="false">http://headway.structure101.com/blog/2006/07/springs-structure-is-almost-perfect/#comment-41</guid>
		<description>&lt;p&gt;Controlling the structural complexity of a project won&#039;t in itself guarantee that the class/code-level decisions are optimal. Experience and Fowler-esque refactoring are still just as relevant. For a given implementation approach, however, a better structure will make the code-base easier to understand, change impact will be more localized, and development, test and release processes more efficient.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Controlling the structural complexity of a project won&#8217;t in itself guarantee that the class/code-level decisions are optimal. Experience and Fowler-esque refactoring are still just as relevant. For a given implementation approach, however, a better structure will make the code-base easier to understand, change impact will be more localized, and development, test and release processes more efficient.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Antranig Basman</title>
		<link>http://www.headwaysoftware.com/blog/2006/07/springs-structure-is-almost-perfect/comment-page-1/#comment-40</link>
		<dc:creator>Antranig Basman</dc:creator>
		<pubDate>Wed, 19 Jul 2006 13:06:55 +0000</pubDate>
		<guid isPermaLink="false">http://headway.structure101.com/blog/2006/07/springs-structure-is-almost-perfect/#comment-40</guid>
		<description>&lt;p&gt;Yes to Andrew&#039;s comments. This code analysis of Spring is excellent, although it tends to miss complexity at the actual source-file level. I agree that Spring is the best open source codebase I have ever worked with, but it has a number of &quot;fat wodges&quot;  of bulky stateful code, in particular AbstractAutowireCapableBeanFactory  is a particularly bad offender, and its tight relationship with BeanWrapperImpl is exactly what prevented us from working with Spring directly when we needed a *much* faster implementation - RSAC attaches to Spring after having read the context definition but after this switches to a ground-up rewrite to actually operate the context. Naturally it sacrifices some of Spring&#039;s flexibility but most of this is typically only required in the longer-lived, enterprise-scale contexts at which Spring is based.&lt;/p&gt;

&lt;p&gt;I would criticise the validity of some of the complexity metrics, since for example the Spring Hibernate classes are not &quot;complex&quot; in the conceptual sense since they are actually fairly &quot;wide and flat&quot;. Whereas AACBF *is* really quite complex and coupled to the general &quot;Spring internal workflow&quot; in all sorts of ways, but has not appeared on the metrics radar at all.&lt;/p&gt;

&lt;p&gt;Spring&#039;s isolation at the BeanDefinition, BeanFactory and ApplicationContext level is exemplary.&lt;/p&gt;

&lt;p&gt;You may want to look at the RSF source code base for comparison - its unit of composition is even more finegrained that Spring&#039;s, and naturally will have no dependency cycles at the class level since it is configured using Spring. &lt;br /&gt;
In particular the average source file size in RSF at 56 lines is *massively* lower than in any other framework I have seen (compared with 155 for Spring, and ~200 for JSF and Wicket).&lt;/p&gt;

&lt;p&gt;RSF is much worse at the package level since I have made very little effort to remove cycles at that level. Any suggestions for refactoring would be most welcome :P&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Yes to Andrew&#8217;s comments. This code analysis of Spring is excellent, although it tends to miss complexity at the actual source-file level. I agree that Spring is the best open source codebase I have ever worked with, but it has a number of &#8220;fat wodges&#8221;  of bulky stateful code, in particular AbstractAutowireCapableBeanFactory  is a particularly bad offender, and its tight relationship with BeanWrapperImpl is exactly what prevented us from working with Spring directly when we needed a *much* faster implementation &#8211; RSAC attaches to Spring after having read the context definition but after this switches to a ground-up rewrite to actually operate the context. Naturally it sacrifices some of Spring&#8217;s flexibility but most of this is typically only required in the longer-lived, enterprise-scale contexts at which Spring is based.</p>
<p>I would criticise the validity of some of the complexity metrics, since for example the Spring Hibernate classes are not &#8220;complex&#8221; in the conceptual sense since they are actually fairly &#8220;wide and flat&#8221;. Whereas AACBF *is* really quite complex and coupled to the general &#8220;Spring internal workflow&#8221; in all sorts of ways, but has not appeared on the metrics radar at all.</p>
<p>Spring&#8217;s isolation at the BeanDefinition, BeanFactory and ApplicationContext level is exemplary.</p>
<p>You may want to look at the RSF source code base for comparison &#8211; its unit of composition is even more finegrained that Spring&#8217;s, and naturally will have no dependency cycles at the class level since it is configured using Spring. <br />
In particular the average source file size in RSF at 56 lines is *massively* lower than in any other framework I have seen (compared with 155 for Spring, and ~200 for JSF and Wicket).</p>
<p>RSF is much worse at the package level since I have made very little effort to remove cycles at that level. Any suggestions for refactoring would be most welcome <img src='http://www.headwaysoftware.com/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andrew Thornton</title>
		<link>http://www.headwaysoftware.com/blog/2006/07/springs-structure-is-almost-perfect/comment-page-1/#comment-39</link>
		<dc:creator>Andrew Thornton</dc:creator>
		<pubDate>Wed, 19 Jul 2006 12:45:13 +0000</pubDate>
		<guid isPermaLink="false">http://headway.structure101.com/blog/2006/07/springs-structure-is-almost-perfect/#comment-39</guid>
		<description>&lt;p&gt;There are only a few problem&#039;s I&#039;ve ever had with Spring&#039;s internal structure:&lt;/p&gt;

&lt;p&gt;1. If you want to understand what ApplicationContext is doing, you&#039;ll hit lots of calls to self-referential Interfaces and a long tree of inheritance.&lt;/p&gt;

&lt;p&gt;2. BeanWrapperImpl: One of these is created per-property/construction setting. Just look at what happens during the creation of one of these objects. There simply has to be a better way... &lt;/p&gt;

&lt;p&gt;Apart from the above, Spring is easily one of the best written pieces -- if not the best written piece -- of software I&#039;ve ever looked at.&lt;/p&gt;

&lt;p&gt;(Note to the above: We only spotted the above problems when we were looking at creating RSAC (a request scope AC)) &lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>There are only a few problem&#8217;s I&#8217;ve ever had with Spring&#8217;s internal structure:</p>
<p>1. If you want to understand what ApplicationContext is doing, you&#8217;ll hit lots of calls to self-referential Interfaces and a long tree of inheritance.</p>
<p>2. BeanWrapperImpl: One of these is created per-property/construction setting. Just look at what happens during the creation of one of these objects. There simply has to be a better way&#8230; </p>
<p>Apart from the above, Spring is easily one of the best written pieces &#8212; if not the best written piece &#8212; of software I&#8217;ve ever looked at.</p>
<p>(Note to the above: We only spotted the above problems when we were looking at creating RSAC (a request scope AC)) </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Chris</title>
		<link>http://www.headwaysoftware.com/blog/2006/07/springs-structure-is-almost-perfect/comment-page-1/#comment-38</link>
		<dc:creator>Chris</dc:creator>
		<pubDate>Wed, 19 Jul 2006 10:04:41 +0000</pubDate>
		<guid isPermaLink="false">http://headway.structure101.com/blog/2006/07/springs-structure-is-almost-perfect/#comment-38</guid>
		<description>&lt;p&gt;Now that&#039;s interesting. I took a quick look at freemarker and it is structurally very complex! For example there is a single tangle of 176 classes spread out over 10 packages. This means that every class or package in the tangle is directly or indirectly dependent on every other. &lt;/p&gt;

&lt;p&gt;I&#039;m guessing that the extension points are well designed and localized which is why you find it easy to customize (can you confirm this?). However I would expect a team updating the whole code-base to find it very hard to modify, since they would constantly need the latest versions of code that others were working on.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Now that&#8217;s interesting. I took a quick look at freemarker and it is structurally very complex! For example there is a single tangle of 176 classes spread out over 10 packages. This means that every class or package in the tangle is directly or indirectly dependent on every other. </p>
<p>I&#8217;m guessing that the extension points are well designed and localized which is why you find it easy to customize (can you confirm this?). However I would expect a team updating the whole code-base to find it very hard to modify, since they would constantly need the latest versions of code that others were working on.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

