in fact, maybe the idea that the component is needed at all is the hack... just musing...

Jonathan Locke wrote:


i don't think so. i think the other idea is a hack. how can an interface to a component that's pagable not yield the component that's to be paged? it makes perfect sense to me.

Igor Vaynberg wrote:

Just thought of adding getComponent() to IPageableComponent, still a hack in
my opinion.

-Igor


-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Igor Vaynberg
Sent: Tuesday, August 02, 2005 5:04 PM
To: wicket-user@lists.sourceforge.net
Subject: RE: [Wicket-user] Sigin Example

I can see your point. My thinking has always been that any abstract class has an implicit interface which is the sum of its public methods, and that there really is no difference between evolving public methods in an abstract class and evolving an interface and its single implementation. This is of course different when an interface is intended as a joint point between two systems or when alternate implementations are expected.

I am far more interested in finding a good solution for the IPageableComponent than discussing philosophies.

The need for this arose when I was writing DataView. I wanted to reuse navigation components that worked with listview, such as PageableListViewNavigation, PageableListViewNavigationLink, etc. In their current state they were tightly coupled to listview, so I had to decouple them, thus the IPageableComponent interface. Inside it it has all the methods that those navigation components need to manipulate the listview, so now instead of getting the listview directly they get an instance of IPageableComponent and do the manipulation through that.

Now all my dataview had to do is implement IPageableComponent and it could magically be navigated by the navigation components.

Pretty clean and simple, however, the navigation components expect IPageableComponent to also be a component. For example, PageableListViewNavigationLink needs access to the page that the pageable component is on. Because of this I had to add a Page getPage() implemented by Component to the interface. This is the part that I am trying to find a cleaner solution for, and this is why I suggested Icomponent. If we had Icomponent IPageableComponent could extend that and also be used as a regular component. An alternate solution I can see is to get rid of IPageableComponent and use a PageableAdapter class with a getComponent() method inside. So instead of PageableListViewLink(...., dataview) it would be PageableListViewLink(...., new PageableAdapter(dataview)). This solution seems a bit unnatural to me because it goes around the inheritance hirarchy.

What are your thoughts?

Thanks,
Igor


-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf

Of Jonathan
Locke
Sent: Tuesday, August 02, 2005 3:41 PM
To: wicket-user@lists.sourceforge.net
Subject: Re: [Wicket-user] Sigin Example


Igor Vaynberg wrote:

Jonathan,

Could you please elaborate on why interfaces are "fragile".

It doesn't
click for me. How is it more fragile to have an interface

and a single
implementation as opposed to a base class with no interface?



an interface is fragile because it is an inflexible, fixed

contract.
it really is /set in stone/ for a large project with a long

lifespan
(which we all hope wicket will be).
if you think about it, on a very widely used framework you

really can
never ever change an interface. ever. i don't know about

you... but
i'm not smart enough to get an interface with more than a couple of methods right the first time and for all time. i usually discover weeks or months later (or days or hours...
DOH!) that i
forgot something.  that's the fragility i'm talking about.

i believe that one shouldn't generally define interfaces for things that have contracts that are likely to evolve. especially if they are likely to evolve significantly

and/or rapidly.
if you have more than a few methods, the odds seem to increase exponentially with each added method that you'll eventually

have that
DOH! moment where you realize that you didn't really fully

understand
the contract you long ago (or not so long ago) thought was so clever...

an abstract base class has all the abstractness of an

interface, but
allows flexible default implementation that is not fixed

for all time.
you can think of it very loosely as a mixture between a

class and an
interface if you like.
non-abstract methods can at least be added even if the existing abstract methods can't be changed without breaking the world. interestingly, you can also theoretically /remove/ the

abstractness of
abstract methods (loosening the
contract) without breaking subclasses by concretizing

