mardi 25 juin 2019

Should I put command bus between controller and domain service?

I am working on a backend and try to implement CQRS patterns. I'm pretty clear about events, but sometimes struggle with commands.

I've seen that commands are requested by users, or example ChangePasswordCommand. However in implementation level user is just calling an endpoint, handled by some controller.

I can inject an UserService to my controller, which will handle domain logic and this is how basic tutorials do (I use Nest.js). However I feel that maybe this is where I should use command - so should I execute command ChangePasswordCommand in my controller and then domain module will handle it?

Important thing is that I need return value from the command, which is not a problem from implementation perspective, but it doesn't look good in terms of CQRS - I should ADD and GET at the same time.

Or maybe the last option is to execute the command in controller and then emit an event (PasswordChangedCommand) in command handler. Next, wait till event comes back and return the value in controller.

This last option seems quite good to me, but I have problems with clear implementation inside request lifecycle.

I base on https://docs.nestjs.com/recipes/cqrs

Aucun commentaire:

Enregistrer un commentaire