Player:
- Create(Name)
- Change Name(Name)
- Delete()
Template:
- Create(Name, Duration, Slots, Factors[])
- ChangeAttribute
- Delete()
The big question is how do I a) keep these organized (separate) while b) only having one Decide
method.
IDecider {
IEnumerable<Event> Decide(Command command);
}
I want a pair of top level types for Command and Event, and then I can just have a CombiningDecider that takes IDeciders and offers commands to each in turn.
I could make IDecider generic and filter based on types, or I can specify in the contract that Decide ignores (returns an empty sequence for) commands it doesn't recognise. Which I think sounds easier.
It's it worth doing the same thing for evolve?
I'm not sure about evolve, I've got a couple of things to do with each event that aren't really related (store the raw event, update the aggregate(s), post the event to web listeners). I'm getting a vague shape of each event processor having it's own copy of Evolve
, but that seems inefficient (except, for sure there's going to be a JavaScript copy in the browser).
Hmm.
(Been coughing off and on all day, totally sucks. Took the day off sick, will do again tomorrow unless I'm feeling 100% when I wake up)