Experienced developers face a tension in object-oriented design between encapsulation and orchestration-heavy scenarios like object duplication or versioning.
Options to handle this tension include using an Orchestrator or Service Object pattern, making the Aggregate Root responsible, or delegating duplication to nested objects.
The discussion revolves around where to place orchestration logic that traverses multiple objects without compromising the core ideas of encapsulation and behavior-close-to-data.
Acknowledging that contextual behaviors may not always belong in domain objects, the Application Layer logic plays a crucial role in managing temporal, cross-object actions, while still respecting the principles of object-oriented design.