Yes, this is actually how Estatio is currently structured [1]. We're not certain if we're going to stick with it, but the original thinking was similar to what you say.
Cheers [1] https://github.com/estatio/estatio/tree/master/estatioapp/app/src/main/java/org/estatio/app/menus On Wed, 15 Feb 2017 at 18:20 Óscar Bou - GOVERTIS <[email protected]> wrote: > > You could define the "menu service", and other coordination services > invoking domain actions that could be guided by the use cases / UI, in an > "app" module, different from the "domain" one. > > My 2cts ... > > > > > El 15 feb 2017, a las 17:17, Dan Haywood <[email protected]> > escribió: > > > > The pattern we suggest is two domain services, one being a repository for > > an entity - ie QuickObjectRepository - and the other a menu - ie > > QuickObjectMenu. Not every entity will need a menu, and indeed it might > > make sense to have menus that provide access to multiple entities, eg a > > "Reference Data" or "Admin" menu. In other words, the *Menu services are > > really just to organize the UI, while the *Repository services do the > real > > work. > > > > In this case, if you don't need a menu then just delete QuickObjectsMenu. > > It doesn't have any behaviour other than delegating to > > QuickObjectRepository. > > > > You are correct that setting the nature=DOMAIN should suppress it from > the > > UI also; if that isn't the case, then please create a test example > > application demonstrating the problem and push it to github. > > > > HTH > > Dan > > > >> On Wed, 15 Feb 2017 at 14:54 L Eder <[email protected]> wrote: > >> > >> The code. Actually it is the one at quickstart sample: > >> > >> QuickObjectRepository: > >> " > >> @DomainService( > >> nature = NatureOfService.DOMAIN, > >> repositoryFor = QuickObject.class > >> ) > >> public class QuickObjectRepository { > >> > >> //region > listAll (programmatic) > >> > >> @Programmatic > >> public List<QuickObject> listAll() { > >> return container.allInstances(QuickObject.class); > >> } > >> //endregion > >> > >> //region > findByName (programmatic) > >> > >> @Programmatic > >> public QuickObject findByName( > >> final String name > >> ) { > >> return container.uniqueMatch( > >> new QueryDefault<>( > >> QuickObject.class, > >> "findByName", > >> "name", name)); > >> } > >> //endregion > >> > >> //region > findByNameContains (programmatic) > >> > >> @Programmatic > >> public List<QuickObject> findByNameContains( > >> final String name > >> ) { > >> return container.allMatches( > >> new QueryDefault<>( > >> QuickObject.class, > >> "findByNameContains", > >> "name", name)); > >> } > >> //endregion > >> > >> //region > create (programmatic) > >> > >> @Programmatic > >> public QuickObject create(final String name) { > >> final QuickObject obj = > >> container.newTransientInstance(QuickObject.class); > >> obj.setName(name); > >> container.persistIfNotAlready(obj); > >> return obj; > >> } > >> > >> //endregion > >> > >> //region > findOrCreate (programmatic) > >> > >> @Programmatic > >> public QuickObject findOrCreate( > >> final String name > >> ) { > >> QuickObject quickObject = findByName(name); > >> if(quickObject == null) { > >> quickObject = create(name); > >> } > >> return quickObject; > >> } > >> //endregion > >> > >> > >> //region > injected services > >> > >> @javax.inject.Inject > >> DomainObjectContainer container; > >> > >> //endregion > >> } > >> " > >> > >> QuickObjectMenu: > >> " > >> @DomainService( > >> nature = NatureOfService.VIEW_MENU_ONLY > >> // nature = NatureOfService.DOMAIN > >> ) > >> @DomainServiceLayout( > >> menuOrder = "700", > >> named = "Quick Objects" > >> ) > >> public class QuickObjectMenu { > >> > >> //region > listAll (action) > >> @Action( > >> semantics = SemanticsOf.SAFE > >> ) > >> @ActionLayout( > >> bookmarking = BookmarkPolicy.AS_ROOT > >> ) > >> @MemberOrder(sequence = "1") > >> public List<QuickObject> listAll() { > >> return quickObjectRepository.listAll(); > >> } > >> //endregion > >> > >> //region > findByName (action) > >> @Action( > >> semantics = SemanticsOf.SAFE > >> ) > >> @ActionLayout( > >> bookmarking = BookmarkPolicy.AS_ROOT > >> ) > >> @MemberOrder(sequence = "2") > >> public List<QuickObject> findByName( > >> @ParameterLayout(named="Name") > >> final String name > >> ) { > >> return quickObjectRepository.findByNameContains(name); > >> } > >> //endregion > >> > >> //region > create (action) > >> public static class CreateDomainEvent extends > >> ActionDomainEvent<QuickObjectMenu> { } > >> > >> @Action( > >> domainEvent = CreateDomainEvent.class > >> ) > >> @MemberOrder(sequence = "3") > >> public QuickObject create( > >> @ParameterLayout(named="Name") > >> final String name) { > >> return quickObjectRepository.create(name); > >> } > >> > >> //endregion > >> > >> //region > injected services > >> > >> @javax.inject.Inject > >> QuickObjectRepository quickObjectRepository; > >> > >> //endregion > >> } > >> " > >> > >> > >> > >> 2017-02-15 10:35 GMT-04:00, Dan Haywood <[email protected]>: > >>> Should be easy ... can you post the code of the domain service that is > >>> appearing as a menu that you want to suppress ? > >>> > >>> > >>>> On Wed, 15 Feb 2017 at 14:23 L Eder <[email protected]> wrote: > >>>> > >>>> Hi Dan: > >>>> > >>>> I browsed the documentation for a way to hide a menu object but > >>>> properties and actions. The closest thing found was @NotInServiceMenu. > >>>> I tried some combinations, even using the NatureOfService enum, but no > >>>> success so far. > >>>> > >>>> Idea is to omit, eg, prevent QuickObjects entity from being rendered > >>>> in the menu bar. > >>>> > >>>> Thanks for you suggestion, Eder > >>>> > >>> > >> > >
