I'm not opposed to this at all. But I want to mention that there are java
libraries in the larger ecosystem that depend on these "bean"-style methods
in order to function (out-of-the-box). Typically this would be
serialization libraries, like Jackson/JSON. But could be HTML templating
libraries too, or reporting libraries. So maybe be careful what you wish
for?


On Sun, Feb 2, 2025 at 9:51 AM Hugi Thordarson <h...@karlmenn.is> wrote:

> Hi Andrus,
>
> Thanks for taking a look at this. The only part where I noticed method
> naming directly affecting my own work is #3, since I tend to do a lot of
> in-memory sorting and filtering of collections of Persistents based on
> their attributes/Properties. Although I also vaguely remember random errors
> popping up which may then have been due to #4.
>
> So definitely taking that lovely red pill! :)
>
> Cheers,
> - hugi
>
>
>
> > On 2 Feb 2025, at 15:00, Andrus Adamchik <aadamc...@gmail.com> wrote:
> >
> > Hi Hugi,
> >
> > I haven't looked at this code in a while, but the framework was designed
> to use Persistent interface methods (readPropertyDirectly(..),
> writePropertyDirectly(..) and so on) to access object state, not
> reflection. With PropertyUtils and BeanAccessor we veered of that course.
> Here are a few BeanAccessor scenarios I dug up:
> >
> > 1. Persistent.readNestedProperty(..) for non-persistent properties
> > 2. In-memory expression evaluation on POJOs
> > 3. In-memory expression evaluation on Persistent objects
> > 4. Reading "persistentState" property from a Persistent object
> >
> > Most apps hopefully don't care for #1 & #2. (those were cool features
> before Java streams. Now they are not very useful, and I would argue, out
> of scope for Cayenne. But they are not harmful either and can remain. #3 &
> #4 are just incorrect implementations and should be changed. We should not
> be using reflection where Persistent interface is present.
> >
> > I may be missing more cases, but you see where I am getting with this.
> After some cleanup, Cayenne would not care whether you call your getters
> "getXyz()" or "xyz()", and what you propose becomes purely a task of
> writing a custom template. And with 5.0 improvements, templates can be
> stored in your project and managed by the Modeler. So I suggest we focus on
> this cleanup.
> >
> > To quote The Matrix, when we are ready, we won't have to dodge bullets.
> >
> > Andrus
> >
> >
> >> On Feb 2, 2025, at 7:38 AM, Hugi Thordarson <h...@karlmenn.is> wrote:
> >>
> >> Hi all!
> >>
> >> With 5.0 under development, I’d like to re-awaken an old proposal.
> >>
> >> When Cayenne generates classes, you’ll by default get JavaBean style
> prefixes for attribute/relationship method names (“get” and “is”). I've
> never used those and really don't want class generation to affect my method
> names, so I use my own superclass template that does not include those
> prefixes and patch in my own “BeanAccessor” (which is used by Cayenne to
> invoke class methods) that assumes the prefixes are not present.
> >>
> >> Since I finally have time to do some Cayenne advocacy, I’m finding it
> feels hacky to instruct folks to drop in a patch if they don’t want the
> method name prefixes — so I’d like to propose that allowing classes to have
> non-prefixed method names be made an option in the Cayenne core.
> >>
> >> I’d submit a pull request, but I don’t think I’m the best to propose
> how to go about this. I change the behaviour myself by invoking
> PropertyUtils.installAccessorFactory() with my own implementation (
> https://gist.github.com/hugithordarson/0367e4e9672df95559d331f072597662 )
> (that has to be in the package it is, since it relies on package protected
> functionality from Cayenne) but I guess a more friendly way (if not a
> configuration option) would be to make the BeanAccessor injectable.
> >>
> >> I don't think I’ll propose adding non-prefixed templates in the core as
> well — adding one's own class generation template to a project feels much
> more “normal” than dropping in a “hack class” to make things work. But just
> having the functionality of NonPrefixedBeanAccessor available in core would
> be a definite improvement.
> >>
> >> Furthermore, Carthago delenda something something :D
> >>
> >> Cheers,
> >> - hugi
> >
>
>

Reply via email to