아마도 이것은 명령 쿼리 분리 원칙 때문일까요?
CQS는 OO와 함수형 프로그래밍 스타일의 교차점에서 인기있는 경향이 있는데, 이는 부작용이 있거나없는 (즉, 객체를 변경하는) 객체 메소드간에 명백한 차이를 생성하기 때문입니다. 변수 할당에 CQS를 적용하면 평소보다 더 많이 걸리지 만 동일한 아이디어가 적용됩니다.
CQS가 유용한 이유의 짧은 그림 : 기호가있는 가상 하이브리드 F / OO 언어 고려 List
방법이 클래스 Sort
, Append
, First
,와 Length
. 명령형 OO 스타일에서는 다음과 같은 함수를 작성할 수 있습니다.
func foo(x):
var list = new List(4, -2, 3, 1)
list.Append(x)
list.Sort()
# list now holds a sorted, five-element list
var smallest = list.First()
return smallest + list.Length()
보다 기능적인 스타일에서는 다음과 같이 작성할 가능성이 높습니다.
func bar(x):
var list = new List(4, -2, 3, 1)
var smallest = list.Append(x).Sort().First()
# list still holds an unsorted, four-element list
return smallest + list.Length()
이것들은 똑같은 일을 하려고 하는 것 같지만 , 분명히 둘 중 하나가 틀렸고, 메소드의 동작에 대해 더 많이 알지 못한다면 어떤 것을 말할 수 없습니다.
CQS를 사용하지만, 우리는 경우에 주장 할 Append
및 Sort
따라서 때 우리가해서는 안 두 번째 양식을 사용하여 버그를 만들기에서 우리를 방지 목록을 변경, 그들은 단위 유형을 반환해야합니다. 따라서 부작용의 존재는 메서드 시그니처에도 암시 적으로 포함됩니다.