Hi Rickard,
I use assemby time mixin declaration .withMixins() (implementing the composite
or for private mixins) and don't want all their public method to be added to
the
interface of the composite.
If I understand your proposition, this won't be possible anymore ?
As I do DCI I understand the issue but maybe we need a smarter assembly api
here.
.withMixins(...);
.withPublicMixins(...);
Just a thought.
Le mardi 06 juillet 2010 08:03:19, Rickard Öberg a écrit :
> Hi,
>
> Through the object-composition mailing list, which discusses DCI a lot,
> I've come to suspect that it might be important for us to allow public
> mixins to be added which are additionally added to the proxy of the
> composite.
>
> Specifically, in DCI you would want to declare an Entity as having only
> Data interfaces, with CRUD operations and any other Data related
> operations, and then add Role mixins "on top" when needed by Contexts.
> As it is one would have to change the EntityComposite declaration to
> include these roles. Example:
> interface FooEntity
> extends EntityComposite, FooData, Foo
> {
> }
> ---
> If FooData contains the data, and Foo is a particular role used by a
> particular context, then FooEntity is tightly coupled to that context
> and those roles. If we instead allow mixins to be declared and exposed
> through assembly, this coupling goes away. We already have .withMixins()
> in the assembly, but previously this did not cause interfaces of those
> mixins to be publically exposed. Example:
> module.addEntities( FooEntity.class ).withMixins( FooMixin.class );
> --
> With the above, if FooEntity extends the interface of FooMixin (e.g.
> Foo) then the proxy for the entity would implement Foo, otherwise not.
>
> I suggest that this is changed so that the interfaces implemented by
> mixins declared in the assembly are also exposed. The above would then
> lead to a proxy which implements "FooEntity" *and* "Foo", and can be
> cast between these two as necessary. That would allow new contexts and
> roles (corresponding to new usecases) to be added without having to
> change the entity definition, which would be good (I think).
>
> The reasonable alternative would be to use extended entity declarations,
> such as:
>
> interface DomainFooEntity
> extends EntityComposite, FooData
> {
> }
>
> interface ApplicationFooEntity
> extends DomainFooEntity, Foo
> {
> }
> --
> Which already works today.
>
> Any thoughts on this?
>
> regards, Rickard
>
> _______________________________________________
> qi4j-dev mailing list
> [email protected]
> http://lists.ops4j.org/mailman/listinfo/qi4j-dev
_______________________________________________
qi4j-dev mailing list
[email protected]
http://lists.ops4j.org/mailman/listinfo/qi4j-dev