In this example, the aggregate exposes a command that allows marking a specific message as read. Although the operation modifies an instance of the Message entity, it is accessible only through its aggregate root: Ticket. In addition to the aggregate root’s public interface, there is another mechanism through which the outer world can communicate with aggregates: domain events.