methods later.
in any case, for things that need the ability to evolve in the way that Component has (take a look at the revision history, we're on version #164 of that file... and I don't think that includes 100+

versions of
that code from my original codebase), an interface doesn't

make sense
unless there's some other urgent, overriding need for it.

in general, there can be other arguments that override the disadvantage of interface inflexibility, such as a requirement to allow alternate implementations not based on the same root functionality, enabling mix-in usage or some other usage

driven need
like making something Remote. none of these seemed or seem like important factors in wicket.

As far as mixins go, I only ran into one situation so far. The IPageableComponent interface has to have getPage() method

which really
has nothing to do with the implementation being pageable,

but with the
fact that it is a component. Everything that uses

IPageableComponent
expects a component with pageable behaviour, not just a pageable something. Im not screaming interfaces for everything, but

in this case it would be nice.



i don't know enough about this case to comment. but i

highly suspect
that there is some answer that doesn't involve making Component or Page an interface.

Thanks,
Igor







-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf

Of Jonathan
Locke
Sent: Tuesday, August 02, 2005 2:29 PM
To: wicket-user@lists.sourceforge.net
Subject: Re: [Wicket-user] Sigin Example


i think you're awfully, awfully full of yourself (in fact,

you sound
like me about 10 years ago... ;-)). have you even considered the possibility that it might be /you/ that doesn't get it?

from my perspective:

  loose coupled interfaces == bell bottom jeans

people think that they're the solution to everything right now.
and just like bell bottom jeans, some people really did

look good in
them.  they were cool.  but what were we thinking!?
does /everyone/ look good in bell bottom jeans? hardly. just watch "that 70's show" sometime... the neighbor guy

with the
curly hair.
he's an example of a guy that definitely doesn't need loose

coupling.
when you've been doing this as long as i have, you start

to notice
patterns in the fads that sweep through the industry.
and you eventually start to ignore the hype where it

doesn't make any
sense.
i could see this whole "bind-everything-with-xml" fad

several years
ago coming from a mile away.  and now what?  people are

attracted to
wicket because it didn't follow that fad. i think you're simply missing the forest for the trees. loose coupled

interfaces are the
right design pattern for a whole host of problems.  but the

design for
a web ui framework is not one of them. this was one of

the things
that turned me off when i looked at tapestry. all these gigantic interfaces?
why?  yuck.

don't get me wrong... please, keep thinking.  we all have

to learn by
experience. i promise i won't stop you from trying to

loose couple
every object in /your/ project with gigantic fragile

interfaces that
serve no practical purpose.  but please don't try to do it

to wicket.
interfaces have been used judiciously in wicket.  i'm not

saying it's
perfect.
i'm not even saying we shouldn't add an interface here or

there.  we
just have yet to hear an even remotely reasonable argument

that wicket
components should be mixins.  and that's why they aren't.

David Liebeherr wrote:

Uh ohh, i started reading the dicussion about interfaces

in wicket.
I think Eleco and Jonathan might be wrong in some ways.

One /very/ important reason not to use interfaces in this

case is that:
interfaces are hard to evolve. Interfaces have to be

pretty darn
stable  before even considering throwing them out in the

public, as
there is no  way (not without a tough fight at least) you

can alter
it later on -  even adding a new method will break all clients.

He sais that interfaces have to be more stable than an

object without
interface.
But he misses a very important fact:
Assume you have "String str = new String()" String is a concrete class. but: String in this context is _ALSO_ an interface!
Every reference is an interface no mather if it's a

concrete class or
an interface/abstract class!
And i think it should be not that hard to design proper

interfaces!
jonathan: interfaces should always be a set of methods that you cannot ever imagine extending

"interface B extends A" ? interface inheritance is fun,

isn't it? :-)
[22:43] jonathan: my ideal number of methods in an

interface is 1
[22:43] jonathan: ;-) [22:44] jonathan: 2 is okay in some cases [22:44] jonathan: 3 often should be re-thought

i don't see what's the sens of defining a random number as

