3.3 인프라에서 도메인 분리하기
좋은 소프트웨어 디자인의 일반적인 원칙 중 하나는 시스템의 각 모듈에는 변경해야 할 이유가 단 하나만 있어야 한다는 것이다. 그렇기 때문에 비즈니스 도메인 모델을 구성하는 로직을 기술적 구현과 분리해야 한다. 이는 도메인을 완전히 순수하게 유지하고 쉽게 테스트하고 필요한 곳에서 안전하게 기능을 재사용하려는 것이기도 하다.
흥미로운 질문을 해보자. 비즈니스 로직과 비즈니스 로직이 아닌 것을 어떻게 구별할 수 있을까? 가장 큰 차이점은 언어의 수준이다. 비즈니스 로직은 직렬화 형식, 네트워크 프로토콜 등의 기술 용어를 사용하지 않고도 비즈니스 담당자와 논의할 수 있어야 한다. 하지만 개발 중인 제품이 클라우드 플랫폼인 경우와 같이 기술적인 경우에는 이것이 어려울 수도 있다.
그러나 좀 더 일반적인 수준에서 분리하려는 대상을 살펴볼 수 있다. 예를 들어 HTTP 라우팅과 JSON 파싱, 보고 로직을 혼합하고 싶은가? 아마 아닐 것이다. 이런 모든 측면을 분리하는 것이 깔끔한 디자인의 기본이다.