I've been studying DDD for the past several days, using both Evans and Nilsson's books. When I start trying to apply the concepts to my projects I'm having some difficulty identifying using aggregates. I'm attaching the current model diagram I'm playing with, only showing the connections between the classes -- I've indicated the multiplicity, but not the directionality... as the directionality is one of the key things I'm trying to work out with regards to what that means for the aggregates.
The application has two main aspects -- registration for competitions and result tracking across competitions. This dual nature is what's causing my problems.
In the first case just about everything is always scoped by a Competition. Having a Competition Aggregate that includes Competition, Style, Dance, Level, Event, Registration, and Registration Entity would make total sense. The connection between Registration Entity and Person would be unidirectional (navigatable to Person). Going the other way would require navigating from Person to Competition and then asking the competition for which events this person is in. This is great and reflects the way the business works and thinks. This would lead to three aggregates -- Competition, User, & Person -- and I'm very happy.
In the second case (result reporting) the Result is the central concept. Their are two primary queries:
a) List the results for a given event
b) List the results for a given person
Case a is easy under the model outlined above. Simply include Result in the Competition Aggregate.
Case b seems to start throwing me off. The business would think of a set of results attached to a person. This seems to require that Result be an aggregate (to allow Person to hold a connection to it). But now Result needs a connection to the Event and Registration Entity its for. And it can't pull them into its aggregate since the registration side of the house needs it. So suddenly both Event and Registration entity have to become their own aggregates as well. This causes a further cascade that forces the style/level/dances into their own aggreate so that both competition and event can refer to hem. Suddenly every object is its own repositoty...
The other option I've though of is to introduce some sort of parallel implementation of the Competition/Event concept. One set for registration issues and one set for result/reporting issues so that the two areas can have appropriate aggregates. In some sense these two aspects should be in separate modules anyways, but it seems like there would be some very odd duplication of the classes involved.
Am I making any sense with how I'm thinking through this? Can anyone offer any advice for teasing apart aggregates in DDD when you have use cases that basically require orthogonal navigation through the object model?