문제

C++에는 사실상의 표준 로깅 도구가 없습니다.내 경험상 상점은 자체적으로 판매합니다.그러나 이는 재사용 가능한 소프트웨어 구성 요소를 만들려고 할 때 약간의 문제를 야기합니다.시스템의 모든 것이 로깅 구성 요소에 의존하는 경우 소프트웨어의 재사용성이 낮아지고 기본적으로 모든 다운스트림 프로젝트가 실제로 원하는 구성 요소와 함께 로깅 프레임워크를 사용하게 됩니다.

IOC(종속성 주입)는 구성 요소가 로깅 추상화에 의존해야 하므로 문제 해결에 실제로 도움이 되지 않습니다.로깅 구성 요소 자체는 파일 I/O, 트리거 메커니즘 및 기타 원치 않는 종속성에 대한 종속성을 추가할 수 있습니다.

독점 로깅 프레임워크에 종속성을 추가하면 구성 요소의 재사용성이 저하됩니까?

도움이 되었습니까?

해결책

예.하지만 이 경우 종속성 주입이 도움이 됩니다.

추상 로깅 기본 클래스를 생성하고 사용하려는 로깅 프레임워크에 대한 구현을 생성할 수 있습니다.귀하의 구성 요소는 추상 기본 클래스에만 의존합니다.그리고 필요에 따라 모든 종속성과 함께 구현을 주입합니다.

다른 팁

네, 멘델트가 옳습니다.우리는 우리 제품에서 바로 이것을 수행합니다.모든 것은 ILogger 추상 인터페이스에 의존하지만 다른 것에는 의존하지 않습니다.일반적으로 실행 파일이나 상위 수준 DLL은 실제로 구현된 Logger 인터페이스를 구성하고 주입하는 것입니다.

재컴파일되지 않는 라이브러리를 구축하려고 하지만 로깅 인터페이스를 제공하려는 경우 아마도 좋은 방법은 (라이브러리의) 사용자가 콜백을 제공하도록 허용하는 것입니다.

라이브러리에서 로깅을 초기화할 때 콜백을 지정해야 하며, 그런 다음 가지고 있는 모든 것과 잘 작동하도록 글루 코드가 결정됩니다.

콜백의 서명을 항상 사용할 수 있는 표준 함수처럼 보이게 만들 수 있다면 실제로 로거가 없는 경우 쉬운 기본 옵션을 제공합니다.

또한 호출자는 라이브러리의 구성 요소를 여러 번 인스턴스화했을 수 있으며 리소스 경합이나 스레딩 문제의 경우 각 구성 요소에 대해 서로 다른 로거 콜백을 제공하려고 합니다.

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