an limit
for number of methos in an interface.
an interface should be designed by the needs of the

context and the
purposal.
i just disagree with him!

I wonder what it is you want
to do with a proxy that you can"t do by simply

subclassing? Or AOP?
He considers to use such a complex thing like AOP but

refuses to use
such a basic thing like Interfaces?

Did you and your colegues read the links i sent in my last mail?
If not i suggest it would be a good idea to do so.
It's worth it, trust me!

Johan Compagner wrote:
But this is not really possible because the internals

of page are

pretty
importand for wicket to let it work

This is a serious indication that the design has some flaws

in it. A
design should always be as interchangebale and modular

as possible.
Again: I think in the discussion it's missed that you can

even resuse
an implementation in a interfaces based design by delegation...
And it ignores the fact that you can extend interfaces as well (interface inheritance is a nice thing)...
I can't imagine what's so hard to have a Page just as

Interface. If
you can not deal with client objects as interfaced objects

you have a
problem in your design. I do use interfaces every day and i

have never
ever had a big problem with that. It's all about how

familiar and
comfortable you with good modular design pratics. Loosly

coupling is
the key word! and loosly coupling is possible. you may have

to think a
bit more about your design, but it safes you so much

time later...
Maybe if i have some time i will rewrite a very little part

of wicket
to use interfaces to show that it's definetly not a

problem to use
interfaces and that you will get good benefits from it.
Btw: A good design isn't done in a sec, but it's worth to

thake the
time to do so...

Another thing i don't understand is, that some ppl

sometimes say that
the refuse to use interfaces on wicket but sometimes there are interfaces used in wicket. So if you can use an interface for a sessionFactory then why can't you use an interface for

the session
itself?

Well, however, i think when wicket reaches 2.0 and it's

clear enough
which functionalities are implemented i may be a good idea

to review
the source and move over to use interfaces where they

make sense...
And one thing not to forget: Wicket uses "wicket:id" tags

to loosly
couple html with the logic-code. That is the most valuable

thing about
wicket!
But it's a bad thing to not continue the loosly coupling

aproach in
the api. Think about it! Loosly compling on the html/code

side is the
key thing that makes wicket better than other frameworks.

So continue
to use that in the api and you have done the best way that

is possible
with java!


And please remeber: It's cunstructive critism which i try

to provide.
I just want to get wicket as the best what's possible bc

the basic
ideas of wicket are great!

Thanx for your attention,
Dave

PS: I don't say i know the overall truth i just provided

my toughts
:-)

Juergen Donnerstag wrote:

David,

we did have a very hot discussion about that topic just a

week or two
ago. Please check the mail archiv (gmane) for details. But

I can tell
you it was a very deliberate decison to implement it the

way it is.
Juergen

On 8/2/05, David Liebeherr <[EMAIL PROTECTED]> wrote:


Hi Juergen,

Juergen Donnerstag wrote:


David,

yes you're right we have to work on the docs, has been

on our list
and is under construction. Did you check out our wiki and (the
outdated) user guide. it should provide at a beginner

some inside into Wicket.
You mentioned you would simplifiy the API even further. You mentioned IModel. Anything else that comes into your mind?

I my gosh, do you realy want to get me started on that?

:-) No, for
real:
There are lot's of things that need very much simplification.
When i have some time, we may discuss that in detail

(if you are
interested) in a chat or something like that (Log of

chat goes to
maillinglist/wiki of course).

One of the much important things is to realize the

"programm to an
interface, not to an implementation" principle.
For exmaple:
Session should be an Interface and SessionImpl should

be (one!)
implementation of it.
Btw: Don't name interfaces with a I prefix, that is

not so good.
It should be always like that:
Car exmaple:
interface Car {};
class CarImpl impements Car {};
or
class BmwImpl implements Car{};

I know ppl have different opinions about such things,

