저자는 복잡한 시나리오에서 객체 지향 설계 원칙, 특히 캡슐화의 적용에 대해 질문을 던진다. 데이터와 행동을 함께 유지하는 것의 중요성을 인정하지만, 어떤 객체가 특정 행동을 수행해야 하는지 결정하는 데 어려움을 겪는다. 저자는 Parent-Child 모델의 예를 제공하는데, Parent는 중첩된 레코드의 복제를 조율해야 한다. 이것은 여러 객체에 걸쳐 있는 조율 로직을 어디에 두어야 하는지에 대한 질문을 제기한다. 세 가지 옵션이 제시된다: 조율자 또는 서비스 객체 패턴을 사용하는 것, 집계 루트가 책임을 지는 것, 또는 중첩된 객체에 복제를 위임하는 것. 각 옵션에는 도메인 모델에서 조율 로직을 유지하는 것과 집계 루트에 조정 로직을 축적하는 것과 같은 장단점이 있다. 저자는 캡슐화가 가치 있지만, 버전 관리 및 복제와 같은 상황적 행동이 항상 도메인 객체에 속하지 않는다는 결론을 내린다. 이러한 행동은 임시적이고, 객체 간에 걸쳐 있으며, 객체가 알지 말아야 하는 지식을 필요로 할 수 있다. 해결책은 캡슐화할 가장 적절한 지식 컨텍스트와 객체를 재정의하는 것이다. 이 접근법은 도메인 엔티티가 상태와 불변성을 모델링하지만, 모든 절차적 흐름을 모델링하지 않는다는 것을 인정한다. 이것은 객체 지향 원칙의 배신이 아니다.
dev.to
What happens when OOP meets Real World™
