<?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>BUY Shigru ONLINE WITHOUT PRESCRIPTION</title>
	<atom:link href="http://elegantcode.com/2008/12/02/how-do-you-deal-with-common-infrastructure-code-for-multiple-projects/feed/" rel="self" type="application/rss+xml" />
	<link>http://elegantcode.com/2008/12/02/how-do-you-deal-with-common-infrastructure-code-for-multiple-projects/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-do-you-deal-with-common-infrastructure-code-for-multiple-projects</link>
	<description></description>
	<lastBuildDate>Tue, 08 May 2012 09:13:00 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
	<item>
		<title>BUY Shigru ONLINE WITHOUT PRESCRIPTION</title>
		<link>http://elegantcode.com/2008/12/02/how-do-you-deal-with-common-infrastructure-code-for-multiple-projects/comment-page-2/#comment-38858</link>
		<dc:creator>Tetsuo</dc:creator>
		<pubDate>Fri, 05 Dec 2008 04:03:44 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/?p=1633#comment-38858</guid>
		<description>I have the same problem. I still haven&#039;t made a decision, but I&#039;m thinking about this (Java):

1. Integration code: code to &#039;glue&#039;, say, Wicket to Spring to Hibernate. Separate project, new projects just import the binary. Should be minimal and stable. No forks.

2. Common components: rich components that don&#039;t exists in open source libraries. Separate project, may import (1), new projects import the binary. Grows as time goes, without affecting the core (1). New projects may fork components to adapt them to their contexts, if really necessary.

3. Common code that is very likely to change: base templates, configuration, css files, etc. Separate project, copied source. If I use Maven as build tool, it may be an archetype (a kind of quickstart code generator).

This structure keeps the core stable, what makes the chances of breaking stuff lower. Components are shared, but any major flexibility needs are satisfied by forking some code., These components should be kept as much &#039;vertical&#039; as possible, without too much dependencies between them. And, the code that every project has to write again and again (very similar, but tweaked to the specific application) is just copied and never breaks other projects.

It&#039;s very tempting to just say &quot;Centralize! DRY! Are you stupid or something? It&#039;s so obvious!&quot;, but dependencies and version control is not a problem you can take lightly. And keep &#039;one framework to rule them all&#039; IS a very difficult and painful task. But sometimes necessary. My answer to this is to make this framework as little as possible, to minimize this pain.

