Isolating the Domain: Introducing the Applications
To prevent domain responsibilities from being mixed with those of other parts of the system, let's apply LAYERED ARCHITECTURE to mark off a domain layer.
Without going into deep analysis, we can identify three user-level application functions, which we can assign to three application layer classes.
These application classes are coordinators. They should not work out the answers to the questions they ask. That is the domain layer's job.