<?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: Apex Architecture</title>
	<atom:link href="http://gokubi.com/archives/apex-architecture/feed" rel="self" type="application/rss+xml" />
	<link>http://gokubi.com/archives/apex-architecture</link>
	<description></description>
	<lastBuildDate>Tue, 29 Nov 2011 19:15:53 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>By: Gary B</title>
		<link>http://gokubi.com/archives/apex-architecture/comment-page-1#comment-189608</link>
		<dc:creator>Gary B</dc:creator>
		<pubDate>Thu, 10 Sep 2009 08:26:19 +0000</pubDate>
		<guid isPermaLink="false">http://gokubi.com/?p=918#comment-189608</guid>
		<description>Just stumbled across this blog and read the last 2 posts - interesting stuff! Adding you to my iGoogle page :)

I largely agree with your summary at the end. I actually find a lot of my headaches come from managing the lifecycle of workflows and triggers. Trigger fires and makes updates, workflow fires on updates which causes the trigger to fire again. I plan on blogging on this stuff myself but busy winning work right now, but if there&#039;s material already out there, I&#039;d welcome any pointers!</description>
		<content:encoded><![CDATA[<p>Just stumbled across this blog and read the last 2 posts &#8211; interesting stuff! Adding you to my iGoogle page <img src='http://gokubi.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>I largely agree with your summary at the end. I actually find a lot of my headaches come from managing the lifecycle of workflows and triggers. Trigger fires and makes updates, workflow fires on updates which causes the trigger to fire again. I plan on blogging on this stuff myself but busy winning work right now, but if there&#8217;s material already out there, I&#8217;d welcome any pointers!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mike Leach</title>
		<link>http://gokubi.com/archives/apex-architecture/comment-page-1#comment-189516</link>
		<dc:creator>Mike Leach</dc:creator>
		<pubDate>Wed, 09 Sep 2009 04:57:12 +0000</pubDate>
		<guid isPermaLink="false">http://gokubi.com/?p=918#comment-189516</guid>
		<description>I&#039;m guessing &quot;class proliferation&quot; is related to &quot;atomicity&quot; in OO design, and most complex domains need to be atomic (ie lot&#039;s of classes) to be maintainable.

I use the 500 line rule to determine when a class should be refactored into 2 (or 3).

In addition to George&#039;s comment, I would also add the (unspeakable) suggestion of relaxing unit test coverage. Not all objects serve a mission critical purpose or modify persisted data.</description>
		<content:encoded><![CDATA[<p>I&#8217;m guessing &#8220;class proliferation&#8221; is related to &#8220;atomicity&#8221; in OO design, and most complex domains need to be atomic (ie lot&#8217;s of classes) to be maintainable.</p>
<p>I use the 500 line rule to determine when a class should be refactored into 2 (or 3).</p>
<p>In addition to George&#8217;s comment, I would also add the (unspeakable) suggestion of relaxing unit test coverage. Not all objects serve a mission critical purpose or modify persisted data.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Steve</title>
		<link>http://gokubi.com/archives/apex-architecture/comment-page-1#comment-189488</link>
		<dc:creator>Steve</dc:creator>
		<pubDate>Tue, 08 Sep 2009 22:13:43 +0000</pubDate>
		<guid isPermaLink="false">http://gokubi.com/?p=918#comment-189488</guid>
		<description>Thanks George! I know the product folks have some killer Dreamforce sessions on tap addressing design and architecture. It should be great as always.</description>
		<content:encoded><![CDATA[<p>Thanks George! I know the product folks have some killer Dreamforce sessions on tap addressing design and architecture. It should be great as always.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: George Scott</title>
		<link>http://gokubi.com/archives/apex-architecture/comment-page-1#comment-189486</link>
		<dc:creator>George Scott</dc:creator>
		<pubDate>Tue, 08 Sep 2009 22:06:22 +0000</pubDate>
		<guid isPermaLink="false">http://gokubi.com/?p=918#comment-189486</guid>
		<description>Another good post.  Maybe dreamforce needs an apex/visual force design patterns session with input from the community as well as sfdc folks.  A couple quick thoughts.

I don&#039;t go quite as minimal as you are suggesting in the triggers I write.  I mostly pull logic out of trigger and into a class or static method to make it easier to test, reuse code, or enhance code &quot;readability&quot;.  But often testing is the main consideration.  It is sometimes easier to get complete code coverage by attacking individual functions rather than testing at the trigger level.

The fourth question, class proliferation is a real problem in Apex, and something salesforce should address asap.  They really need a proper package/folder hierarchy to organize classes.  Sometimes I will use nested classes to get some form of encapsulation to keep related classes &quot;grouped&quot; together rather than place a lot of classes at the &quot;root&quot; level.  But this does have its own challenges as well.</description>
		<content:encoded><![CDATA[<p>Another good post.  Maybe dreamforce needs an apex/visual force design patterns session with input from the community as well as sfdc folks.  A couple quick thoughts.</p>
<p>I don&#8217;t go quite as minimal as you are suggesting in the triggers I write.  I mostly pull logic out of trigger and into a class or static method to make it easier to test, reuse code, or enhance code &#8220;readability&#8221;.  But often testing is the main consideration.  It is sometimes easier to get complete code coverage by attacking individual functions rather than testing at the trigger level.</p>
<p>The fourth question, class proliferation is a real problem in Apex, and something salesforce should address asap.  They really need a proper package/folder hierarchy to organize classes.  Sometimes I will use nested classes to get some form of encapsulation to keep related classes &#8220;grouped&#8221; together rather than place a lot of classes at the &#8220;root&#8221; level.  But this does have its own challenges as well.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Steve</title>
		<link>http://gokubi.com/archives/apex-architecture/comment-page-1#comment-189482</link>
		<dc:creator>Steve</dc:creator>
		<pubDate>Tue, 08 Sep 2009 19:48:03 +0000</pubDate>
		<guid isPermaLink="false">http://gokubi.com/?p=918#comment-189482</guid>
		<description>My most complex use cases have had to do with Opportunities and related processes. In my old gig we had to do custom rollups, so to get them right you really have to catch all cases.

It seems whenever revenue is involved, things get complex quick.</description>
		<content:encoded><![CDATA[<p>My most complex use cases have had to do with Opportunities and related processes. In my old gig we had to do custom rollups, so to get them right you really have to catch all cases.</p>
<p>It seems whenever revenue is involved, things get complex quick.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mike Leach</title>
		<link>http://gokubi.com/archives/apex-architecture/comment-page-1#comment-189481</link>
		<dc:creator>Mike Leach</dc:creator>
		<pubDate>Tue, 08 Sep 2009 19:45:30 +0000</pubDate>
		<guid isPermaLink="false">http://gokubi.com/?p=918#comment-189481</guid>
		<description>I haven&#039;t yet had a real-world need for a Trigger that handles so many states, so a minimalist design was usually built-in.

What is a common use case that forces this level of refactoring? I&#039;m guessing it&#039;s Opportunity management (?)

-Mike</description>
		<content:encoded><![CDATA[<p>I haven&#8217;t yet had a real-world need for a Trigger that handles so many states, so a minimalist design was usually built-in.</p>
<p>What is a common use case that forces this level of refactoring? I&#8217;m guessing it&#8217;s Opportunity management (?)</p>
<p>-Mike</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Steve</title>
		<link>http://gokubi.com/archives/apex-architecture/comment-page-1#comment-189479</link>
		<dc:creator>Steve</dc:creator>
		<pubDate>Tue, 08 Sep 2009 19:20:46 +0000</pubDate>
		<guid isPermaLink="false">http://gokubi.com/?p=918#comment-189479</guid>
		<description>Thanks Johan! I&#039;ve been moving away from logic-heavy triggers for quite a while. Refactoring a working code base is always low on the priority list!</description>
		<content:encoded><![CDATA[<p>Thanks Johan! I&#8217;ve been moving away from logic-heavy triggers for quite a while. Refactoring a working code base is always low on the priority list!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Johan Liljegren</title>
		<link>http://gokubi.com/archives/apex-architecture/comment-page-1#comment-189476</link>
		<dc:creator>Johan Liljegren</dc:creator>
		<pubDate>Tue, 08 Sep 2009 19:04:28 +0000</pubDate>
		<guid isPermaLink="false">http://gokubi.com/?p=918#comment-189476</guid>
		<description>Excellent, as always. Thanks for your thoughts.
I started thinking about moving logic out of triggers a while back, but haven&#039;t assembled the energy or time to set it off. This post had me thinking again. =)</description>
		<content:encoded><![CDATA[<p>Excellent, as always. Thanks for your thoughts.<br />
I started thinking about moving logic out of triggers a while back, but haven&#8217;t assembled the energy or time to set it off. This post had me thinking again. =)</p>
]]></content:encoded>
	</item>
</channel>
</rss>

