<?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: Elegant Code Project Structure Purse Fight</title>
	<atom:link href="http://elegantcode.com/2009/06/28/elegant-code-project-structure-purse-fight/feed/" rel="self" type="application/rss+xml" />
	<link>http://elegantcode.com/2009/06/28/elegant-code-project-structure-purse-fight/</link>
	<description></description>
	<lastBuildDate>Tue, 16 Mar 2010 18:16:58 -0500</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: HK</title>
		<link>http://elegantcode.com/2009/06/28/elegant-code-project-structure-purse-fight/comment-page-1/#comment-47406</link>
		<dc:creator>HK</dc:creator>
		<pubDate>Thu, 02 Jul 2009 15:03:32 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2009/06/28/elegant-code-project-structure-purse-fight/#comment-47406</guid>
		<description>Another take on this topic (based upon commercial software product developments that cross application boundries).

In hierarchical order:

$App.Utility       (reference nothing)
      \Math        (Utility functions)
      \IO          (Utility functions)
      \Graphic     (Utility functions)
      \Xml         (Utility functions)

$App.Commons       (reference only $App.Utility)
      \Entity      (domain) 
      \Contract    (domain)
      Constants.cs (enums, etc.)

$App.Web           (reference only $App.Commons   Controls   Utility   Presenters)
      \Api         (usually REST/ASMX based API gateway talking ONLY to Presenters)
      \Language    (XML based localization files that cross app boundaries [no .RESX]) 

$App.Web.Widgets   (reference nothing)
      \Controls    (Server Controls)

$App.Presenters    (reference anything, except $App.Data   Web)
      \Presenter   (domain aware, calls $App.Business)
      \Helpers     (domain aware, UI technology aware)
          ResourceHelper.cs

$App.Business      (reference anything, except $App.Presenters   Web)
      \xxx-Manager (domain aware, calls $App.Data)
      \yyy-Manager (domain aware, calls $App.Data)
      \zzz-Manager (domain aware, calls $App.Data)

$App.Data          (reference only $App.Commmons)
      \Repository  (persistence)
      \SQL         (create DATABASE objects)

Notes:

