On 29 December 2014 at 14:27, Jeroen van der Wal <jer...@stromboli.it>
wrote:

> I prefer the symmetrical approach: replace @ViewModel with
> @DomainEntity(persistence=NEVER)?
>
>
I'm guessing you mean to retain @DomainObject rather than @DomainEntity?

Or how about:

@DomainObject(
    type = ENTITY | EXTERNAL_ENTITY | VIEW_MODEL
)

for JDO-managed entities, externally managed view mdel entities, and
application-layer view models respectively.

We could also have a meta model validator that ensures that the programmer
doesn't try to specify incompatible attributes,
eg: auditing=ENABLED and the type is EXTERNAL_ENTITY or VIEW_MODEL will
throw a metamodel validation exception.


Dan



> Cheers,
>
> Jeroen
>
> PS Dan: do you still have that Google apps sheet with all annotations
> floating around?
>
>
Um, I don't remember doing one.  But I did update the Isis website, and
it's in tabular form, perhaps that's what you mean?

http://isis.apache.org/reference/recognized-annotations/about.html




>
> On Mon, Dec 29, 2014 at 3:05 PM, Dan Haywood <d...@haywood-associates.co.uk
> >
> wrote:
>
> > On 29 December 2014 at 13:23, GESCONSULTOR - Óscar Bou <
> > o....@gesconsultor.com> wrote:
> >
> > > Ok.
> > >
> > > So let's raise some questions/doubts :)
> > >
> > > *** @DomainObject  ***
> > >
> > > Is a ViewModel a DomainObject at all ?
> > >
> > >
> > it's a good question, and I've debated it myself.  Let me lay out my
> > thinking on this so far and see if we can collectively come to a view on
> > this.
> >
> > First thing to note is that there are two "varieties" of view models
> (even
> > though the implementation is identical)
> >
> > - those that are part of the domain layer and are, conceptually at least,
> > entities, but where the persistence is managed outside of Isis.  An
> example
> > is a document in a CMS
> > - those that are part of the application layer, and represent a view on
> top
> > of one or more entities.
> >
> > Of course, we expect an application layer to depend on the domain layer
> and
> > not vice versa, but even so, because some view models are conceptually
> > entities I suspect that in a typical Isis application it will be
> reasonable
> > to allow JDO-managed domain entities to interact with externally-managed
> > view model entities.
> >
> >
> > Because of this, I've been thinking of "DomainObject" as being a superset
> > of both entities and view models.
> >
> >
> >
> >
> > > I would consider them as a different kind, so the @ViewModel annotation
> > > shouldn't be deleted.
> > >
> >
> > You are certainly right that quite a few of the features in @DomainObject
> > don't apply to view models (even if conceptually they are entities)...
> > because we rely on JDO to implement.  Specifically:
> >
> > - auditing... requires JDO so doesn't apply to view models
> > - publishing ... requires JDO so doesn't apply to view models
> > - bounded = not sure... even though doesn't depend on JDO, suspect that
> it
> > isn't supported for view models
> >
> > - autoComplete ... is supported for view models
> > - editing ... is supported so long as the ViewModel.Cloneable interface
> is
> > also implemented.  I can foresee this restriction being lifted in the
> > future
> > - objectType ... is supported for view models (used as REST URLs)
> >
> >
> >
> >
> >
> > > Also, perhaps we can introduce Isis platform logic like not
> > > "saving/persisting" view models, etc. If that would be the case, the
> > > "editing" and "editingDisabledReason" at least might not have any
> sense.
> > >
> > >
> > Not sure I understand this point.  But at any rate, given that some view
> > models are basically externally-managed entities, the semantics of
> > "saving/persisting" would also apply.
> >
> >
> >
> >
> >
> > >
> > > If so, I would better align with DDD naming conventions, in order to
> gain
> > > acceptance.
> > >
> > > So, names should be @Entity or @DomainEntity (for avoiding name
> collision
> > > with JPA) - instead of @DomainObject -.
> > >
> > >
> > I did consider @DomainEntity, but as I say, sometimes view models act
> like
> > entities.  I do quite like it though.
> >
> > I have a counter-proposal, see below.
> >
> >
> >
> > > I like the @DomainService name, as it can act as a DDD Factory and/or
> > > Repository.
> > >
> > >
> > > As currently there's no "special" support for AggregateRoots or
> > > ValueObjects, no more annotations are needed.
> > >
> > >
> > Sounds like a vote to deprecate.  Jeroen has said the same thing.
> Perhaps
> > they should be deleted in v2.0 and reappear, if we want them back, in
> v3.0.
> >
> >
> >
> > > So the proposed set would be:
> > > • @ViewModel and @ViewModelLayout
> > > • @DomainService and @DomainServiceLayout
> > > • @DomainEntity and @DomainEntityLayout
> > > • @Property and @PropertyLayout
> > > • @Collection and @CollectionLayout
> > > • @Action and @ActionLayout
> > > • @Parameter and @ParameterLayout
> > >
> > >
> > >
> > Here's my counter-proposal.  It's not as symmetrical as before, but
> perhaps
> > is less confusing overall:
> >
> > * replace @DomainObject(viewModel=false)   with
> > @DomainEntity(persistence=JDO)
> >    ... this would be the default
> > * replace @DomainObject(viewModel=true)    with
> > @DomainEntity(persistence=EXTERNAL)
> >    ... for view models representing externally-persisted entities.  In
> the
> > Javadoc, say that auditing, publishing and bounded are not supported for
> > these
> > * keep @ViewModel
> >  ... extend to include the non-entity stuff from @DomainObject that does
> > apply (basically, I think that's just "objectType" )
> >   ... the intention being that this is used for application-layer views.
> >
> > keep @DomainObjectLayout, because everything in it applies equally to
> both
> > view models (either variety) and JDO entities.
> >
> >
> > I'll reply on your points on @Property and @Parameter separately.
> >
> > Thx
> > Dan
> >
> >
> > >
> >
>

Reply via email to