2015-01-28 10:58 GMT+00:00 Martin Grigorov <[email protected]>: > 2015-01-28 12:52 GMT+02:00 Dan Haywood <[email protected]>: > > > > My first thought after seeing @DomainService(type=PROGRAMMATIC) is: why > there is no @Action(type=PROGRAMMATIC) instead of @Programmatic then ? To > be more consistent. > > OK, here's what I've ended up implementing (ISIS-968, to be merged shortly)...
... following on from ISIS-970 which refined the annotations for domain objects to distinguish layers: - view/app layer @DomainObject(nature=VIEW) - domain layer @DomainObject(nature=JDO_ENTITY | EXTERNAL_ENTITY) ... the @DomainService annotation now has: - view/app layer: @DomainService(nature=VIEW | VIEW_MENU_ONLY | VIEW_CONTRIBUTIONS_ONLY) - domain layer: @DomainService(nature=DOMAIN) The idea is that domain-layer domain services (nature=DOMAIN) are hidden; their intent is only to provide functionality to the domain objects. Meanwhile, the view-layer domain services are broken down as providing actions that are rendered in the UI; the different natures determine whether they appear in the menu bar and/or as contributed actions. For those that don't want to distinguish between the layers, just continue to use nature=VIEW (the default) and the behaviour is as it always ever was. ~~~ The other change I've made is to @ActionLayout: @ActionLayout (contributed = AS_ACTION | AS_ASSOCIATION ). This is equivalent to @NotContributed(As.ASSOCIATION | As.ACTION), but without the confusing double negative. ~~~ With these changes we can then deprecate the horrid @NotInServiceMenu and @NotContributed annotations. The concept count is reduced, I think, while we've started to provide better guidance for users to optionally organize domain services by layer, same as for domain objects/view models. Hope that makes sense... Dan ~~~~~~~~~~ @Hidden / @NotContributed / @NotInServiceMenu
