Feat: Better Reducer #28
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The idea of
ICommand<TEntity>
being a reducer was an opinionated abstraction, which is something I do want to avoid. To that end, I have removed theICommand
interface and added aReduce
method to theIEntity<TEntity>
interface (which lives in the Common library, and can therefore be opinionated). All of the methods (other than the reducer) which tookICommand<TEntity>
now takeobject
By default, this means that reduction is centralized to the entity for which the commands are relevant. However, consumers may still decentralize the reduction process by having their commands implement
IReducer<TEntity>
(new to the Abstractions library) and un-box the commands like this:The difference is that decentralization is no longer mandatory.