danielcirket / OpenEventSourcing

MIT License
3 stars 0 forks source link

QueryDispatcher / EventStore / AggregateRepository type Inference improvements #10

Closed danielcirket closed 5 years ago

danielcirket commented 5 years ago

AggregateRepository

Task SaveAsync<TAggregate, TState>(TAggregate aggregate, int? expectedVersion = null)
            where TAggregate : Aggregate<TState>
            where TState : IAggregateState, new();

should become:

Task SaveAsync<TState>(Aggregate<TState> aggregate, int? expectedVersion = null)
            where TState : IAggregateState, new();

QueryDispatcher

Task<TQuery, TQueryResult> DispatchAsync<TQueryResult>(TQuery query)
            where TQuery : class, IQuery<TQueryResult>
            where TQueryResult : IQueryResult;

should become:

Task<TQueryResult> DispatchAsync<TQueryResult>(IQuery<TQueryResult> query)
            where TQueryResult : IQueryResult;

EventStore

 Task SaveAsync<TAggregate, TState>(TAggregate aggregate, int expectedVersion)
            where TAggregate : Aggregate<TState>
            where TState : IAggregateState, new();

should become:

 Task SaveAsync<TState>(Aggregate<TState> aggregate, int expectedVersion)
            where TState : IAggregateState, new();

Outcome

Calls get their arguments / return types inferred by the compiler, such as:

var result = await _queryDispatcher.DispatchAsync(new MyQuery(/* ... */));

rather than currently being:

var result = await _queryDispatcher.DispatchAsync<MyQuery, MyQueryResult>(new MyQuery(/* ... */));

PR will be opened shortly