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 >>>> >>> >>
