<?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: API breaks can make or break a project</title>
	<atom:link href="http://martijndashorst.com/blog/2007/03/08/api-breaks-can-make-or-break-a-project/feed/" rel="self" type="application/rss+xml" />
	<link>http://martijndashorst.com/blog/2007/03/08/api-breaks-can-make-or-break-a-project/</link>
	<description>Ramblings on Java, Wicket, cats and other stuff</description>
	<lastBuildDate>Mon, 05 Dec 2011 20:15:59 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
	<item>
		<title>By: Wannabe WicketUser</title>
		<link>http://martijndashorst.com/blog/2007/03/08/api-breaks-can-make-or-break-a-project/comment-page-1/#comment-1362</link>
		<dc:creator>Wannabe WicketUser</dc:creator>
		<pubDate>Sun, 08 Apr 2007 23:05:13 +0000</pubDate>
		<guid isPermaLink="false">http://martijndashorst.com/blog/2007/03/08/api-breaks-can-make-or-break-a-project/#comment-1362</guid>
		<description>Hi guys,

I&#039;m new to Wicket, and I have just read this article. I&#039;m sorry if I misunderstood something.

I&#039;m wondering if there is a way to keep the constructor change optional. 

I imagined a simple helper/utility class, which would keep the current state of the component tree (path), a stack, basically. The implementation of this class should be a ThreadLocal variable, of course. That might be a little bit dirty for some of you, but will work.

Suppose, you have an 1.x Wicket app. In each (old style) constructor you could call this helper class twice (push/pop the tree element, at the beginning/end of the code). That makes 2 lines of code per component. That is not much tradeoff I suppose.

The Wicket API should keep the old (parentless) constructors (perhaps marked as deprecated), and they should look for the parent component from that component tree helper class.

I understand that it might require a large amount of work to keep the old API, but you could reach both goals - new features and backward compatibility.

