Skip to content

Instantly share code, notes, and snippets.

@dario-l
Forked from vladikk/ExecutionResult.cs
Created August 30, 2017 20:30
Show Gist options
  • Save dario-l/be14711393b9cd9594dbf40ffd5b2747 to your computer and use it in GitHub Desktop.
Save dario-l/be14711393b9cd9594dbf40ffd5b2747 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