<?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: Progressive Interfaces</title>
	<atom:link href="http://elegantcode.com/2009/03/21/progressive-interfaces/feed/" rel="self" type="application/rss+xml" />
	<link>http://elegantcode.com/2009/03/21/progressive-interfaces/</link>
	<description></description>
	<lastBuildDate>Wed, 17 Mar 2010 08:54:42 -0500</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Experimenting With Fluent Interfaces in the Domain &#124; Elegant Code</title>
		<link>http://elegantcode.com/2009/03/21/progressive-interfaces/comment-page-1/#comment-46639</link>
		<dc:creator>Experimenting With Fluent Interfaces in the Domain &#124; Elegant Code</dc:creator>
		<pubDate>Tue, 02 Jun 2009 19:59:45 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2009/03/21/progressive-interfaces/#comment-46639</guid>
		<description>[...] you might have guessed from my previous two blog posts, I&#8217;ve been experimenting with fluent interfaces lately. I&#8217;ve been thinking [...]</description>
		<content:encoded><![CDATA[<p>[...] you might have guessed from my previous two blog posts, I&#8217;ve been experimenting with fluent interfaces lately. I&#8217;ve been thinking [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: I&#8217;ve learnt so much from&#8230; &#171; Cav&#8217;s Weblog</title>
		<link>http://elegantcode.com/2009/03/21/progressive-interfaces/comment-page-1/#comment-45650</link>
		<dc:creator>I&#8217;ve learnt so much from&#8230; &#171; Cav&#8217;s Weblog</dc:creator>
		<pubDate>Sun, 26 Apr 2009 10:48:25 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2009/03/21/progressive-interfaces/#comment-45650</guid>
		<description>[...] says quite a lot that he’s made it into my top list of blog-authors. His recent posts on fluent interfaces are typical of the inspirational pots he [...]</description>
		<content:encoded><![CDATA[<p>[...] says quite a lot that he’s made it into my top list of blog-authors. His recent posts on fluent interfaces are typical of the inspirational pots he [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: J. Krempasky</title>
		<link>http://elegantcode.com/2009/03/21/progressive-interfaces/comment-page-1/#comment-44894</link>
		<dc:creator>J. Krempasky</dc:creator>
		<pubDate>Wed, 25 Mar 2009 14:24:48 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2009/03/21/progressive-interfaces/#comment-44894</guid>
		<description>I understand hiding e.g. common system.object members but is it really necessary to hide the other API?

I guess that simpler approach might be for eample following:

builder usage:
var product = ProductBuilder
                        .CreateProduct()
                        .Customized( product =&gt; 
                            {
                                product.Name = &quot;...&quot;;
                                product.Priced = 273;
                             });

Builder code:
public ProductBuilder Customized(Action action)
{
    _actions.Add(action);
    return this;
}

the old builder method would be:
public ProductBuilder Named (string name)
{
    _actions.Add(product =&gt; product.Name = name);
    return this;
}

private Product Build()
{
    var product = new Product();
    // apply modifications
    _actions.ForEach(action =&gt; action(product));
    return product;
}</description>
		<content:encoded><![CDATA[<p>I understand hiding e.g. common system.object members but is it really necessary to hide the other API?</p>
<p>I guess that simpler approach might be for eample following:</p>
<p>builder usage:<br />
var product = ProductBuilder<br />
                        .CreateProduct()<br />
                        .Customized( product =&gt;<br />
                            {<br />
                                product.Name = &#8220;&#8230;&#8221;;<br />
                                product.Priced = 273;<br />
                             });</p>
<p>Builder code:<br />
public ProductBuilder Customized(Action action)<br />
{<br />
    _actions.Add(action);<br />
    return this;<br />
}</p>
<p>the old builder method would be:<br />
public ProductBuilder Named (string name)<br />
{<br />
    _actions.Add(product =&gt; product.Name = name);<br />
    return this;<br />
}</p>
<p>private Product Build()<br />
{<br />
    var product = new Product();<br />
    // apply modifications<br />
    _actions.ForEach(action =&gt; action(product));<br />
    return product;<br />
}</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: David Starr</title>
		<link>http://elegantcode.com/2009/03/21/progressive-interfaces/comment-page-1/#comment-44853</link>
		<dc:creator>David Starr</dc:creator>
		<pubDate>Tue, 24 Mar 2009 05:44:01 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2009/03/21/progressive-interfaces/#comment-44853</guid>
		<description>Jan, I gotta say: This is truly elegant. This is a nicer approach to enabling a discoverable API.

Couple of things: 

This looks like a lot of work. I&#039;m not saying it isn&#039;t worth it, particularly for a public facing API. It just looks like something that can get out of hand with a larger and more substantial problem space.

What would be interesting here is to provide the progressions in order, so that a logical chain of calls could be enforced. Methods could then be chained in a stateful way. Don&#039;t know that this is a good idea, but interesting, eh?

Of course, this could be done with a ridiculous chain of tiny interfaces using the method you prescribe here. Perhaps contracts in C#4 will offer something here. I haven&#039;t looked yet.</description>
		<content:encoded><![CDATA[<p>Jan, I gotta say: This is truly elegant. This is a nicer approach to enabling a discoverable API.</p>
<p>Couple of things: </p>
<p>This looks like a lot of work. I&#8217;m not saying it isn&#8217;t worth it, particularly for a public facing API. It just looks like something that can get out of hand with a larger and more substantial problem space.</p>
<p>What would be interesting here is to provide the progressions in order, so that a logical chain of calls could be enforced. Methods could then be chained in a stateful way. Don&#8217;t know that this is a good idea, but interesting, eh?</p>
<p>Of course, this could be done with a ridiculous chain of tiny interfaces using the method you prescribe here. Perhaps contracts in C#4 will offer something here. I haven&#8217;t looked yet.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Reflective Perspective - Chris Alcock &#187; The Morning Brew #312</title>
		<link>http://elegantcode.com/2009/03/21/progressive-interfaces/comment-page-1/#comment-44827</link>
		<dc:creator>Reflective Perspective - Chris Alcock &#187; The Morning Brew #312</dc:creator>
		<pubDate>Mon, 23 Mar 2009 08:29:54 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2009/03/21/progressive-interfaces/#comment-44827</guid>
		<description>[...] Progressive Interfaces - Jan Van Ryswyck looks at the evolution of Fluent Interfaces into Progressive interfaces helping to make the aPI more discoverable [...]</description>
		<content:encoded><![CDATA[<p>[...] Progressive Interfaces &#8211; Jan Van Ryswyck looks at the evolution of Fluent Interfaces into Progressive interfaces helping to make the aPI more discoverable [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jan Van Ryswyck</title>
		<link>http://elegantcode.com/2009/03/21/progressive-interfaces/comment-page-1/#comment-44825</link>
		<dc:creator>Jan Van Ryswyck</dc:creator>
		<pubDate>Mon, 23 Mar 2009 06:34:54 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2009/03/21/progressive-interfaces/#comment-44825</guid>
		<description>@Jordan: Thx for the tip. Nice one.</description>
		<content:encoded><![CDATA[<p>@Jordan: Thx for the tip. Nice one.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jordan Terrell</title>
		<link>http://elegantcode.com/2009/03/21/progressive-interfaces/comment-page-1/#comment-44808</link>
		<dc:creator>Jordan Terrell</dc:creator>
		<pubDate>Sun, 22 Mar 2009 21:06:16 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2009/03/21/progressive-interfaces/#comment-44808</guid>
		<description>Applying the technique found at the following URL will make using IntelliSense to interrogate the fluent API even easier:

http://www.clariusconsulting.net/blogs/kzu/archive/2008/03/10/58301.aspx</description>
		<content:encoded><![CDATA[<p>Applying the technique found at the following URL will make using IntelliSense to interrogate the fluent API even easier:</p>
<p><a href="http://www.clariusconsulting.net/blogs/kzu/archive/2008/03/10/58301.aspx" rel="nofollow">http://www.clariusconsulting.net/blogs/kzu/archive/2008/03/10/58301.aspx</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dew Drop - Weekend Edition - March 21-22, 2009 &#124; Alvin Ashcraft's Morning Dew</title>
		<link>http://elegantcode.com/2009/03/21/progressive-interfaces/comment-page-1/#comment-44794</link>
		<dc:creator>Dew Drop - Weekend Edition - March 21-22, 2009 &#124; Alvin Ashcraft's Morning Dew</dc:creator>
		<pubDate>Sun, 22 Mar 2009 12:37:09 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2009/03/21/progressive-interfaces/#comment-44794</guid>
		<description>[...] Progressive Interfaces (Jan Van Ryswyck) [...]</description>
		<content:encoded><![CDATA[<p>[...] Progressive Interfaces (Jan Van Ryswyck) [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Wookie</title>
		<link>http://elegantcode.com/2009/03/21/progressive-interfaces/comment-page-1/#comment-44785</link>
		<dc:creator>Wookie</dc:creator>
		<pubDate>Sun, 22 Mar 2009 06:20:31 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2009/03/21/progressive-interfaces/#comment-44785</guid>
		<description>What is the difference of this approach and simply exposing setters for Name, Manufacturer etc?</description>
		<content:encoded><![CDATA[<p>What is the difference of this approach and simply exposing setters for Name, Manufacturer etc?</p>
]]></content:encoded>
	</item>
</channel>
</rss>
