Subject: Extending the Programming Model with @Support?


Hi folks,

we are still making progress towards Apache Isis Version 2. While most of the work goes into technical topics that stay under the hood, like decoupling from JDO, there are also some changes to the programming model, that will affect you and require migration of your domain-code.

We have no concrete release plan yet, we thought maybe October for a preview, we'll see.

Anyway I do have a questions regarding the programming model:

Have you ever run into the issue of misspelling a supporting-method within your domain-code
eg. verifyMyAction(...) instead of correct validateMyAction(...) then spending some time to troubleshot this? What an inconvenience!

My proposed solution to this is to introduce a new annotation to make a contract with the domain-model (meta-model) :

@Action
public void myAction() {

}

@Support // <-- to enforce a contract with the domain-model
public boolean hideMyAction() {
    ...
}

* The 'hideMyAction' method is termed 'supporting-method'. We have lots of variants of these. (validateX, disableX, ...)
* This contract allows for a check whether the intended supporting-method gets picked up by the framework and is not ignored. That way we can emit a validation failure, if a support-method is misspelled or does have any other deficiencies.
* The @Support annotation is optional, does not require you to migrate your domain-code.

Do you like the concept? Should we use a better name for the annotation? Can we reuse/repurpose any existing annotation?

Any thoughts?

Cheers, Andi