Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
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