임 디자인 문제로 약간 어려움을 겪고 있습니다. 나는 C#에서 매우 간단한 GUI 시스템을 만들고있다. 이 코드는 재사용이 가능하기 때문에 여기에서 가장 유연한 솔루션을 찾고 있습니다. 내가 생각해내는 해결책에는 모두 단점이있는 것 같습니다.이벤트 기반 통신 설계시 문제가 발생했습니다.
간단히하기 위해 컨트롤러, 버튼 및 클라이언트 코드의 세 가지로 가장 할 수 있습니다. 클라이언트 코드는 gui 시스템을 사용하는 코드입니다. 컨트롤러를 만들고 Update()를 호출합니다. 컨트롤러는 많은 버튼 인스턴스를 만들고 Update()를 호출합니다. 단추가 그려지고 마우스 클릭이 있는지 확인합니다.
이제 문제는 클라이언트 코드에 단추가 클릭되었다는 사실을 얻는 것입니다.
옵션 1 : GetButton (문자열 이름)을 컨트롤러 클래스에 추가하십시오. 그런 다음 클라이언트 코드는 버튼 클래스 => GetButton ("but")에 정의 된 이벤트에 가입 할 수 있습니다. 단점은 Button.Update()가 컨트롤러에 의해 사용되어야한다는 것입니다.
옵션 2 : 컨트롤러를 모든 버튼에 가입시키고 클라이언트 코드를 컨트롤러에 가입시킵니다. 여기에있는 단점은 클라이언트 코드에서 더 많은 코드를 파싱하는 것입니다. 이제는 모든 이벤트가 컨트롤러를 통해 퍼널됩니다. 따라서 클라이언트는 각 이벤트를 보낸 단추를 확인해야합니다. 옵션 1처럼 초기화 단계에서 이벤트 흐름을 설정하는 것을 선호합니다.
옵션 3 : 각 이벤트 (SubscribeMouseUp (string buttonName, GUIDelegate del) 등)에 대한 컨트롤러에 Subscribe/Unsubscribe 메소드를 추가하십시오. 컨트롤러 API가 빠르게 커집니다.
그래서 지금은 옵션 1쪽으로 기울어 져 있지만 GetButton은 이벤트를 선언하여 클라이언트에서 Update()를 숨기는 인터페이스 (IClientButton 어쩌면)를 반환하지만 인터페이스가 있어야하는 방법인지 확실하지 않습니다. 익숙한.
모든 의견에 감사드립니다. Bas