Well, for now, I guess :)</description>
		<content:encoded><![CDATA[<p>I have the same problem. I still haven&#8217;t made a decision, but I&#8217;m thinking about this (Java):</p>
<p>1. Integration code: code to &#8216;glue&#8217;, say, Wicket to Spring to Hibernate. Separate project, new projects just import the binary. Should be minimal and stable. No forks.</p>
<p>2. Common components: rich components that don&#8217;t exists in open source libraries. Separate project, may import (1), new projects import the binary. Grows as time goes, without affecting the core (1). New projects may fork components to adapt them to their contexts, if really necessary.</p>
<p>3. Common code that is very likely to change: base templates, configuration, css files, etc. Separate project, copied source. If I use Maven as build tool, it may be an archetype (a kind of quickstart code generator).</p>
<p>This structure keeps the core stable, what makes the chances of breaking stuff lower. Components are shared, but any major flexibility needs are satisfied by forking some code., These components should be kept as much &#8216;vertical&#8217; as possible, without too much dependencies between them. And, the code that every project has to write again and again (very similar, but tweaked to the specific application) is just copied and never breaks other projects.</p>
<p>It&#8217;s very tempting to just say &#8220;Centralize! DRY! Are you stupid or something? It&#8217;s so obvious!&#8221;, but dependencies and version control is not a problem you can take lightly. And keep &#8216;one framework to rule them all&#8217; IS a very difficult and painful task. But sometimes necessary. My answer to this is to make this framework as little as possible, to minimize this pain.</p>
<p>Well, for now, I guess <img src='http://elegantcode.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>BUY Shigru ONLINE WITHOUT PRESCRIPTION</title>
		<link>http://elegantcode.com/2008/12/02/how-do-you-deal-with-common-infrastructure-code-for-multiple-projects/comment-page-2/#comment-38833</link>
		<dc:creator>Dave Macpherson</dc:creator>
		<pubDate>Thu, 04 Dec 2008 22:51:35 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/?p=1633#comment-38833</guid>
		<description>Option 1, clearly. In Java projects, use Maven as the build system, and version different builds of your infrastructure project in your local Maven repository. Dependent projects can specify a dependency on whatever version of the infrastructure project they require in their master POM definition file and everything just works.</description>
		<content:encoded><![CDATA[<p>Option 1, clearly. In Java projects, use Maven as the build system, and version different builds of your infrastructure project in your local Maven repository. Dependent projects can specify a dependency on whatever version of the infrastructure project they require in their master POM definition file and everything just works.</p>
]]></content:encoded>
	</item>
	<item>
		<title>BUY Shigru ONLINE WITHOUT PRESCRIPTION</title>
		<link>http://elegantcode.com/2008/12/02/how-do-you-deal-with-common-infrastructure-code-for-multiple-projects/comment-page-2/#comment-38789</link>
		<dc:creator>Mario Pareja</dc:creator>
		<pubDate>Thu, 04 Dec 2008 14:27:34 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/?p=1633#comment-38789</guid>
		<description>If you go with option 1, there is a quick way to debug the framework code.  Whenever you want to step into framework code, simply overwrite all of the framework&#039;s Release output (in bin/Release) with the Debug output (from bin/Debug).  This way, you don&#039;t have to make any reference path changes in your projects and you can still benefit from debugging.

It is entirely possible that this only works because of the way we reference our common code: &#039;client&#039; projects reference the build output of our common code.  We don&#039;t check the binaries into source control, so it means each developer has to build the common project.  This, however, comes with its own bag of issues.</description>
		<content:encoded><![CDATA[<p>If you go with option 1, there is a quick way to debug the framework code.  Whenever you want to step into framework code, simply overwrite all of the framework&#8217;s Release output (in bin/Release) with the Debug output (from bin/Debug).  This way, you don&#8217;t have to make any reference path changes in your projects and you can still benefit from debugging.</p>
<p>It is entirely possible that this only works because of the way we reference our common code: &#8216;client&#8217; projects reference the build output of our common code.  We don&#8217;t check the binaries into source control, so it means each developer has to build the common project.  This, however, comes with its own bag of issues.</p>
]]></content:encoded>
	</item>
	<item>
		<title>BUY Shigru ONLINE WITHOUT PRESCRIPTION</title>
		<link>http://elegantcode.com/2008/12/02/how-do-you-deal-with-common-infrastructure-code-for-multiple-projects/comment-page-2/#comment-38696</link>
		<dc:creator>trasa</dc:creator>
		<pubDate>Wed, 03 Dec 2008 16:49:46 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/?p=1633#comment-38696</guid>
		<description>@StevePy: &quot;I prefer more of a common component library or service provider approach.&quot;

We started off looking at the Global Application Framework To End All Frameworks but quickly realized that this wasn&#039;t going to be productive - and instead changed that into a collection of common library components, minimizing or removing dependencies on each other.  So you can pick and choose the components a la carte as suitable for the project.  For example, assemblies for Windsor or for Spring.Net.  

This reduces (but does not eliminate) one of your Cons for option 1 - &quot;The infrastructure code has to have a lot of extensibility points &quot;.  

It also helps with a problem of the Global Framework - you have Project X that could use 99% of whats in the GloboFramework, but due to one little thing like they use a slightly older build of NHibernate, you can&#039;t include the GloboFramework dependencies at all.</description>
		<content:encoded><![CDATA[<p>@StevePy: &#8220;I prefer more of a common component library or service provider approach.&#8221;</p>
<p>We started off looking at the Global Application Framework To End All Frameworks but quickly realized that this wasn&#8217;t going to be productive &#8211; and instead changed that into a collection of common library components, minimizing or removing dependencies on each other.  So you can pick and choose the components a la carte as suitable for the project.  For example, assemblies for Windsor or for Spring.Net.  </p>
<p>This reduces (but does not eliminate) one of your Cons for option 1 &#8211; &#8220;The infrastructure code has to have a lot of extensibility points &#8220;.  </p>
<p>It also helps with a problem of the Global Framework &#8211; you have Project X that could use 99% of whats in the GloboFramework, but due to one little thing like they use a slightly older build of NHibernate, you can&#8217;t include the GloboFramework dependencies at all.</p>
]]></content:encoded>
	</item>
	<item>
		<title>BUY Shigru ONLINE WITHOUT PRESCRIPTION</title>
		<link>http://elegantcode.com/2008/12/02/how-do-you-deal-with-common-infrastructure-code-for-multiple-projects/comment-page-2/#comment-38670</link>
		<dc:creator>Laila</dc:creator>
		<pubDate>Wed, 03 Dec 2008 12:16:46 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/?p=1633#comment-38670</guid>
		<description>I&#039;d go for option 1.
You could set up a source server to avoid the debugging problem.</description>
		<content:encoded><![CDATA[<p>I&#8217;d go for option 1.<br />
You could set up a source server to avoid the debugging problem.</p>
]]></content:encoded>
	</item>
	<item>
		<title>BUY Shigru ONLINE WITHOUT PRESCRIPTION</title>
		<link>http://elegantcode.com/2008/12/02/how-do-you-deal-with-common-infrastructure-code-for-multiple-projects/comment-page-2/#comment-38651</link>
		<dc:creator>Davy Brion</dc:creator>
		<pubDate>Wed, 03 Dec 2008 08:29:37 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/?p=1633#comment-38651</guid>
		<description>@Karsten

yes and yes :)</description>
		<content:encoded><![CDATA[<p>@Karsten</p>
<p>yes and yes <img src='http://elegantcode.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>BUY Shigru ONLINE WITHOUT PRESCRIPTION</title>
		<link>http://elegantcode.com/2008/12/02/how-do-you-deal-with-common-infrastructure-code-for-multiple-projects/comment-page-2/#comment-38650</link>
		<dc:creator>Karsten</dc:creator>
		<pubDate>Wed, 03 Dec 2008 08:28:54 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/?p=1633#comment-38650</guid>
		<description>Sorry, but I don&#039;t quite understand the options you mention.

Option 1) Do you mean that
The infrastructure code is in a project on it&#039;s own, you build it. And in your multiple solutions, you add a reference to the build assembly?

Option 2) Do you mean that
The infrastructure code is in a project on it&#039;s own, but you include the project and source in your multiple solutions and build the infrastructure with the rest of your solution?</description>
		<content:encoded><![CDATA[<p>Sorry, but I don&#8217;t quite understand the options you mention.</p>
<p>Option 1) Do you mean that<br />
The infrastructure code is in a project on it&#8217;s own, you build it. And in your multiple solutions, you add a reference to the build assembly?</p>
<p>Option 2) Do you mean that<br />
The infrastructure code is in a project on it&#8217;s own, but you include the project and source in your multiple solutions and build the infrastructure with the rest of your solution?</p>
]]></content:encoded>
	</item>
	<item>
		<title>BUY Shigru ONLINE WITHOUT PRESCRIPTION</title>
		<link>http://elegantcode.com/2008/12/02/how-do-you-deal-with-common-infrastructure-code-for-multiple-projects/comment-page-1/#comment-38632</link>
		<dc:creator>Steve Py</dc:creator>
		<pubDate>Wed, 03 Dec 2008 01:56:21 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/?p=1633#comment-38632</guid>
		<description>Option 1.
