<?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: Extension Methods on Types You Own?</title>
	<atom:link href="http://lostechies.com/keithdahlby/2010/01/25/extension-methods-on-types-you-own/feed/" rel="self" type="application/rss+xml" />
	<link>http://lostechies.com/keithdahlby/2010/01/25/extension-methods-on-types-you-own/</link>
	<description>Git, .NET and more</description>
	<lastBuildDate>Mon, 01 Apr 2013 17:24:00 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
	<item>
		<title>By: DCam</title>
		<link>http://lostechies.com/keithdahlby/2010/01/25/extension-methods-on-types-you-own/#comment-37</link>
		<dc:creator>DCam</dc:creator>
		<pubDate>Mon, 01 Feb 2010 00:35:14 +0000</pubDate>
		<guid isPermaLink="false">/blogs/dahlbyk/archive/2010/01/25/extension-methods-on-types-you-own.aspx#comment-37</guid>
		<description>Seems like a good application of extension methods. Extension methods offer functional abstraction: pulling out common behaviour and putting it somewhere it can be reused or reapplied as appropriate. So, now you can GetOrInsert on any ICacheProvider, no matter what type of ICacheProvider you&#039;re talking about. Brilliant.

I ran in to a similar situation last year, but didn&#039;t put as much clear though in to why it makes sense this way: http://intwoplacesatonce.com/2009/12/in-c-3-5-interface-extension-methods-mixin/</description>
		<content:encoded><![CDATA[<p>Seems like a good application of extension methods. Extension methods offer functional abstraction: pulling out common behaviour and putting it somewhere it can be reused or reapplied as appropriate. So, now you can GetOrInsert on any ICacheProvider, no matter what type of ICacheProvider you&#8217;re talking about. Brilliant.</p>
<p>I ran in to a similar situation last year, but didn&#8217;t put as much clear though in to why it makes sense this way: <a href="http://intwoplacesatonce.com/2009/12/in-c-3-5-interface-extension-methods-mixin/" rel="nofollow">http://intwoplacesatonce.com/2009/12/in-c-3-5-interface-extension-methods-mixin/</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Keith Dahlby</title>
		<link>http://lostechies.com/keithdahlby/2010/01/25/extension-methods-on-types-you-own/#comment-36</link>
		<dc:creator>Keith Dahlby</dc:creator>
		<pubDate>Wed, 27 Jan 2010 02:01:46 +0000</pubDate>
		<guid isPermaLink="false">/blogs/dahlbyk/archive/2010/01/25/extension-methods-on-types-you-own.aspx#comment-36</guid>
		<description>This looks like what Ravi is talking about:
http://ayende.com/Blog/archive/2007/03/11/AOP-With-Windsor-Adding-Caching-to-IRepositoryT-based-on-Ts.aspx</description>
		<content:encoded><![CDATA[<p>This looks like what Ravi is talking about:<br />
<a href="http://ayende.com/Blog/archive/2007/03/11/AOP-With-Windsor-Adding-Caching-to-IRepositoryT-based-on-Ts.aspx" rel="nofollow">http://ayende.com/Blog/archive/2007/03/11/AOP-With-Windsor-Adding-Caching-to-IRepositoryT-based-on-Ts.aspx</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Anon</title>
		<link>http://lostechies.com/keithdahlby/2010/01/25/extension-methods-on-types-you-own/#comment-35</link>
		<dc:creator>Anon</dc:creator>
		<pubDate>Tue, 26 Jan 2010 16:32:22 +0000</pubDate>
		<guid isPermaLink="false">/blogs/dahlbyk/archive/2010/01/25/extension-methods-on-types-you-own.aspx#comment-35</guid>
		<description>Ravi...do you have any examples or can point to any articles on how to implement this? thanks.</description>
		<content:encoded><![CDATA[<p>Ravi&#8230;do you have any examples or can point to any articles on how to implement this? thanks.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Keith Dahlby</title>
		<link>http://lostechies.com/keithdahlby/2010/01/25/extension-methods-on-types-you-own/#comment-34</link>
		<dc:creator>Keith Dahlby</dc:creator>
		<pubDate>Tue, 26 Jan 2010 14:31:22 +0000</pubDate>
		<guid isPermaLink="false">/blogs/dahlbyk/archive/2010/01/25/extension-methods-on-types-you-own.aspx#comment-34</guid>
		<description>@Chris ~ An abstract base class would certainly work in this case - I&#039;ll try to think of an example where it wouldn&#039;t. I&#039;m not overly concerned by the question &quot;where does this live&quot; given IDE tools to Go To Definition, Find References, etc., but I&#039;m sure that varies across teams with varying degrees of comfort with extension methods.

@Ravi ~ How do you handle different caching policies (sliding expiration, absolute expiration, etc) per interface/method with that approach? Sounds like a promising approach.</description>
		<content:encoded><![CDATA[<p>@Chris ~ An abstract base class would certainly work in this case &#8211; I&#8217;ll try to think of an example where it wouldn&#8217;t. I&#8217;m not overly concerned by the question &#8220;where does this live&#8221; given IDE tools to Go To Definition, Find References, etc., but I&#8217;m sure that varies across teams with varying degrees of comfort with extension methods.</p>
<p>@Ravi ~ How do you handle different caching policies (sliding expiration, absolute expiration, etc) per interface/method with that approach? Sounds like a promising approach.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ravi Terala</title>
		<link>http://lostechies.com/keithdahlby/2010/01/25/extension-methods-on-types-you-own/#comment-33</link>
		<dc:creator>Ravi Terala</dc:creator>
		<pubDate>Mon, 25 Jan 2010 18:49:53 +0000</pubDate>
		<guid isPermaLink="false">/blogs/dahlbyk/archive/2010/01/25/extension-methods-on-types-you-own.aspx#comment-33</guid>
		<description>For things like caching that you mentioned, I don&#039;t ever write it as CachedAwesomeRepository  anymore. I wrote a generic caching interceptor, which you can write through Unity/Castle to any interface/virtual class that needs caching abilities. Caching policy and differentiating arguments, etc are configured through an external configuration file.

This helped me configure and add caching to production bits when I want with out changing single line of code or recompiling.</description>
		<content:encoded><![CDATA[<p>For things like caching that you mentioned, I don&#8217;t ever write it as CachedAwesomeRepository  anymore. I wrote a generic caching interceptor, which you can write through Unity/Castle to any interface/virtual class that needs caching abilities. Caching policy and differentiating arguments, etc are configured through an external configuration file.</p>
<p>This helped me configure and add caching to production bits when I want with out changing single line of code or recompiling.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Chris Tavares</title>
		<link>http://lostechies.com/keithdahlby/2010/01/25/extension-methods-on-types-you-own/#comment-32</link>
		<dc:creator>Chris Tavares</dc:creator>
		<pubDate>Mon, 25 Jan 2010 18:06:13 +0000</pubDate>
		<guid isPermaLink="false">/blogs/dahlbyk/archive/2010/01/25/extension-methods-on-types-you-own.aspx#comment-32</guid>
		<description>One could argue you get the same benefits of abstraction and you don&#039;t have the question of &quot;where does this live&quot; if you use an abstract base class instead of an interface.

How often is something going to be an ICacheProvider and something else as well? I personally lean towards using interfaces for orthogonal concerns and base classes for domain concerns.</description>
		<content:encoded><![CDATA[<p>One could argue you get the same benefits of abstraction and you don&#8217;t have the question of &#8220;where does this live&#8221; if you use an abstract base class instead of an interface.</p>
<p>How often is something going to be an ICacheProvider and something else as well? I personally lean towards using interfaces for orthogonal concerns and base classes for domain concerns.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
