세 인터페이스 : IServer, IComponent, IClient.
이들 사이의 연결은 이벤트를 통해 수행됩니다. 나는 그들 각각을 구현하는 Server, Component, Client
클래스를 작성한다.메서드의 두 엔트리 포인트를 구별하십시오
구성 요소 간에는 종속성이있을 수 있습니다. 즉, x.Start()
이 호출 될 때 x에 종속 된 구성 요소 y - 모든 자손 Start()
이 호출됩니다. 종속성은 AddDependency()
방법으로 생성되며 IComponent
입니다. (아래 소스 코드 링크 참조).
클라이언트는 이벤트를 사용하여 구성 요소를 직접보고 서버를 통해 상호 작용할 수 없습니다. 이 작업은 모든 구성 요소와 클라이언트가 서버에 등록 된 후에 수행됩니다.
문제점 : 2 엔트리 포인트 갖는다 Start()
방법 : (자손 개시) Start()
Component
이벤트 핸들러 호출 : 1 Start()
가 Server
이벤트 핸들러 (1'st 성분) 2에서 호출한다. 경우 1
: 구성 요소의 상태가 이미 Running
경우 - 2의 IllegalOperationException
을 던져 : 자손이 이미 Running
경우 - 아무것도하지 않습니다.
1과 2를 구별하는 방법은 무엇입니까?
제한 사항 : - 수정중인 인터페이스 - 금지됨 - 다운 캐스팅 - 금지됨.
내가 보는 한 가지 해결책은 static 플래그를 넣는 것으로, 1 번째 구성 요소에 대한 Start()
이 호출 된 직후에 내립니다. 그러나 외부 메소드가 인터페이스에 지정된 것보다 많은 것을 볼 수 있도록 플래그가 일부 "외부"메소드 (예 : 서버의 핸들러)에서 다시 초기화되어야하므로이 접근법은 캡슐화를 파괴합니다. 또한 이것은 Start()가 Server에서만 호출된다는 것을 암시 적으로 의미하며 문제는 보장되지 않습니다.
더 이상의 아이디어가 있습니까?
출처 : 사전에 http://rghost.net/38868270
감사합니다.