Regards,
    Gabor</description>
		<content:encoded><![CDATA[<p>Hi guys,</p>
<p>I&#8217;m new to Wicket, and I have just read this article. I&#8217;m sorry if I misunderstood something.</p>
<p>I&#8217;m wondering if there is a way to keep the constructor change optional. </p>
<p>I imagined a simple helper/utility class, which would keep the current state of the component tree (path), a stack, basically. The implementation of this class should be a ThreadLocal variable, of course. That might be a little bit dirty for some of you, but will work.</p>
<p>Suppose, you have an 1.x Wicket app. In each (old style) constructor you could call this helper class twice (push/pop the tree element, at the beginning/end of the code). That makes 2 lines of code per component. That is not much tradeoff I suppose.</p>
<p>The Wicket API should keep the old (parentless) constructors (perhaps marked as deprecated), and they should look for the parent component from that component tree helper class.</p>
<p>I understand that it might require a large amount of work to keep the old API, but you could reach both goals &#8211; new features and backward compatibility.</p>
<p>Regards,<br />
    Gabor</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ZedroS</title>
		<link>http://martijndashorst.com/blog/2007/03/08/api-breaks-can-make-or-break-a-project/comment-page-1/#comment-818</link>
		<dc:creator>ZedroS</dc:creator>
		<pubDate>Tue, 13 Mar 2007 07:50:27 +0000</pubDate>
		<guid isPermaLink="false">http://martijndashorst.com/blog/2007/03/08/api-breaks-can-make-or-break-a-project/#comment-818</guid>
		<description>Hum, I don&#039;t get it properly : so at the end of the day will all the constructor change be left over and all its benefits lost ?

Or will we have them in &quot;another way&quot; ?

Personally, if this constructor changes is such a good stuff, I would rather like to have it. :$

And what would happen next time a ground breaking innovation is found and changing the API ? Will it be left as well ?

Just a side question : would it be possible to have this constructor change available in some kind of extension project ?</description>
		<content:encoded><![CDATA[<p>Hum, I don&#8217;t get it properly : so at the end of the day will all the constructor change be left over and all its benefits lost ?</p>
<p>Or will we have them in &#8220;another way&#8221; ?</p>
<p>Personally, if this constructor changes is such a good stuff, I would rather like to have it. :$</p>
<p>And what would happen next time a ground breaking innovation is found and changing the API ? Will it be left as well ?</p>
<p>Just a side question : would it be possible to have this constructor change available in some kind of extension project ?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Eelco</title>
		<link>http://martijndashorst.com/blog/2007/03/08/api-breaks-can-make-or-break-a-project/comment-page-1/#comment-789</link>
		<dc:creator>Eelco</dc:creator>
		<pubDate>Sun, 11 Mar 2007 00:52:07 +0000</pubDate>
		<guid isPermaLink="false">http://martijndashorst.com/blog/2007/03/08/api-breaks-can-make-or-break-a-project/#comment-789</guid>
		<description>@al raichu. I think the problem with building software (and anything in life) is that you can&#039;t have it all. The end of the day, you have to choose between tradeoffs. Now, the constructor change was something we truly believed was going to make our framework a lot better. We didn&#039;t implement it right away, as we thought it would break too many clients etc. From a &#039;management&#039; point of view, I believe that decision was bad; had we done it right away, we wouldn&#039;t have had the branch problem. Otoh, had we done it, we would have ended up with the new constructor being the default, of which we now doubt it is better.

And that doubt expresses best what is going on here. There are still pros and cons for both. They seem to be more balanced now that we have actual experience with it, maybe with a slight preference to the old method. And when the the advantage isn&#039;t that clear, we believe we really should choose for the solution that most people are working with now, and get rid of the big overhead that maintaining two branches is.

So, I don&#039;t think the constructor change was all bad. It&#039;s just that the gain isn&#039;t as large as we expected, and is generally not worth maintaining a separate branch and fragmented user base for.</description>
		<content:encoded><![CDATA[<p>@al raichu. I think the problem with building software (and anything in life) is that you can&#8217;t have it all. The end of the day, you have to choose between tradeoffs. Now, the constructor change was something we truly believed was going to make our framework a lot better. We didn&#8217;t implement it right away, as we thought it would break too many clients etc. From a &#8216;management&#8217; point of view, I believe that decision was bad; had we done it right away, we wouldn&#8217;t have had the branch problem. Otoh, had we done it, we would have ended up with the new constructor being the default, of which we now doubt it is better.</p>
<p>And that doubt expresses best what is going on here. There are still pros and cons for both. They seem to be more balanced now that we have actual experience with it, maybe with a slight preference to the old method. And when the the advantage isn&#8217;t that clear, we believe we really should choose for the solution that most people are working with now, and get rid of the big overhead that maintaining two branches is.</p>
<p>So, I don&#8217;t think the constructor change was all bad. It&#8217;s just that the gain isn&#8217;t as large as we expected, and is generally not worth maintaining a separate branch and fragmented user base for.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: el raichu</title>
		<link>http://martijndashorst.com/blog/2007/03/08/api-breaks-can-make-or-break-a-project/comment-page-1/#comment-659</link>
		<dc:creator>el raichu</dc:creator>
		<pubDate>Fri, 09 Mar 2007 12:40:59 +0000</pubDate>
		<guid isPermaLink="false">http://martijndashorst.com/blog/2007/03/08/api-breaks-can-make-or-break-a-project/#comment-659</guid>
		<description>thank goodness!  after all, an open source project is as much a social phenomenon as it is an engineering one.  that&#039;s one of the reasons why i stopped trying to learn tapestry; i&#039;m not that bright or kickass so i couldn&#039;t keep up back then.

there are a few times when it all boils back down to &quot;worse is better&quot;: simplicity, correctness, consistency, and completeness.  


if the constructor change makes things more complicated, drop it.
if the constructor change makes things more inconsistent, drop it.
if the constructor change doesn&#039;t cover more important situations as is practical than the previous design, drop it.



it&#039;s all about framework &lt;strong&gt;survival&lt;/strong&gt;, and a framework needs users to survive.  if they want generics and can&#039;t get it with wicket, they&#039;ll go somewhere else.  igor vaynberg&#039;s &lt;a href=&quot;http://papernapkin.org/pastebin/view/4900&quot; rel=&quot;nofollow&quot;&gt;code&lt;/a&gt; (http://papernapkin.org/pastebin/view/4900) makes me wanna go somewhere else. </description>
		<content:encoded><![CDATA[<p>thank goodness!  after all, an open source project is as much a social phenomenon as it is an engineering one.  that&#8217;s one of the reasons why i stopped trying to learn tapestry; i&#8217;m not that bright or kickass so i couldn&#8217;t keep up back then.</p>
<p>there are a few times when it all boils back down to &#8220;worse is better&#8221;: simplicity, correctness, consistency, and completeness.  </p>
<p>if the constructor change makes things more complicated, drop it.<br />
if the constructor change makes things more inconsistent, drop it.<br />
if the constructor change doesn&#8217;t cover more important situations as is practical than the previous design, drop it.</p>
<p>it&#8217;s all about framework <strong>survival</strong>, and a framework needs users to survive.  if they want generics and can&#8217;t get it with wicket, they&#8217;ll go somewhere else.  igor vaynberg&#8217;s <a href="http://papernapkin.org/pastebin/view/4900" rel="nofollow">code</a> (<a href="http://papernapkin.org/pastebin/view/4900" rel="nofollow">http://papernapkin.org/pastebin/view/4900</a>) makes me wanna go somewhere else. </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: saki</title>
		<link>http://martijndashorst.com/blog/2007/03/08/api-breaks-can-make-or-break-a-project/comment-page-1/#comment-658</link>
		<dc:creator>saki</dc:creator>
		<pubDate>Fri, 09 Mar 2007 10:58:37 +0000</pubDate>
		<guid isPermaLink="false">http://martijndashorst.com/blog/2007/03/08/api-breaks-can-make-or-break-a-project/#comment-658</guid>
		<description>Martijn,
I do not know how many projects are written in 2.0 and in production use - would be interesting to see. I personally think very few. For me the constructor change was definitely big stopper - we even did no try to use 2.0 because I can not imagin to rewrite let say 50 pages  with one or more forms on each with no chance to use refactoring. Because this constructor change means you have to change every f..king component.

So I think loss of 2.0 branch will be minimal, if all goodies (models, conversions) would go to 1.x. 

Hope you will end the discussion soon, so the development can continue. 
Anyway thanks for great work to all wicket developers.
saki</description>
		<content:encoded><![CDATA[<p>Martijn,<br />
I do not know how many projects are written in 2.0 and in production use &#8211; would be interesting to see. I personally think very few. For me the constructor change was definitely big stopper &#8211; we even did no try to use 2.0 because I can not imagin to rewrite let say 50 pages  with one or more forms on each with no chance to use refactoring. Because this constructor change means you have to change every f..king component.</p>
<p>So I think loss of 2.0 branch will be minimal, if all goodies (models, conversions) would go to 1.x. </p>
<p>Hope you will end the discussion soon, so the development can continue.<br />
Anyway thanks for great work to all wicket developers.<br />
saki</p>
]]></content:encoded>
	</item>
</channel>
</rss>