1. $App.Utility &amp; $App.Commons can be used, referenced anywhere, and will typically cross application boundaries (e.g. travel through API, get used by &quot;add-on&quot; products).
2. $App.Presenters is the linch-pin: all API calls and web UI go through this (single version of the truth?).
3. $App.Commons never carries any &quot;excess baggage&quot; to ensure that Entity classes (Value Objects) are not decorated with technology/framework specific Attributes.
4. Localization is a first-class citizen across the entire application stack, AND needs to be accessible by &quot;add-on&quot; or third-party applications.</description>
		<content:encoded><![CDATA[<p>Another take on this topic (based upon commercial software product developments that cross application boundries).</p>
<p>In hierarchical order:</p>
<p>$App.Utility       (reference nothing)<br />
      \Math        (Utility functions)<br />
      \IO          (Utility functions)<br />
      \Graphic     (Utility functions)<br />
      \Xml         (Utility functions)</p>
<p>$App.Commons       (reference only $App.Utility)<br />
      \Entity      (domain)<br />
      \Contract    (domain)<br />
      Constants.cs (enums, etc.)</p>
<p>$App.Web           (reference only $App.Commons   Controls   Utility   Presenters)<br />
      \Api         (usually REST/ASMX based API gateway talking ONLY to Presenters)<br />
      \Language    (XML based localization files that cross app boundaries [no .RESX]) </p>
<p>$App.Web.Widgets   (reference nothing)<br />
      \Controls    (Server Controls)</p>
<p>$App.Presenters    (reference anything, except $App.Data   Web)<br />
      \Presenter   (domain aware, calls $App.Business)<br />
      \Helpers     (domain aware, UI technology aware)<br />
          ResourceHelper.cs</p>
<p>$App.Business      (reference anything, except $App.Presenters   Web)<br />
      \xxx-Manager (domain aware, calls $App.Data)<br />
      \yyy-Manager (domain aware, calls $App.Data)<br />
      \zzz-Manager (domain aware, calls $App.Data)</p>
<p>$App.Data          (reference only $App.Commmons)<br />
      \Repository  (persistence)<br />
      \SQL         (create DATABASE objects)</p>
<p>Notes:</p>
<p>1. $App.Utility &amp; $App.Commons can be used, referenced anywhere, and will typically cross application boundaries (e.g. travel through API, get used by &#8220;add-on&#8221; products).<br />
2. $App.Presenters is the linch-pin: all API calls and web UI go through this (single version of the truth?).<br />
3. $App.Commons never carries any &#8220;excess baggage&#8221; to ensure that Entity classes (Value Objects) are not decorated with technology/framework specific Attributes.<br />
4. Localization is a first-class citizen across the entire application stack, AND needs to be accessible by &#8220;add-on&#8221; or third-party applications.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Round Up No.3 &#171; DevRoundUp.net</title>
		<link>http://elegantcode.com/2009/06/28/elegant-code-project-structure-purse-fight/comment-page-1/#comment-47351</link>
		<dc:creator>Round Up No.3 &#171; DevRoundUp.net</dc:creator>
		<pubDate>Tue, 30 Jun 2009 21:47:14 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2009/06/28/elegant-code-project-structure-purse-fight/#comment-47351</guid>
		<description>[...] Elegant Code Project Structure Purse Fight: The Elegant Code guys discuss project structure, and how they prefer to layout their solutions. [...]</description>
		<content:encoded><![CDATA[<p>[...] Elegant Code Project Structure Purse Fight: The Elegant Code guys discuss project structure, and how they prefer to layout their solutions. [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Brian Lagunas</title>
		<link>http://elegantcode.com/2009/06/28/elegant-code-project-structure-purse-fight/comment-page-1/#comment-47349</link>
		<dc:creator>Brian Lagunas</dc:creator>
		<pubDate>Tue, 30 Jun 2009 19:29:09 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2009/06/28/elegant-code-project-structure-purse-fight/#comment-47349</guid>
		<description>I also like seperate projects. I personally don&#039;t let the speed of a solution loading dictate the structure of my solution.  As Richard mentioned, it also lends itself to code reuse and more felxibility for expanding.  This is especially useful when using the PRISM framework, where you reuse 80% of your code in different types of projects, web, silverlight, wpf, or win forms.</description>
		<content:encoded><![CDATA[<p>I also like seperate projects. I personally don&#8217;t let the speed of a solution loading dictate the structure of my solution.  As Richard mentioned, it also lends itself to code reuse and more felxibility for expanding.  This is especially useful when using the PRISM framework, where you reuse 80% of your code in different types of projects, web, silverlight, wpf, or win forms.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Richard</title>
		<link>http://elegantcode.com/2009/06/28/elegant-code-project-structure-purse-fight/comment-page-1/#comment-47320</link>
		<dc:creator>Richard</dc:creator>
		<pubDate>Mon, 29 Jun 2009 15:55:03 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2009/06/28/elegant-code-project-structure-purse-fight/#comment-47320</guid>
		<description>I like Multiple projects personally, and I don&#039;t really agree with the Idea that it&#039;s putting Handcuffs on the developer, it&#039;s more of creating a structure that allows expandability.  

This is very helpful when your developing applications with multiple UIs, for example I have web applications that are public facing on one set of web servers, have a web service interface on another set of servers, and an internal admin on another set of servers.  Next I have multiple applications that use the same data but in different ways, so by breaking the DAL into it&#039;s own project I get away from having a huge BIZ that&#039;s everything to everyone.  Honestly, are multiple assemblies really that hard  to deal with?  Plus by breaking it into multiple Assemblies means you can reuse your assemblies as libs in more then one applications, and not just coping and pasting the code.

My preference is to have 4 projects (UI, BIZ, DAL, OBJECTS(entities, interfaces, etc.)) and then test projects for each one.  This way it forces good design, and gives me the flexibility to expand the application easily, I&#039;ve been bitten too may times by the this functionality will only be used by this application, 2 projects later, needing to include the same functionality.</description>
		<content:encoded><![CDATA[<p>I like Multiple projects personally, and I don&#8217;t really agree with the Idea that it&#8217;s putting Handcuffs on the developer, it&#8217;s more of creating a structure that allows expandability.  </p>
<p>This is very helpful when your developing applications with multiple UIs, for example I have web applications that are public facing on one set of web servers, have a web service interface on another set of servers, and an internal admin on another set of servers.  Next I have multiple applications that use the same data but in different ways, so by breaking the DAL into it&#8217;s own project I get away from having a huge BIZ that&#8217;s everything to everyone.  Honestly, are multiple assemblies really that hard  to deal with?  Plus by breaking it into multiple Assemblies means you can reuse your assemblies as libs in more then one applications, and not just coping and pasting the code.</p>
<p>My preference is to have 4 projects (UI, BIZ, DAL, OBJECTS(entities, interfaces, etc.)) and then test projects for each one.  This way it forces good design, and gives me the flexibility to expand the application easily, I&#8217;ve been bitten too may times by the this functionality will only be used by this application, 2 projects later, needing to include the same functionality.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dew Drop &#8211; June 29, 2009 &#124; Alvin Ashcraft's Morning Dew</title>
		<link>http://elegantcode.com/2009/06/28/elegant-code-project-structure-purse-fight/comment-page-1/#comment-47316</link>
		<dc:creator>Dew Drop &#8211; June 29, 2009 &#124; Alvin Ashcraft's Morning Dew</dc:creator>
		<pubDate>Mon, 29 Jun 2009 13:34:30 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2009/06/28/elegant-code-project-structure-purse-fight/#comment-47316</guid>
		<description>[...] Elegant Code Project Structure Purse Fight (Chris Brandsma) [...]</description>
		<content:encoded><![CDATA[<p>[...] Elegant Code Project Structure Purse Fight (Chris Brandsma) [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Reflective Perspective - Chris Alcock &#187; The Morning Brew #378</title>
		<link>http://elegantcode.com/2009/06/28/elegant-code-project-structure-purse-fight/comment-page-1/#comment-47304</link>
		<dc:creator>Reflective Perspective - Chris Alcock &#187; The Morning Brew #378</dc:creator>
		<pubDate>Mon, 29 Jun 2009 07:18:48 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2009/06/28/elegant-code-project-structure-purse-fight/#comment-47304</guid>
		<description>[...] Elegant Code Project Structure Purse Fight - Chris Brandsma posts a summary of a recent healthy discussion on the Elegant Code private mailing list looking at the great debate of how to structure your .NET Solutions [...]</description>
		<content:encoded><![CDATA[<p>[...] Elegant Code Project Structure Purse Fight &#8211; Chris Brandsma posts a summary of a recent healthy discussion on the Elegant Code private mailing list looking at the great debate of how to structure your .NET Solutions [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tony Rasa</title>
		<link>http://elegantcode.com/2009/06/28/elegant-code-project-structure-purse-fight/comment-page-1/#comment-47295</link>
		<dc:creator>Tony Rasa</dc:creator>
		<pubDate>Mon, 29 Jun 2009 04:20:35 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2009/06/28/elegant-code-project-structure-purse-fight/#comment-47295</guid>
		<description>i&#039;m ok with capitol letters, its the capital ones that i have a problem with :)</description>
		<content:encoded><![CDATA[<p>i&#8217;m ok with capitol letters, its the capital ones that i have a problem with <img src='http://elegantcode.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
</channel>
</rss>
