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

Reply via email to