but the i
discussed those things for a rather long time with a lot of developers and some very very good (actually one of the best programmers out there). I have lot's of serious reasons

why i think
you should follow this naming convention. And the most

important
thing is: Use interfaces rather then concrete implementation!
And another very very thing is: Use delegation rather

than concrete
inheritance!

Again, i have very serious reasons why i think that way.
And it does not mean much more work to do with proper

coding tools
(Like IntelliJ IDEA).

I think the Idea of Wicket is geniusly!
Especialy the part that code is attached to free

placeable tags with
a proper wicket:id!

But i think at this point the API needs a revision to

simplify it
and to realy follow some very important rules (like avoiding concrete inheritance).
Btw: have a look on that:
http://www.javaworld.com/javaworld/jw-08-2003/jw-0801-too

lbox.html
AND AFTER THAT ALSO READ THAT! --> http://jtiger.org/articles/why-extends-is-not-evil.html

It explains very very well what's the problem with concrete inheritance.

And last but not least:
I think you core developers have done a very good job and

i'm very
happy to use wicket!
Everything i said (and will say) is not meant as a

complain i realy
want to participate in wicket and to make it the best WebApp framework that exists (And i think wicket can reach that

target! If
i think about all that XMl-Config files crap like with

Struts and
JSF :-))

So please always thake what i say at what is it meant to be:
Constructive critism.

Thanx again for your Work,
Dave




Juergen

On 8/2/05, David Liebeherr <[EMAIL PROTECTED]> wrote:

Juergen Donnerstag wrote:

Sorry, I guess except the javadoc there is no extra

doc on it.
What is
your question? Signin and Signin2 and not very complex.


I think this is precisely the Problem.
I found it already out by myself, but it took me some

time to find
and understand that the key thing is the checkAccess-method.
You think it is very simple code. But you are one of the Developers that wrote the Libs, so you know what

checkAccess do
and you know that you do not have to search in the WebApplication-Class code to search where it is

redirected to the
Login-Page.
So i think the problem is for outsiders and newbees of

the project
many many things are not so clear as you might think.

I think the lack of good Documentation - and by

documentation i
don't mean a simple doc of the API methods, rather a

documentation
describes the realtionships between components and how

to use them
- is one of the biggest problems (or todos) for wicket.

Another Problem is, that's at least my personal opinion (and please thake it as constructive critic and not just as

a complain)
is that the api is yet to complex. I thought one of the

main goals
of wicket was to keep the learning curve as low as

possible. But
the api is to complex for that i think. Especialy the

IModel API
is very complex and i think it would be a very good idea to simplify it much more.

I mean at this time i am a newbee to wicket for my

self. But that
is good bc that way i can provide the "sight of a newbee". Developers of the proect may thing that something is

"quite easy",
but if i'm a developer of the project i know too much

already to
tell if a thing can be easy understood.

But however thanks for your help, Dave


Juergen

On 8/1/05, David Liebeherr <[EMAIL PROTECTED]> wrote:


Is there any documentation/tutorial available for

the Signin
Exmaple?
I realy have some problems understanding how it works.

Thanx,
Dave

PS: Wicket ROCKS!


-------------------------------------------------------
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
Wicket-user@lists.sourceforge.net
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_idt77&alloc_id492&op=click
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
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
Wicket-user@lists.sourceforge.net
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_idt77&alloc_id492&op=click
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
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
Wicket-user@lists.sourceforge.net
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
Wicket-user@lists.sourceforge.net
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
Wicket-user@lists.sourceforge.net
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_idt77&alloc_id492&opÌk
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
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
Wicket-user@lists.sourceforge.net
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_idt77&alloc_id492&op=ick
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
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_idt77&alloc_id492&opÌk
_______________________________________________
Wicket-user mailing list
Wicket-user@lists.sourceforge.net
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
Wicket-user@lists.sourceforge.net
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
Wicket-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wicket-user

Reply via email to