Vince Marco wrote:

No, we really don't agree here. It does make a big difference. For an interface to be usefull, you have to extract a lot of what would otherwise have been implementation details: 1) Everything in the interface is public. So methods like initModel (), detachModel(), onBeginRequest() would have to be public, while we decided that these methods should be protected.


You don't need to expose any methods you don't want overridden. You don't lose any control with an interface. In fact, it can be methodless and still be effective. This is certainly cleaner than an abstract class with final methods.


Though these methods - being non public - can be seen as implementation details, they are important details; if we need initModel for further assumptions in our framework. As we need it to be there, we must extract it in any interface we would make.


2) A lot of behavioural things must be pulled out to interfaces for them to be meaningfull. An example of this is the checking of whether all components rendered. This is now implemented in Page.checkRendering() and the render logic of Page. When we would support a page interface, we would have to think of some explicit way of putting this in our inteface. The reason for this is that we give users the configuration option to have render checking done, and configuration is one of the main general Wicket contracts. We now force this part of the contract.


Again an improper assumption. If you wrap the user class (implementing the Page interface) with an implementation wrapper -- decorator, actually -- (on Application.add()), then you don't need to expose any methods you don't want the user to have to implement. The wrapper class can contain the Page.checkRendering() and either look for a method in the user subclass, or just detect an interface flag (ie. ICheckRender). You can do quite a lot through Reflection, WRT using interfaces at runtime without adding methods. An additional benefit is that the user just needs to implement the desired interfaces and the appropriate implementation classes can be wrapped around their class at runtime. I would envision a IPage interface with few, if any, methods -- therefore not requiring the user to implement anything.


The point is that, as an interface is implementation-less, we can't force behaviour. The only things we can force is what methods/ typing is in there, and make clear points about the contract. Having it implemented with final methods in an abstract class absolutely guarantees this it is there, while working with an interface much depends on how far you were able to define your functionality in the exported contract. This is just much harder (thus more work). Look at the spec driven API's as an example that there are allways things that aren't clearly enough defined, resulting in implementation nuances between implementations.


3) going further on 2), introducing interfaces would mean that, besides the fact that adding methods to an interface break clients whereas adding methods to an abstract class don't, in our new situation it would be more difficult for us to change what we currently consider implementation details, as many of those former implementation details would have been extracted to interfaces.


Again, you are assuming that you HAVE to add methods to the interface to be effective. There are other ways of making the interface approach very versatile WITHOUT breaking user's subclasses (ie. adding methods). Additional methods can be added to mixin interfaces as an example. I don't think you and I are that far apart WRT interfaces, but you have made some assumptions WRT their use that limit their value needlessly and do make them intrusive to users. Given those assumptions, I back your design decisions entirely.

Considering is allright. But give us real world problems cq usuages first. If there really are good reasons, I am sure we would consider it. I think our track record of honouring user's wishes is pretty good. But we also want to have the API as tight as it can be, and we just need darn good reasons to change our core assumptions.


The Wicket team certainly has made your stance known. I will not post anymore design ideas to this group. If the mail is overwhelming you, you might consider a forum. Or just dump the emails that are "wasting" your time. I've put forth some good ideas that you guys seem to be "against". That's OK, it's your product. I'm not just thumping the interface bible here, and my reasoning for posting this into the Wicket forum (instead of TSS), is that this you guys have produced a very clean API and I thought you might be open to these ideas to make Wicket even better. I can see that is not the case. Welcome to open source.


We're absolutely not against improvements. Especially not the kind of improvements that help people work with Wicket more effectively. Stylistic improvements can be very worthwhile too, but allways have to go through debates like these, which I don't particularly enjoy on a project specific list, and which might scare users away due to its harsh tone. But maybe I'm just thinking that.

Anyway, I do thank you for seriously trying to get your point across too,

Eelco


Cheers,

Vince



-------------------------------------------------------
SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
from IBM. Find simple to follow Roadmaps, straightforward articles,
informative Webcasts and more! Get everything you need to get up to
speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
_______________________________________________
Wicket-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wicket-user




-------------------------------------------------------
SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
from IBM. Find simple to follow Roadmaps, straightforward articles,
informative Webcasts and more! Get everything you need to get up to
speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
_______________________________________________
Wicket-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wicket-user

Reply via email to