민첩한 소프트웨어 개발과 모든 원칙 (SRP, OCP 등)을 생각할 때 로깅 처리 방법을 스스로에게 묻습니다.
구현 옆에 로깅이 SRP 위반입니까?
yes
로깅없이 구현을 실행할 수도 있기 때문에 말할 것 입니다. 어떻게 로깅을 더 나은 방법으로 구현할 수 있습니까? 몇 가지 패턴을 확인하고 사용자 정의 방식으로 원칙을 위반하지 않는 가장 좋은 방법은 원칙을 위반하는 것으로 알려진 패턴을 사용하는 것이 데코레이터 패턴을 사용하는 것입니다.
SRP 위반없이 많은 구성 요소가 있고 로깅을 추가하려고한다고 가정하겠습니다.
- 성분 A
- 성분 B는 A를 사용합니다.
A에 대한 로깅을 원하므로 인터페이스 I을 구현하는 A로 장식 된 다른 구성 요소 D를 만듭니다.
- 인터페이스 I
- 구성 요소 L (시스템의 로깅 구성 요소)
- 컴포넌트 A는 I를 구현
- 컴포넌트 D는 I를 구현하고 A를 장식 / 사용하며 로깅에 L을 사용합니다.
- 성분 B는 I를 사용합니다.
장점 :-로깅없이 A를 사용할 수 있습니다-테스트 A는 로깅 모의가 필요하지 않음을 의미합니다-테스트가 더 간단합니다.
단점 :-더 많은 구성 요소와 더 많은 테스트
나는 이것이 또 다른 공개 토론 질문 인 것으로 알고 있지만 실제로 누군가가 데코레이터 또는 SRP 위반보다 더 나은 로깅 전략을 사용하고 있는지 알고 싶습니다. 기본 NullLogger 인 정적 싱글 톤 로거는 어떻습니까? syslog-logging을 원한다면 런타임에 구현 객체를 변경하십시오.