<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.3.3" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>
<channel>
	<title>Comments on: I Heart Template Method</title>
	<link>http://laribee.com/blog/2007/03/21/i-heart-template-method/</link>
	<description>a yeah yeah, i push models like weight</description>
	<pubDate>Thu, 21 Aug 2008 22:32:59 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.3</generator>
		<item>
		<title>By: the &#8216;bee log / Refactoring My Template Method Post</title>
		<link>http://laribee.com/blog/2007/03/21/i-heart-template-method/#comment-4555</link>
		<dc:creator>the &#8216;bee log / Refactoring My Template Method Post</dc:creator>
		<pubDate>Wed, 18 Apr 2007 02:54:44 +0000</pubDate>
		<guid>http://laribee.com/blog/2007/03/21/i-heart-template-method/#comment-4555</guid>
		<description>[...] I Heart Template Method  [...]</description>
		<content:encoded><![CDATA[<p>[&#8230;] I Heart Template Method  [&#8230;]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Evan</title>
		<link>http://laribee.com/blog/2007/03/21/i-heart-template-method/#comment-4113</link>
		<dc:creator>Evan</dc:creator>
		<pubDate>Wed, 11 Apr 2007 03:32:16 +0000</pubDate>
		<guid>http://laribee.com/blog/2007/03/21/i-heart-template-method/#comment-4113</guid>
		<description>another interesting tidbit i picked up while reading Pugh's Interface Oriented Programming..

it's easier to refactor into an inheritance hierarchy from interfaces than to refactor to interfaces from an inheritance hierarchy..

i'm slowly becoming less and less of a fan of layer supertypes..

the other thing that jumped out at me was that interfaces represent a CAN DO relationship (which popped on a light bulb for me).. shortly thereafter i refactored the security roles and permissions of our app to support a new interface IAssertable.. ;-)</description>
		<content:encoded><![CDATA[<p>another interesting tidbit i picked up while reading Pugh&#8217;s Interface Oriented Programming..</p>
<p>it&#8217;s easier to refactor into an inheritance hierarchy from interfaces than to refactor to interfaces from an inheritance hierarchy..</p>
<p>i&#8217;m slowly becoming less and less of a fan of layer supertypes..</p>
<p>the other thing that jumped out at me was that interfaces represent a CAN DO relationship (which popped on a light bulb for me).. shortly thereafter i refactored the security roles and permissions of our app to support a new interface IAssertable.. ;-)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dave</title>
		<link>http://laribee.com/blog/2007/03/21/i-heart-template-method/#comment-4076</link>
		<dc:creator>Dave</dc:creator>
		<pubDate>Tue, 10 Apr 2007 15:33:18 +0000</pubDate>
		<guid>http://laribee.com/blog/2007/03/21/i-heart-template-method/#comment-4076</guid>
		<description>Yeah, it's pretty handy.

I have a new and very long post coming out today on how to get implement a POCO template method using generics in response to Evan's comment above about violating SRP/OCP. I'd be interested in your feedback on that.</description>
		<content:encoded><![CDATA[<p>Yeah, it&#8217;s pretty handy.</p>
<p>I have a new and very long post coming out today on how to get implement a POCO template method using generics in response to Evan&#8217;s comment above about violating SRP/OCP. I&#8217;d be interested in your feedback on that.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jeffrey Palermo</title>
		<link>http://laribee.com/blog/2007/03/21/i-heart-template-method/#comment-4074</link>
		<dc:creator>Jeffrey Palermo</dc:creator>
		<pubDate>Tue, 10 Apr 2007 15:18:49 +0000</pubDate>
		<guid>http://laribee.com/blog/2007/03/21/i-heart-template-method/#comment-4074</guid>
		<description>I share the love for the Template method. With inheritence hierarchies I find myself using it ALL the time.</description>
		<content:encoded><![CDATA[<p>I share the love for the Template method. With inheritence hierarchies I find myself using it ALL the time.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Evan</title>
		<link>http://laribee.com/blog/2007/03/21/i-heart-template-method/#comment-3967</link>
		<dc:creator>Evan</dc:creator>
		<pubDate>Mon, 09 Apr 2007 04:23:17 +0000</pubDate>
		<guid>http://laribee.com/blog/2007/03/21/i-heart-template-method/#comment-3967</guid>
		<description>one tiny suggestion for this object, instead of building the "one object to rule them all" base class, you could do the following:

create an interface IExecutable with one method, Execute()

then build a class for each technical concern (logging, transactions, security, eventing aka observation, caching)..

each of the classes can implement IExecutable and take another IExecutable in their constructor..it's a simple way to layer each on top while keeping true to the single responsibility and open/closed principles..each class performs its responsibility and then delegates to the next object (passed into the constructor) until the final object gets executed (the real Task object).. it gives you the freedom to change one technical concern without affecting the others..or providing multiple implementations of a particular concern (ie..two caching modes). you can also apply some concerns to some tasks while leaving others off (or rearranging the order of execution).. you can think of them as mini-layers on top of your task object (which also implements IExecutable)

you can either wire the whole thing up with a DI container or create a factory to add the objects onto the task objects (depending on the app)</description>
		<content:encoded><![CDATA[<p>one tiny suggestion for this object, instead of building the &#8220;one object to rule them all&#8221; base class, you could do the following:</p>
<p>create an interface IExecutable with one method, Execute()</p>
<p>then build a class for each technical concern (logging, transactions, security, eventing aka observation, caching)..</p>
<p>each of the classes can implement IExecutable and take another IExecutable in their constructor..it&#8217;s a simple way to layer each on top while keeping true to the single responsibility and open/closed principles..each class performs its responsibility and then delegates to the next object (passed into the constructor) until the final object gets executed (the real Task object).. it gives you the freedom to change one technical concern without affecting the others..or providing multiple implementations of a particular concern (ie..two caching modes). you can also apply some concerns to some tasks while leaving others off (or rearranging the order of execution).. you can think of them as mini-layers on top of your task object (which also implements IExecutable)</p>
<p>you can either wire the whole thing up with a DI container or create a factory to add the objects onto the task objects (depending on the app)</p>
]]></content:encoded>
	</item>
</channel>
</rss>
