예제 #1
0
            /// <summary>
            /// https://enterprisecraftsmanship.com/posts/validate-commands-cqrs/
            /// </summary>
            /// <param name="command"></param>
            /// <param name="cancellationToken"></param>
            /// <returns></returns>
            public Task <Result> Handle(Command command, CancellationToken cancellationToken)
            {
                var driver = _db.Drivers.FirstOrDefault(d => d.Id == command.Id);

                string error = null;

                if (driver == null)
                {
                    error = "Driver not found";
                }
                else
                {
                    _db.Drivers.Remove(driver);
                    _db.SaveChanges();

                    // Or we could do the SOFT delete (like in EventSourcing):
                    //
                    // We'd still have the data in our event store.
                    // We'd publish a 'deleted' event which would remove/mark the data as deleted in read model.
                    //

                    // =====
                    // In general: ORM + events = a giant pile of #fail  (c) Greg Young
                    // =====
                }

                var result = new Result
                {
                    Error = error
                };

                if (error == null)
                {
                    var @event = new DriverRemovedEvent()
                    {
                        DriverId = driver.Id
                    };

                    _mediator.Publish(@event);
                }

                return(Task.FromResult(result));
            }
예제 #2
0
        public Task Handle(DriverRemovedEvent message, CancellationToken cancellationToken)
        {
            // Send some see you soon e-mail

            return(Task.CompletedTask);
        }
 public void Apply(DriverRemovedEvent aggregateRegisteredEvent)
 {
     Driver.MarkAsRemoved();
 }