저는 Java를 사용하여 작업 관리자 프로그램을 작성했으며 그 순간에 하나의 UI 구현을 만들었습니다. 이 프로그램은 현재 3 개의 레이어를 가지고 있습니다. 유스 케이스 컨트롤러를 통해 도메인 계층과 상호 작용하는 프리젠 테이션 계층, 그리고 지속성을 위해 사용되는 기술 서비스 계층. 이 시점에서 사용자는 작업 추가, 작업 상태 편집 등과 같은 몇 가지 작업을 수행 할 수 있습니다.이 구성표에서 내 로거의 목적은 사용자가 취한 모든 작업을 추적하는 것입니다. 따라서 로거를 호출하여 명령을 작성할 수있는 몇 가지 장소가 있습니다. 프리젠 테이션 레이어에서 어떤 로깅도하지 않을 것입니다. 이것은 끔찍한 디자인 결정이 될 것이므로 컨트롤러, 명령 인터페이스 (실행 취소/다시 실행 기능을 구현하기위한 모든 명령의 실행을 처리하도록 구현 된 인터페이스)로 남았습니다.), 또는 실제로 조작되는 하위 레벨 클래스에서 예를 들어 태스크 클래스를 말하십시오.로거를 사용하기에 가장 응집력이있는 위치는 무엇입니까?
컨트롤러가 UI 레이어와 도메인 사이의 접촉점 역할을하기 때문에이 컨트롤러는 상대적으로 적절한 옵션이라고 생각합니다. 따라서 모든 주목할만한 명령이 궁극적으로 컨트롤러를 통과하므로 모든 중요한 메소드가 기록됩니다. 컨트롤러에서 수행하지 않는 이유는 응집력을 줄이고 커플 링을 증가시켜 잠재적으로 부풀어 오른 컨트롤러로 이어질 수 있다는 것입니다.
구체적인 명령은 로깅에 필요한 모든 정보를 가지고 있으므로 잠재적 인 위치입니다. 이렇게하면 명령이 덜 응집되어 커플 링이 증가합니다. 또한 로깅을 잃어 버리는 것보다 도메인 객체에서 작업을 수행하기 위해 명령 인터페이스를 사용하지 않는 경우.
마지막으로 하위 수준 도메인 개체 메서드에서 로거를 구현합니다. 프로그램을 사용하고 필요한 모든 정보를 사용할 수있는 경우 로깅이 항상 발생하기 때문에 이는 좋은 후보입니다. 유일한 부정적 부분은 로거 명령이 낮은 수준의 도메인 객체 사이에 드문 드문 흩어져 모든 올바른 방법이 기록되는지 확인하기 어렵게 만드는 것입니다.
나는 이런 종류의 결정에 대해 논쟁하는 것을 좋아하고 모든 의견을 보내 주시면 감사하겠습니다.
좋습니다.하지만 충분히 좋았지 만 도메인 레이어의 하위 수준 개체를 조작하는 작업을 구체적으로 기록하고 싶습니다. – Bnjmn
당신이 찾고있는 것은 aspect 지향적 인 해결책이라고 생각합니다 (http://en.wikipedia.org/wiki/Aspect-oriented_programming). 모든 정직에서 그것은 당신의 시나리오에 아마 과잉 일 것입니다. – hythlodayr
글쎄 ... 내가 간과하고 싶은 것은 명령이 가장 낮은 수준의 도메인 객체에서 호출되었을 때가 아니라 명령이 호출을 올바르게 전달했는지 아니면 그 객체의 레벨 이상으로 전달했는지 여부가 아닌 것입니다. 당신의 추론에 따르면이 시나리오에서 가장 낮은 레벨의 객체에서 로거를 사용해야한다는 결론이 나왔습니다. 푸시 주셔서 감사합니다. 내 분석 마비를 완화하는 데 도움이되었습니다. P – Bnjmn