When discussing tactical design patterns, don’t appeal to authority: “Let’s use an aggregate here because the DDD book says so!” Instead, appeal to logic. For example: Why are explicit transactional boundaries important? To protect the consistency of the data. Why can’t a database transaction modify more than one instance of an aggregate? To ensure that the consistency boundaries are correct. Why can’t an aggregate’s state be modified directly by an external component? To ensure that all the related business logic is colocated and not duplicated. Why can’t we offload some of the aggregate’s
...more