I am developing Electric Vehicle Charging Station Management System, which is connected to several Charging Stations, and I am in an impasse. In this domain, I've come up with an aggregate for the Charging Station, which includes the internal state of the Charging Station(whether it is network-connected, the internal state of its Connectors - plugs that charge the vehicle).
It has a UnlockConnector method, for which, to accurately respect its name(and not be anemic) it sends the request to the respective Charging Station(as it is central to my domain to know of the Charging Station's connectivity, and to send requests to the physical Charging Station) which allows a user to plug the connector and charge its vehicle.
Another thing that is central to my domain is the concept of a "Charging Session", the interaction between a User and a Charging Station's Connector. The creation of a Charging Session is entirely coupled with the Connector's state, i.e. if the Connector has been unlocked by a user, a session was created; if the Connector was plugged in the vehicle the Charging Session started consuming energy; if the Connector's energy flow has stopped, the Charging Session has ended. And almost everything that can happen on a session is derived from the station's connector's state.
That's why I don't know how to model the Charging Session, I know I need to query it, I need to know how many sessions have been made in a month, etc. So I think it would be ok to handle the session entirely on the Read Side:
Other things that I think about the session that justify it having an aggregate on its own are: