2017-03-09 8 views
1

많은 멤버 함수가있는 SolarPosition 클래스가 있습니다. 현재 리팩토링을위한 주요 후보자 인 CalculateSolarAzimuthAndAltitude이라는 멤버 함수가 있습니다.하나의 책임으로 멤버 함수 중 하나를 위해 노력해야합니까, 아니면 멤버 변수의 수를 최소화해야합니까?

나는 추가로 열 개 멤버 변수를 추가하는 것이 었습니다 일부 예비 계산이 두 기능에 의해 사용되는 것과 유일한 방법은, CalculateSolarAzimuthCalculateSolarAltitude로 리팩토링하는 것을 발견했다.

두 가지 책임이있는 멤버 함수에 만족해야합니까, 아니면 여러 개의 과도 멤버 변수를 분할하여 합리적인 희생을 제공해야합니까?

+0

왜'getX' 대신에'CalculateX'를 사용합니까? 'getX' 또한'const' 일 것이고, 멤버 변수는 변하지 않을 것입니다. 캐시하지 않으면 않는 한, 멤버 변수와 복잡한 논리가 있어야합니다. – nwp

+0

'CalculateSolarAzimuthAndAltitude'는 인자를 취합니까? –

+1

그것은 (당신은 다른 하나를 부르지 않고 두 중 하나를 호출하는 유즈 케이스가 있습니까?) 및 의견에 달려 있습니다. 두 개의 서로 다른 함수를 하나로 모으는 예제로'std :: minmax_element'를 인용합니다. 왜냐하면 함께 모여 들기 때문에 성능이 크게 향상되기 때문입니다. – user4581301

답변

4

내 제안은 책임을 두 개의 멤버 함수로 나눠주는 것입니다. 10 개의 추가 임시 변수를 도입하면,이를 함께 그룹화하고 SolarPosition 클래스에서 해당 구조체의 멤버를 정의하는 구조체를 정의 할 수 있습니다. 가독성도 향상됩니다.

여전히 클래스 선언에서 내부 데이터 변수를 숨겨서 SolarPosition 클래스를 훨씬 깨끗하게 유지하려면 pimpl-idiom을 참조하십시오. 자세한 내용은 다음 웹 사이트를 방문하십시오 : Is the pImpl idiom really used in practice?

1

추가 할 변수가 더 많으면 SolarPosition 클래스에 추가 클래스가 숨어있는 것 같습니다. 그 수업을 추출하고 거기서 계속 나아가 야한다고 생각하십시오.