2012-03-08 2 views
2

나는 간단한 정규식 변환 방법을 사용하여 HTML에 대한 약간의 처리를 수행하여 std::string으로 전달했습니다. 내 전체 코드베이스를 통해 사용할 수있는 작은 도서관의 일종으로이 방법을 설계 할간단한 변환 루틴을위한 인터페이스를 설계하는 방법은 무엇입니까?

std::string ParseQuotedPrintableHtml(std::string const& html); 

: 같은 방법은 보인다. 이것은 하나의 함수이기 때문에 Utility 클래스 (또는 네임 스페이스)를 만들고 거기에 함수를 채우고 싶을 수도 있습니다. 나는 이것이 순진한 디자인이라고 생각한다. 이와 같은 기능을 중앙 집중식으로 액세스 할 수있는 위치에 디자인하는 방법에 관한 좋은 방법에 대한 제안은 무엇입니까?

편집

나는 또한이 함수 호출은 몇 가지 "도우미"기능이 있다는 것을 언급해야한다 (나는 또한이를 만들어보고, 그들은 단지에 유용하고이 방법이 사용된다). 이상적으로 이것들은 클래스에서 "private"이 될 것이지만 이것을 글로벌 함수로 유지한다면 전역 네임 스페이스 (또는 내가 네임 스페이스에 배치 한 네임 스페이스)에서도 이러한 구현 메소드에 액세스 할 수 있습니다.

아마도 이것으로 인해 유틸리티 클래스를 만드는 것이 가장 좋습니다.

class QuotedPrintableHtml 
{ 
    private: 
    void HelperMethod1() const; 
    void HelperMethod2() const; 

    std::string html_; 

    public: 
    QuotedPrintableHtml(std::string const& html) : html_(html) {} 
    std::string Parse() const; 
}; 

아마도 이와 비슷한가?

+2

나는 어떤 상태도 가지고 있지 않으며 어떤 추상 인터페이스를 따르지 않아도된다면, 그것을 하나의 함수로 유지하는 것이 더 낫다. –

+0

그가 그렇게한다면, 그가 단위 테스트를 할 때 문제가되지 않을까요? 이 함수는 테스트 환경에 존재하지 않는 html 파일에 액세스하려고 시도 할 것이고, 어쨌든 단위 테스트에서 파일 시스템에 액세스해서는 안됩니다. 나는 해결책을 제안 할 것이지만 이것은 또한 내가 고심하고있는 것이기 때문에 나는 아직 확실한 답을 얻지 못했다. –

+2

@ 로버트 : 이름없는 네임 스페이스를 사용하여 네임 스페이스 내부의 함수를 "비공개"로 만들 수 있습니다. –

답변

3

유틸리티 함수는 일부 상태를 공유하지 않기 때문에 무료 함수를 수집하기 위해 Utilities과 같은 네임 스페이스를 만들 것입니다. 공유하지 않으려는 모든 도우미 함수를 cpp 파일의 익명 네임 스페이스에 넣을 수 있습니다.

관련 문제