On Mon, Apr 3, 2017 at 9:20 AM, Emond Papegaaij <emond.papega...@topicus.nl>
wrote:

> TL;DR Vote at the bottom
>
> On zondag 2 april 2017 00:25:12 CEST Pedro Santos wrote:
> > > The major concern I have with this change is that it does not improve
> > > anything. This change has impact on both the calling and implementing
> > > side of detach. Neither side becomes easier.
> >
> > It does improve the IModel interface hierarchy by removing an unnecessary
> > superinterface, and by fixing the code semantic by removing an empty
> method
> > that wasn't default, but was written as one.
>
> I do not agree here, as I see detach as an integral part of the IModel
> lifecycle. But I don't
> think we are going to agree on that.
>
> > > The caller (i.e. component) still always has to call detach on all
> models
> > > (now guared by an instanceof), because it can never be sure that the
> > > actual implementation will or will not be detachable.
> >
> > No, the caller needs to call detach if the model is detachable only.
> >
> > > For example, if the type is MyCustomModel (which does not implement
> > > IDetachable), a subclass of this type might implement IDetachable.
> Also,
> > > the implementation of MyCustomModel might change in the future.
> >
> > You are clearly generalizing a very specific use case, you can't say
> "still
> > always has to call detach". In this specific use case, where you have a
> > polymorphic type, yes you do have to check if the instance is detachable.
> > This occurs in Wicket's core because it's the place where generic model
> > wrappers abstractions are defined and provided for the final user. If
> > Wicket's core abstractions do their job right, this complexity should be
> > taken away from the final user.
>
> Types in Java can always be polymorphic (except when they are final). A
> well written
> component does not depend on the specifics of its models. Therefore a
> component should
> be built on IModels *and* detach these model. That's the only way it will
> work for all types
> of models.
>
> > What do those models have in common? They are all wrappers to other
> models.
> > If we pass through this proposal, we will be able to go ahead and propose
> > to remove their IDetachable interface; that was wrongfully ( and
> > unthoughtful because it was forced via IModel ) add as their
> superinterface.
> >
> > > On the side of the implementation for new models not much changes. You
> > > don't need to implement detach() when you don't need it.
> >
> > No, you *do need*, and you *already implemented* it by choosing to
> > implement IModel. You clearly mean here that you successfully hide from
> > the user an empty method, written with a semantically wrong word,
> enforced
> > by a contract that shouldn't be there in the first place. It's just
> > trickery, not a good interface not enforcing an unneeded method.
>
> What I mean here is that you do not have to write any code.
>
> > > If you do need it, you now
> > > need 2 changes: implement IDetachable *and* implement detach().
> >
> > No, a detachable model *always needed* to implement IDetacheble
> interface,
> > no changes here.
>
> What I mean here is that the author of a model that requires detach() now
> also has to add
> 'implements IDetachable'. This was not needed before, because it was
> inherited from
> IModel.
>
> I think we are not going to agree on this proposal. I think it is not an
> improvement and I do
> not agree with you that IModel should not be detachable by default. So
> lets vote on this.
>
> [ ] Yes, remove IDetachable from IModel



You don't give us any options ;-)

Reply via email to