<?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"
	>
<channel>
	<title>Comments on: Enforcing acceptable package dependencies in your build</title>
	<atom:link href="http://www.magpiebrain.com/blog/2005/07/06/enforcing-acceptable-package-dependencies-in-your-build/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.magpiebrain.com/blog/2005/07/06/enforcing-acceptable-package-dependencies-in-your-build/</link>
	<description>Sam Newman's blog</description>
	<pubDate>Fri, 21 Nov 2008 20:32:39 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
		<item>
		<title>By: Sam Newman</title>
		<link>http://www.magpiebrain.com/blog/2005/07/06/enforcing-acceptable-package-dependencies-in-your-build/#comment-807</link>
		<dc:creator>Sam Newman</dc:creator>
		<pubDate>Thu, 07 Jul 2005 12:49:50 +0000</pubDate>
		<guid isPermaLink="false">http://www.magpiebrain.com/2005/07/06/enforcing-acceptable-package-dependencies-in-your-build/#comment-807</guid>
		<description>Thats good to know - thanks Pat. That also implies that rolling an Ant plugin capable of failing the build shouldn't be too much bother.
</description>
		<content:encoded><![CDATA[<p>Thats good to know - thanks Pat. That also implies that rolling an Ant plugin capable of failing the build shouldn&#8217;t be too much bother.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Pat</title>
		<link>http://www.magpiebrain.com/blog/2005/07/06/enforcing-acceptable-package-dependencies-in-your-build/#comment-806</link>
		<dc:creator>Pat</dc:creator>
		<pubDate>Thu, 07 Jul 2005 12:11:29 +0000</pubDate>
		<guid isPermaLink="false">http://www.magpiebrain.com/2005/07/06/enforcing-acceptable-package-dependencies-in-your-build/#comment-806</guid>
		<description>Another way that we've been tying JDepend into our build is to use it programatically as a unit test which will fail our build process. Although there was probably a little bit more work involved in setting up failures (and formatting the info well), we still managed to get it going with not too much hassle.</description>
		<content:encoded><![CDATA[<p>Another way that we&#8217;ve been tying JDepend into our build is to use it programatically as a unit test which will fail our build process. Although there was probably a little bit more work involved in setting up failures (and formatting the info well), we still managed to get it going with not too much hassle.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sam Newman</title>
		<link>http://www.magpiebrain.com/blog/2005/07/06/enforcing-acceptable-package-dependencies-in-your-build/#comment-805</link>
		<dc:creator>Sam Newman</dc:creator>
		<pubDate>Thu, 07 Jul 2005 08:41:12 +0000</pubDate>
		<guid isPermaLink="false">http://www.magpiebrain.com/2005/07/06/enforcing-acceptable-package-dependencies-in-your-build/#comment-805</guid>
		<description>I'd certainly agree that some circular dependencies can show up classes that should be in the same package - but equally they can show you places where you need to decouple things to achive high cohesion within a package (that is the package is strongly focused with common responsibilities) and low coupling. Again, there is an informative discussion of cohesion and coupling on the "c2 wiki(c2Wiki - Coupling and cohesion)":http://www.c2.com/cgi/wiki?CouplingAndCohesion.</description>
		<content:encoded><![CDATA[<p>I&#8217;d certainly agree that some circular dependencies can show up classes that should be in the same package - but equally they can show you places where you need to decouple things to achive high cohesion within a package (that is the package is strongly focused with common responsibilities) and low coupling. Again, there is an informative discussion of cohesion and coupling on the &#8220;c2 wiki(c2Wiki - Coupling and cohesion)&#8221;:http://www.c2.com/cgi/wiki?CouplingAndCohesion.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Laird Nelson</title>
		<link>http://www.magpiebrain.com/blog/2005/07/06/enforcing-acceptable-package-dependencies-in-your-build/#comment-804</link>
		<dc:creator>Laird Nelson</dc:creator>
		<pubDate>Thu, 07 Jul 2005 00:43:10 +0000</pubDate>
		<guid isPermaLink="false">http://www.magpiebrain.com/2005/07/06/enforcing-acceptable-package-dependencies-in-your-build/#comment-804</guid>
		<description>Thanks for the response.  You raise good points.  It's interesting&#8212;I'm aware of the architectural problems in general (if A depends on B and B depends on A, changes to one often necessitate changes to the other), but where A and B are packages and not classes I don't necessarily see this as being as big a deal.  Often it really means that the classes that cause the interdependency should simply be in the same package, or that the two packages should be collapsed, since you're going to have to deploy them with each other anyhow.  I'll check out the c2 links.  Thanks again.</description>
		<content:encoded><![CDATA[<p>Thanks for the response.  You raise good points.  It&#8217;s interesting&mdash;I&#8217;m aware of the architectural problems in general (if A depends on B and B depends on A, changes to one often necessitate changes to the other), but where A and B are packages and not classes I don&#8217;t necessarily see this as being as big a deal.  Often it really means that the classes that cause the interdependency should simply be in the same package, or that the two packages should be collapsed, since you&#8217;re going to have to deploy them with each other anyhow.  I&#8217;ll check out the c2 links.  Thanks again.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: sam newman</title>
		<link>http://www.magpiebrain.com/blog/2005/07/06/enforcing-acceptable-package-dependencies-in-your-build/#comment-803</link>
		<dc:creator>sam newman</dc:creator>
		<pubDate>Wed, 06 Jul 2005 21:10:01 +0000</pubDate>
		<guid isPermaLink="false">http://www.magpiebrain.com/2005/07/06/enforcing-acceptable-package-dependencies-in-your-build/#comment-803</guid>
		<description>Using the Java API as a model of good programming is probably not  good idea - the API developers have admitted on many occasions that mistakes were made, but due to maintaining backwards compatibility have been unable to fix them.

Circular dependencies are a problem for _any_ language - Java is no exception (for more on package coupling and OO, see the "Pricnciples of Object Oriented Design":http://www.c2.com/cgi/wiki?PrinciplesOfObjectOrientedDesign. If A depends on B, and B depends on A, if you change A you can potentially change B, which in turn can force a change on A. More importantly, A and B are now inextricably linked - the larger the project, the more this becomes a problem - as changes cannot be isolated to a single package the chance for effects rippling out to affect others increases (for a much better description see pages 6 onwards of the  "Granularity":http://www.objectmentor.com/resources/articles/granularity.pdf article linked to from the C2 wiki page on "Acyclic Dependencies":http://www.c2.com/cgi/wiki?AcyclicDependenciesPrinciple)</description>
		<content:encoded><![CDATA[<p>Using the Java <acronym title="Application Programming Interface">API</acronym> as a model of good programming is probably not  good idea - the <acronym title="Application Programming Interface">API</acronym> developers have admitted on many occasions that mistakes were made, but due to maintaining backwards compatibility have been unable to fix them.</p>
<p>Circular dependencies are a problem for _any_ language - Java is no exception (for more on package coupling and OO, see the &#8220;Pricnciples of Object Oriented Design&#8221;:http://www.c2.com/cgi/wiki?PrinciplesOfObjectOrientedDesign. If A depends on B, and B depends on A, if you change A you can potentially change B, which in turn can force a change on A. More importantly, A and B are now inextricably linked - the larger the project, the more this becomes a problem - as changes cannot be isolated to a single package the chance for effects rippling out to affect others increases (for a much better description see pages 6 onwards of the  &#8220;Granularity&#8221;:http://www.objectmentor.com/resources/articles/granularity.pdf article linked to from the C2 wiki page on &#8220;Acyclic Dependencies&#8221;:http://www.c2.com/cgi/wiki?AcyclicDependenciesPrinciple)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Laird Nelson</title>
		<link>http://www.magpiebrain.com/blog/2005/07/06/enforcing-acceptable-package-dependencies-in-your-build/#comment-802</link>
		<dc:creator>Laird Nelson</dc:creator>
		<pubDate>Wed, 06 Jul 2005 20:47:12 +0000</pubDate>
		<guid isPermaLink="false">http://www.magpiebrain.com/2005/07/06/enforcing-acceptable-package-dependencies-in-your-build/#comment-802</guid>
		<description>I really do not intend this to be a naive question, so kindly hear me out.  Are circular dependencies really bad in Java?  Don't they happen all the time?  They're all over the JDK itself (util depends on io which depends on io, to take but one arbitrary example).  I would think with the runtime binding that&#8212;apart from architectural concerns, which, I grant you, are often quite valid&#8212;circular dependencies just aren't that big a deal, technically.</description>
		<content:encoded><![CDATA[<p>I really do not intend this to be a naive question, so kindly hear me out.  Are circular dependencies really bad in Java?  Don&#8217;t they happen all the time?  They&#8217;re all over the JDK itself (util depends on io which depends on io, to take but one arbitrary example).  I would think with the runtime binding that&mdash;apart from architectural concerns, which, I grant you, are often quite valid&mdash;circular dependencies just aren&#8217;t that big a deal, technically.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
