2010-08-23 6 views
2

저는 C++로 프로그램을 작성하려고 합니다만, 어떻게해야 할 지 잘 모르겠습니다. 종속성을 위해 위젯 툴킷과 같은 특정 인터페이스에 사용자를 바인딩하고 싶지 않기 때문에 GUI 프론트 엔드와 함께 명령 행 프론트 엔드와 함께 사용할 수있는 프로그램을 만들고 싶습니다.C++에서 프론트 엔드/백엔드 시스템 설계?

어떻게하는 것이 가장 좋을까요? RSync 및 SSH와 같은 일부 프로그램은 GUI에서 프론트 엔드를 가지고 있지만 이것이 어떻게 수행되는지는 잘 모르겠습니다. 예쁜 GUI를 사용하는 동안 system()을 사용하여 프로그램을 실행하는 프로그램을 작성하는 것이 해킹되지 않을까요?

답변

6

라이브러리에 프로그램 알고리즘을 구현하고 UI 요소를주의 깊게 피하십시오. 알고리즘에 대한 API는 헤더 파일에 지정됩니다.

그런 다음이 라이브러리를 사용하는 여러 응용 프로그램을 작성할 수 있습니다. 하나는 GUI 프론트 엔드와 하나의 명령 행 인터페이스를 구현하는 응용 프로그램입니다. 헤더를 포함하고 API에 대해 컴파일하고 라이브러리를 링크합니다.
일관성없는 설정으로 라이브러리와 GUI를 컴파일하지 않도록주의하십시오.

IME UI에서 알고리즘을 분리하면 명령 줄 UI를 처음 구현할 때 최상의 결과를 얻을 수 있습니다. 그러한 분리를 위해 callbacks을 사용해야 할 수도 있습니다.

6

다른 요구 사항을 모른 채 가장 간단한 대답은 "백엔드"를 라이브러리로 컴파일 한 다음 다양한 "프런트 엔드"를 링크하는 것입니다.

더 복잡한 답변은 백엔드를 데몬/서버로 설정하는 것과 관련이 있습니다.

매우 구체적인 요구 사항이없는 한이 작업을 수행하기 위해 시스템 호출이 필요하지 않습니다.

1

MVC 디자인 패턴에서 영감을 얻을 수 있습니다. 다른 프론트 엔드는 모델 컨트롤러의 뷰입니다. 컨트롤러는 응용 프로그램의 일반적인 작업을 고려하는 라이브러리가 될 수 있습니다. GUI 부분과 쉘 부분 (또는 예를 들어 다른 언어 통합 부분)은 모두이 "헤드리스"라이브러리를 사용합니다. 처음부터 명확하게 분리하면 모듈성과 디커플링을 강화하는 데 도움이됩니다.

+1

_model_의 데이터를 보려면 MVC _views_가 아닌가요? – sbi

+0

@ 스비, 네 말이 맞아, 내 대답이 정확하지 않아, 내 대답을 편집 할거야. – David

0

GUI 프런트 엔드에 QT를 사용할 수 있습니다. 하지만 실제로는 먼저 라이브러리를 작성해야합니다. 그런 다음 GUI를 마지막으로 수행하십시오.

몇 가지 유용한 조언

  1. 코드를 쓰는 동안 단위 테스트를 작성해야합니다.

  2. 코드 작성 도구를 사용하여 코드 작성시 단위 테스트를 평가하십시오.

  3. 일반적으로 플랫폼 API (예 : win32)에 정의되어 있으므로 BOOL 유형은 사용하지 마십시오. 대신 bool을 사용하십시오.

  4. 전달은 헤더 파일에서 가능한 한 많은 유형을 선언합니다. 가능한 한 적은 수의 헤더 파일을 각 라이브러리 헤더 파일에 포함 시키십시오.

  5. 가능한 한 최소한의 인터페이스로 노출하십시오.

  6. C++의 올바른 코딩 방법을 따르십시오. Herb Sutters Book C++ coding standards is excellent in this regard.

  7. GUI를 작성하고 나면 GUI 이벤트 핸들러에 가능한 적은 비즈니스 로직을 넣으십시오. 기본적으로 라이브러리는 GUI에 대해 불가지론 스럽기를 원합니다. 다른 누군가가 여기서 MVC 패턴을 언급했습니다. 훌륭한 충고입니다.