가장 중요한 것은 규칙이 아니라 지침이라는 것입니다.
메소드가 단순히 인수 를 취해야하는 경우 가 있습니다. +
예를 들어 숫자에 대한 방법을 생각하십시오 . 또는 add
수집 방법.
실제로, 두 개의 숫자를 더하는 것이 의미하는 것은 문맥에 따라 다르지만 (예 : ℤ 3 + 3 == 6
, ℤ | 5 3 + 3 == 2
) 실제로 더하기 연산자는 컨텍스트 대신에 두 개의 인수 를 취하는 컨텍스트 객체의 메소드 여야합니다 하나의 인수를 취하는 숫자에 대한 메소드.
마찬가지로, 두 객체를 비교하는 방법은 한 객체가 다른 객체를 인수로 취하는 방법이거나 컨텍스트의 방법으로 두 객체를 인수로 취하는 방법이어야합니다. 따라서 단순히 비교 방법을 갖는 것은 의미가 없습니다. 하나 이상의 논쟁.
즉, 메소드의 인수 수를 줄이기 위해 수행 할 수있는 몇 가지 작업이 있습니다.
- 메소드 자체를 더 작게 만드십시오 . 어쩌면 메소드에 많은 인수가 필요한 경우 너무 많은 일을하고 있습니까?
- 누락 된 추상화 : 인수가 서로 밀접하게 연관되어 있다면, 그것들이 함께 속해 있으며, 누락 된 추상화가 있습니까? 정식 교재 예 : 두 좌표 대신
Point
객체를 전달하거나 사용자 이름과 이메일을 전달하는 대신 객체를 전달 IdCard
합니다.
- Object state : 여러 메소드에 인수가 필요한 경우 오브젝트 상태의 일부 여야합니다. 일부 메소드에서만 필요하지만 다른 메소드에서는 필요하지 않은 경우 오브젝트가 너무 많은 작업을 수행하고 실제로 두 개의 오브젝트 여야합니다.
한 가지 방법은 인수를 새 클래스로 추출하는 것이지만 클래스 급증으로 이어질까요?
도메인 모델에 여러 종류의 것들이 있다면 코드는 여러 종류의 객체로 끝납니다. 그것에 아무런 문제가 없습니다.
그리고 이러한 클래스는 일부 명명 규칙 ( "데이터"또는 "정보"등으로 끝남)을 위반하는 이름으로 끝날 가능성이 있습니까?
적절한 이름을 찾을 수 없으면 너무 많은 인수를 그룹화하거나 너무 적게 그룹화했을 수 있습니다. 그래서, 당신은 클래스의 조각이거나 둘 이상의 클래스를 가지고 있습니다.
다른 기술은 여러 함수가 사용하는 변수를 전용 멤버 변수로 만들어서 전달하지 않도록하는 것입니다. 그러나 변수의 범위가 확장되어 실제로 필요하지 않은 함수에 개방 될 수 있습니다.
동일한 인수에서 작동하는 메소드 그룹과 그렇지 않은 다른 메소드 그룹이있는 경우 다른 클래스에 속할 수 있습니다.
"아마도"라는 단어를 얼마나 자주 사용 했습니까? 이것이 규칙이 아닌 지침입니다. 아마도 4 개의 매개 변수를 사용하는 방법이 완벽 할 것입니다!