> -1

is it a veto or a vote against the proposal?

Pedro Santos

On Wed, Mar 29, 2017 at 4:34 PM, Martin Grigorov <mgrigo...@apache.org>
wrote:

> Fully agree with Emond!
> As a user I will hate such kind of change.
> Several years ago this change might be OKish, but now with Java 8 default
> methods it would be insane to break everyone's code when default methods
> make it invisible.
> Until 7.x I'd have to add empty impl for detach() when I don't need it.
> With Wicket 8.x I won't bother at all!
>
> Is your branch complete ? I see no changes in wicket-examples. Maybe it is
> because several months ago I've cleaned all empty impls of #detach(). I did
> it because I did it. It was compiling even without removing them. But with
> your changes everyone will have to go all over his/her code and fix it!
> If you remember the days when people migrated from 1.4.x to 1.5.x, or from
> 1.5.x to 6.x - many users sent a lot of negative feedback for such kind of
> changes. Changes without deprecation cycle and changes without real benefit
> from user point of view.
>
> -1
>
> On Wed, Mar 29, 2017 at 7:53 PM, Emond Papegaaij <
> emond.papega...@gmail.com>
> wrote:
>
> > Hi Pedro,
> >
> > I fail to see why it is a problem for IModel to be IDetachable. It is
> > an integral part of the lifecycle of IModel. One could say that the
> > sole purpose of the detach traversal is to detach all models. A model
> > knows how to retrieve data, update data and to detach its internal
> > representation from the backend for future request handling. A model
> > that does not require special processing to detach, simply omits this
> > method: it has a default, empty implementation. Calling this empty
> > method is cheap and likely to cause problems.
> >
> > Changing this part of the API will break the world. All
> > implementations of IModel need to either implement IDetachable or
> > remove detach(). All calls to detach() need to be guarded with an
> > instanceof check and a cast. You can be sure many users will be very
> > upset with such a change.
> >
> > What is your usecase for IIAmNotActuallyDetachabe? Why not simply call
> > detach and have it do nothing when nothing needs to be done?
> >
> > Best regards,
> > Emond
> >
> > On Wed, Mar 29, 2017 at 6:12 PM, Pedro Santos <pedros...@gmail.com>
> wrote:
> > > From user's perspective this is a symmetrical problem. This sadness is
> > > carried over to an user in the other side, in need to avoid any detach
> > > logic or processing in his component or model if the target model isn't
> > > detachable. Right know he would have to come up with his own marker
> e.g.:
> > > IIAmNotActuallyDetachabe interface. Given the symmetry, I would choose
> > the
> > > side that is not semantically wrong.
> > >
> > > Also this instanceof test is more common for us, Wicket's core
> > developers.
> > > For the final user the AbstractWrapModel class and a helper function (I
> > can
> > > propose one) should hide this complexity. We can't judge how sad it's
> for
> > > the final user base on how common it's for *us* to have this instanceof
> > > check, and without even try to abstract this complexity.
> > >
> > > Yes, I think this fix should be carried over to FeedbackMessage,
> > > ICellPopulator and IDataProvider.
> > >
> > >>The current solution - even if semantically wrong - is simpler.
> > >
> > > It's simpler only because of the instanceof test that should be
> > abstracted
> > > from the user?
> > >
> > >
> > > Pedro Santos
> > >
> > > On Wed, Mar 29, 2017 at 11:48 AM, Sven Meier <s...@meiers.net> wrote:
> > >
> > >> Hi Pedro,
> > >>
> > >> for Wicket your changes look fine.
> > >>
> > >> But I have an objection from a user's perspective:
> > >> If I hold a reference to a model (in a component or another wrapping
> > >> model), I'll always have to check the instance and do a cast before
> > >> detaching it:
> > >>
> > >>     class MyComponent {
> > >>       private IModel<Foo> foo;
> > >>
> > >>       @Override
> > >>       public void detachModels() {
> > >>         if (foo instanceof IDetachable) {
> > >>           ((IDetachable)foo).detach();
> > >>         }
> > >>       }
> > >>     }
> > >>
> > >> Sad :/.
> > >>
> > >> Furthermore what about FeedbackMessage, ICellPopulator and
> > IDataProvider?
> > >> Will their implementations no longer be forced to implement
> IDetachable
> > too?
> > >>
> > >> IMHO your missing an important aspect of IDetachable: yes, many
> > >> implementations really don't need to detach anything. But many places
> > >> *have* to detach these objects, *iff* they are detachable.
> > >> The current solution - even if semantically wrong - is simpler.
> > >>
> > >> Best regards
> > >> Sven
> > >>
> > >>
> > >>
> > >> On 29.03.2017 15:52, Pedro Santos wrote:
> > >>
> > >>> Hi team,
> > >>>
> > >>> Not every model is detachable, but right now all models extends from
> > >>> IDetachable because this contract is forced to any implementation for
> > >>> IModel.
> > >>>
> > >>> The only way users have to communicate their model isn't detachable,
> > for
> > >>> their own purpose, is by creating their own mechanism; but I think
> > >>> IDetachable interface should serve its purpose and to mark / be
> > extended
> > >>> by
> > >>> detachable models, like documented in its own javadoc.
> > >>>
> > >>> I did the changes necessary for this improvement in the branch
> > >>> 'not-detachable' at [1], and hope you can give your input. While
> > working
> > >>> on
> > >>> the branch I noticed a few problems in Wicket's code and already
> added
> > a
> > >>> fix:
> > >>>
> > >>> - LabeledWebMarkupContainer called wrapped model detach twice (fixed)
> > >>>
> > >>> - SessionSizeModel has no detach logic but was being detached at
> > >>> SessionSizeDebugPanel (fixed)
> > >>>
> > >>> - The following classes had anonymous model wrappers that weren't
> > >>> extending
> > >>> from IWrapModel, that would better communicates their purpose(fixed):
> > >>> LambdaColumn, IModel, LambdaModel, AjaxEditableLabel, LambdaColumn
> > >>>
> > >>> 1 - https://github.com/pedrosans/wicket/tree/not-detachable
> > >>>
> > >>> Pedro Santos
> > >>>
> > >>>
> > >>
> >
>

Reply via email to