Skip to content

Instantly share code, notes, and snippets.

@ircnelson
Forked from vladikk/ExecutionResult.cs
Created March 21, 2017 21:17
Show Gist options
  • Save ircnelson/961de361730a48c2786540420b9b7a06 to your computer and use it in GitHub Desktop.
Save ircnelson/961de361730a48c2786540420b9b7a06 to your computer and use it in GitHub Desktop.
Command execution result object for CQRS based systems
using System;
namespace Example
{
public abstract class ExecutionResult
{
protected ExecutionResult(Guid aggregateId, Guid commandId, DateTime executedOn)
{
AggregateId = aggregateId;
CommandId = commandId;
ExecutedOn = executedOn;
}
public Guid AggregateId { get; private set; }
public Guid CommandId { get; private set; }
public DateTime ExecutedOn { get; private set; }
public abstract bool IsSuccess { get; }
public class Success : ExecutionResult
{
public Success(Guid aggregateId, Guid commandId, DateTime executedOn, int aggregateVersion) : base(aggregateId, commandId, executedOn)
{
AggregateVersion = aggregateVersion;
}
public override bool IsSuccess => true;
public int AggregateVersion { get; private set; }
}
public class Success<TPayload> : Success
{
public Success(Guid aggregateId, Guid commandId, DateTime executedOn, int aggregateVersion, TPayload data) : base(aggregateId, commandId, executedOn, aggregateVersion)
{
Data = data;
}
public TPayload Data { get; private set; }
}
public class Failure : ExecutionResult
{
public Failure(Guid aggregateId, Guid commandId, DateTime executedOn, string[] errorMessages) : base(aggregateId, commandId, executedOn)
{
ErrorMessages = errorMessages;
}
public override bool IsSuccess => false;
public string[] ErrorMessages { get; private set; }
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment