2012-10-18 4 views
2

내 프로젝트에는 문서 관리 시스템이 있습니다. 기본 클래스 Document과 파생 클래스가 있습니다. 문서의 열기/닫기/활성화 작업을 관리하는 클래스 인 DocumentManager도 있습니다.FooManager가 Foo.OnSthHappened()를 호출하는 것은 나쁜 습관입니까?

Document과 그 파생 클래스가로드에 무언가를 수행 할 수 있습니다, 등, 마감했다,하지만 상태 변경은 관리자 클래스에 의해 제어된다 Document 클래스 OnLoaded(), OnClosed() 같은 (가상) 방법이 있습니다 그래서 현재 DocumentManager 클래스에서 호출됩니다. 이 방법을 대중에게 공개하는 것이 불필요한 것 외에는 잘 작동합니다.

대안 디자인은 DocumentManager 클래스 실행 이벤트를 만들고 각 Document 인스턴스는 이러한 이벤트를 구독하는 것입니다. IMHO 큰 차이를 만들지는 않지만 아직 메모리 누수의 위험이 있습니다.

나는 이들 중 어느 것도 "해결책"이 아니며 문제에 대한 최선의 방법이 있다고 생각합니다. 누군가 제발 나를 밝힐 수 있습니까?

+1

관리자, 처리기 등 용어에는 클래스의 기능이 명시되어 있지 않습니다. 그리고 피해야합니다. –

+0

나는 이것을 잘 모르겠다. DocumentManager가 클래스의 기능을 설명하지 않고 다른 이름을 사용해야한다는 말입니까? –

답변

2

프로젝트의 특정 요구 사항을 알지 못해도 확신이 들지 않지만 내 Document 클래스의 하위 클래스에 있어야하는 DocumentManager 클래스의 논리를 얻었습니다.

load, closewhatever 메서드를 사용하여 (잠재적으로 추상적 인) Document 기본 클래스를 상상합니다. 각 하위 클래스는 특정 요구 사항에 따라 해당 메서드를 구현하므로 DocumentManager의 로직을 변경하지 않고도 Document 하위 클래스를 쉽게 만들 수 있습니다 (polymorphism 참조). 이러한 작업이 비동기 인 경우 Document 클래스는 완료되었음을 알리는 DocumentManager 이벤트를 전달합니다.

이렇게하면 DocumentManagersingle responsibilityDocument 인스턴스를 관리하고 있습니다 (추측하겠습니다).

관련 문제