연산은 크게 명령과 질의라는 두 가지 범주로 나눌 수 있다.
질의는 변수 안에 저장된 데이터에 접근하거나, 저장된 데이터를 기반으로 계산을 수행해서 시스템으로부터 정보를 얻는 연산을 의미한다.
명령은 변수의 값을 변경하는 등의 작업을 통해 시스템의 상태를 변경하는 연산을 의미한다.
부수효과를 일으키지 않으면서 결과를 반환하는 연산을 함수라고 한다.
함수는 여러 번 호출해도 무방하며 매번 동일한 값을 반환한다.
함수는 중첩된 깊이에 대해 걱정하지 않고 다른 함수를 호출할 수 있다.
함수는 부수효과를 지닌 연산에 비해 테스트하기 쉽다.
변경을 발생시키는 메서드는 도메인 데이터를 반환하지 않아야 하고 가능한 한 단순하게 유지해야 한다.
명령과 질의를 분리하는 대신 연산의 결과를 표현하는 새로운 VALUE OBJECT
를 생성해서 반환한다.
부수효과를 단순한 명령 메서드 내부로 격리하는 작업은 당연히 ENTITY
에 대해서만 적용한다.
수정과 질의를 분리하는 리팩터링을 마치면 복잡한 계산을 처리하는 책임을 VALUE OBEJCT
로 옮기는 두 번째 리팩터링을 고려한다. (Calculator)