문제

사전 정의 된 서명에 따라 60 가지 기능 세트를 구현해야합니다. 그들은 일부 클래스의 멤버 기능이 아니라 글로벌 기능이어야합니다. 내가 구현할 때, 나는 타사가 제공하는 멋지게 완성 된 클래스 세트를 사용합니다.

대부분의 기능을 구현하는 것은 약 5-10 라인에 매우 짧으며 주로 타사 수업에 대한 다른 액세스를 처리합니다. 더 복잡한 기능을 위해 나는 복잡한 모든 것들을 다루는 몇 가지 새로운 클래스를 만들었고, 그 기능에도 사용합니다. 모든 주 정보는 My 및 타사 수업의 정적 멤버에 저장되므로 전역 변수를 만들 필요가 없습니다.

질문 : 60 개의 멤버 기능을 갖춘 하나의 큰 클래스를 구현하고 모든 구현 (현재 전 세계 기능)을 수행하면 더 나을까요? 그리고 내가 작성 해야하는 각 기능은 클래스의 해당 멤버 함수로 호출됩니다.

도움이 되었습니까?

해결책

모든 주 정보는 My 및 타사 수업의 정적 멤버에 저장되므로 전역 변수를 만들 필요가 없습니다.

그것은 키패입니다. 아니요, 분명히 수업에 참여해서는 안됩니다. 수업은 객체를 만드는 데 사용됩니다. 당신의 상황에서, 당신은 그것들을 데이터와 함수에 대한 범위로 사용합니다. 그러나 이것은 무엇입니다 네임 스페이스 이미 더 잘 해결 :

namespace stuff {
    ... 60 functions ...
    namespace baz {
        ... if you want, you can have nested namespaces, to ...
        ... categorize the functions ...
    }

    namespace data {
        ... you can put data into an extra namespace if you want ...
    }
}

순전히 정적 멤버로만 구성된 수업을 만드는 것은 나쁜 생각입니다.

다른 팁

코드 사용자가 실제로이 큰 클래스가 필요합니까?

그렇다면 구현하십시오.

그렇지 않으면, 그것을 구현하는 데 시간을 낭비하지 말고, 그것을 테스트하기 위해 의무화 된 다른 사람들의 시간을 낭비하지 마십시오.

litb 아마도 맞습니다. 당신이 포장을 고려할 유일한 이유는 class 래퍼에 사용하기 위해 자신의 데이터 중 일부를 첨부 해야하는 경우 많은 무료 기능이 있습니다. 내 머리에 튀어 나오는 유일한 것은 로그 파일에 대한 핸들이나 포장지의 유사한 것입니다.

관련 메모에서 유혹에 맞서 싸우십시오 using namespace stuff;! 항상 네임 스페이스 자격을 사용하여 기능을 참조하십시오.

#include <stuff.h>
void some_function() {
    stuff::function_wrapper();
}

대신에:

#include <stuff.h>
using namespace stuff;
void some_function() {
    function_wrapper();
}

이점은 당신이 namespace 가득한 수업에 static 방법, 쉽게 할 수 있습니다.

나는 "하나의 클래스 하나의 책임"규칙이 여기서 당신을 안내해야한다고 생각합니다. 60 가지 기능은 아마도 다른 책임으로 나눌 수 있으며, 각각은 수업을받을 자격이 있습니다. 이것은 또한 글로벌 기능의 필요성에 의해 제한되지 않는 API의 클라이언트에게보다 OO 인터페이스를 제공합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top