record LaneAddedCommand(Terminal term, ....) : IDomainEvent;
class LaneAddedCommandHandler : .... {}
private IEnumerable<Lane> _lanes;
private Terminal _terminal;
public Result<IEnumerable<IEventMediatr>> AddLane(string name, ...) {
Lane lane = Lane.Create(name, order, ...)
if(_lanes.Select(l => l.Name).Contains(lane.Name))
return new List<IEventMediatr> { new LaneAddedEvent(lane.Terminal, ...) };
public static void Main()
Result<TerminalLanes> tl = await _repository.GetTerminalLanes(terminal);
var result = tl.AddLane(name);
var results = result.Value.Select(_mediatr.Send);