Comparison
Application servicevsDomain service
Application service
it fetches the aggregate, calls one method on it, saves it, and that is the entire body of the method.
The orchestration object for one use case: load, delegate to the domain, persist, publish. It holds no business rules — that is what makes it different from a domain service — and its thinness is the signal that the model is carrying its weight. Confusing the two is the most common source of an accidentally anaemic model.
Full entry →Domain service
the operation genuinely belonged to no single object — it needed two of them — so it became an object of its own.
A stateless object holding a piece of domain logic that does not naturally belong to any entity or value object, such as a transfer between two accounts. It is legitimate and deliberately rare: the more of them a model has, the more likely the entities have been hollowed out. The test is whether the operation would be arbitrary to place on either participant.
Full entry →