Re: From UI to Commands - how?

"Avi Block [email protected] [domaindrivendesign]" <[email protected]> Tue, 10 Mar 2015 04:54:07 -0400
Newsgroups gmane.comp.programming.domain-driven-design
Message-ID <CAADbibVEMtLy_VQj0AW3aa1i7Hrax5mzYM5Hq0ZkOiF9kPXqmA@mail.gmail.com>
The answer is to have task-based UIs (
https://cqrs.wordpress.com/documents/task-based-ui/)

On Tue, Mar 10, 2015 at 4:47 AM, [email protected]
[domaindrivendesign] <[email protected]> wrote:

>
>
> Hi
>
>
> How do you map UI Changes to commands in your DDD application ?
>
>
> With a typical web UI having a bunch of input fields the User needs to
> set, its tempting to just have a CRUD like Update Action on your resource
> oriented backend endpoint. (Who says it should be resource oriented btw)
>
>
> http Put myApi/MyResource/resourceId
>
>
> This would lead to a myAggregateRoot.Update method getting called.
>
>
> As you may know this looses the intent o the user  and creates an somewhat
> anemic domain model. We don't capture the behavior which forms our
> ubiquitous language.
>
>
> Say the user wants to
>
> 1. Add subcontent to MYResource
>
> 2. Activate myResource
>
>
> that would correspond to
>
>
> myAggregateRoot.Add(newSubContent)
>
> and
>
> myAggregateRoot.Activate()
>
>
> I see two ways to accomplish this
>
>
> UI makes multiple requests
>
>
> 1  http Post myApi/MyResource/resourceId/Content
>
> 2  http Post myApi/MyResource/resourceId/Activation
>
>
> Currently my UI would have multiple tasks/actions on one single page. two
> requests seems like
>
> doing a chatty implementation. when actions could be batched and send in
> one request.
>
> Of cause UI could be split up so each page only deals with a single task /
> action.
>
>
> OR
>
>
> put an update as a list of user activities (commands) to
>
> http Put myApi/MyResource/resourceId/
>
> or
>
> http Post myApi/MyResource/resourceId/changes
>
>
> the changes could have a json format like
>
>
> {
>
>  updates:[
>
> {
>
> id : 2324234234,
>
> occurred : some date,
>
> name : AddContent
>
> data : {
>
> content goes here
>
> }
>
>
> },
>
> {
>
> id : 2324234234,
>
> occurred : some date,
>
> name : Activate
>
> data : {}
>
> }
>
> }
>
> ]
>
> }
>
>
>
> this could be mapped to commands in the application layer in a generic way.
>
> But it would require the UI guys to work in a different way.
>
>
> What do you think ?
>
>
> Cheers  Christian
>
>
>
>
>
>
>
>
>
>  
>