상당히 큰 프로젝트에는 성능에 매우 민감한 여러 기능을 가진 소스 파일이 있습니다 (초당 수백만 번이라고 함). 실제로, 이전 관리자는 하나의 함수에서 조건을 확인하는 데 소요되는 시간을 절약하기 위해 각각 약간 씩 다른 함수의 12 개 사본을 작성하기로 결정했습니다.
불행히도 이것은 코드가 유지해야 할 PITA라는 것을 의미합니다. 중복 코드를 모두 제거하고 하나의 템플릿 만 작성하고 싶습니다. 그러나 Java 언어는 템플릿을 지원하지 않으므로 제네릭이 이것에 적합한 지 잘 모르겠습니다.
현재 계획은 12 개의 함수 사본 (실제로는 일회용 전용 템플릿 확장기)을 생성하는 파일을 작성하는 것입니다. 물론 파일을 프로그래밍 방식으로 생성해야하는 이유에 대한 충분한 설명을 제공하고자합니다.
내 관심사는 이것이 미래 관리자의 혼란을 초래하고 파일을 수정 한 후 파일을 재생성하는 것을 잊어 버렸거나 프로그램 적으로 생성 된 파일을 수정하면 더 나쁜 버그를 초래할 수 있다는 것입니다. 불행히도 C ++로 모든 것을 다시 작성하지 않으면이 문제를 해결할 방법이 없습니다.
이 방법의 장점이 단점보다 더 중요합니까? 대신에 나는 :
- 성능을 높이고 유지 관리 가능한 단일 기능을 사용하십시오.
- 기능을 12 번 복제해야하는 이유에 대한 설명을 추가하고 유지 보수 부담을 감수하십시오.
- 제네릭을 템플릿으로 사용하려고 시도합니다 (아마도 그렇게 작동하지 않을 수 있습니다).
- 단일 기능에서 성능에 따라 코드를 작성하는 데 도움이 된 이전 관리자에게 소리를 지 릅니다.
- 성능 및 유지 관리 성을 유지하는 다른 방법은 무엇입니까?
추신 : 프로젝트의 디자인이 잘못되어 기능을 프로파일 링하는 것은 다소 까다 롭습니다. 나는 이것이 5 % 이상을 의미한다고 가정하지만, 그것은 내 부분에 대한 완전한 추측입니다.
아마도 좀 정교하게 만들어야 할 것입니다. 12 개의 사본은 매우 유사한 작업을 수행하지만 약간의 차이가 있습니다. 차이점은 함수 전체의 여러 위치에 있으므로 불행히도 많은 조건문이 있습니다. 실제로는 6 개의 "작동 모드"와 2 개의 "패러다임"이 있습니다 (자신이 작성한 단어). 이 기능을 사용하기 위해 "모드"와 "패러다임"을 지정합니다. 이것은 결코 역동적이지 않습니다. 각 코드는 정확히 하나의 모드와 패러다임을 사용합니다. 12 개의 모드-패러다임 쌍이 응용 프로그램 어딘가에 사용됩니다. 함수는 적절하게 func1에서 func12로 명명되며 짝수는 두 번째 패러다임을 나타내고 홀수는 첫 번째 패러다임을 나타냅니다.
유지 관리가 목표라면 이것이 최악의 디자인에 불과하다는 것을 알고 있습니다. 그러나 "충분히 빠른"것처럼 보이며이 코드는 잠시 동안 변경이 필요하지 않았습니다 ... 원래 함수가 삭제되지 않았다는 점도 주목할 가치가 있습니다. (알 수있는 한 죽은 코드 임에도 불구하고) 리팩토링은 간단합니다.
Makefile
"(또는 사용하는 시스템) 에서 빌드 할 때만 파일을 작성하고 올바른 후 처리 컴파일을 제거하십시오 . 이런 식으로 그들은 단순히 잘못된 소스 파일을 수정할 기회 가 없습니다 .