I&#039;ve recently seen option 2 attempted and it quickly degraded to something like option 3 and went down hill from there.

I generally tread carefully around the concept of a &quot;framework&quot;. I prefer more of a common component library or service provider approach. Frameworks are like closet organizers. They&#039;re conceived to be infinitely flexible, built to the dimensions of a rather confined space, and before you know it you&#039;ve got &quot;something&quot; but with nowhere to put your socks. ;)</description>
		<content:encoded><![CDATA[<p>Option 1.<br />
I&#8217;ve recently seen option 2 attempted and it quickly degraded to something like option 3 and went down hill from there.</p>
<p>I generally tread carefully around the concept of a &#8220;framework&#8221;. I prefer more of a common component library or service provider approach. Frameworks are like closet organizers. They&#8217;re conceived to be infinitely flexible, built to the dimensions of a rather confined space, and before you know it you&#8217;ve got &#8220;something&#8221; but with nowhere to put your socks. <img src='http://elegantcode.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>BUY Shigru ONLINE WITHOUT PRESCRIPTION</title>
		<link>http://elegantcode.com/2008/12/02/how-do-you-deal-with-common-infrastructure-code-for-multiple-projects/comment-page-1/#comment-38603</link>
		<dc:creator>Eddie Garmon</dc:creator>
		<pubDate>Tue, 02 Dec 2008 20:47:44 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/?p=1633#comment-38603</guid>
		<description>@Davy
Yours is a valid option, but if you are trying to create a reusable framework, used on more than one project, then having one true source of depends is the way to go.

We currently have over 20 different applications running off of one framework. The fact that they all reference the same libs means that our build process can build a new framework version, and all apps on that framework, and tell us when we did something stupid.

The other thing is we have a &#039;Deploy&#039; target in our framework project files, so no auto deployment by accident happens. Crutial when working on the framework libs themselves.</description>
		<content:encoded><![CDATA[<p>@Davy<br />
Yours is a valid option, but if you are trying to create a reusable framework, used on more than one project, then having one true source of depends is the way to go.</p>
<p>We currently have over 20 different applications running off of one framework. The fact that they all reference the same libs means that our build process can build a new framework version, and all apps on that framework, and tell us when we did something stupid.</p>
<p>The other thing is we have a &#8216;Deploy&#8217; target in our framework project files, so no auto deployment by accident happens. Crutial when working on the framework libs themselves.</p>
]]></content:encoded>
	</item>
	<item>
		<title>BUY Shigru ONLINE WITHOUT PRESCRIPTION</title>
		<link>http://elegantcode.com/2008/12/02/how-do-you-deal-with-common-infrastructure-code-for-multiple-projects/comment-page-1/#comment-38590</link>
		<dc:creator>Davy Brion</dc:creator>
		<pubDate>Tue, 02 Dec 2008 18:40:07 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/?p=1633#comment-38590</guid>
		<description>@Eddie

i actually prefer to use a &#039;lib&#039; folder for each project where i keep all of the binary dependencies... dependencies are something i&#039;d much rather upgrade manually than getting caught off guard by some kind of automatic update which could break things unexpectedly</description>
		<content:encoded><![CDATA[<p>@Eddie</p>
<p>i actually prefer to use a &#8216;lib&#8217; folder for each project where i keep all of the binary dependencies&#8230; dependencies are something i&#8217;d much rather upgrade manually than getting caught off guard by some kind of automatic update which could break things unexpectedly</p>
]]></content:encoded>
	</item>
</channel>
</rss>

