2009-03-28 4 views
0

세 가지 구성 요소가 있습니다. Windows Forms 컨트롤 (맞춤형), 기본 클래스 및 플러그인 클래스.이벤트에 동적 응답

플러그인은 컨트롤에 무언가를 추가해야하는 업데이트 이벤트를 생성합니다. 이것은 문자열, URL이있는 문자열 또는 다른 컨트롤 일 수 있지만, 미래에는 다른 것일 수 있습니다.

이런 식으로 설계하는 가장 좋은 방법은 무엇입니까?

편집 :

나는 좀 더 명확해야합니다. 내가 해결하고자하는 문제는 특정 항목에 다르게 대응하는 방법입니다.

예 : 플러그인은 텍스트를 추가하기 만하면됩니다. 이벤트를 전달하고 주 클래스는 해당 메서드를 호출해야합니다. 그러나 다른 플러그인은 사용자 정의 컨트롤을 추가 할 수 있으므로 기본 클래스는 다른 메소드를 호출해야합니다.

특정 이벤트에서 주 클래스가 다른 방식으로 작동하는 부분을 어떻게 만들 수 있습니까?

(btw, 말 그대로 단어 플러그인을 사용하지 마십시오. 지금은 프로젝트의 클래스입니다.)

답변

0

꽤 간단합니다. 나는 당신의 플러그인 클래스를위한 인터페이스를 사용하도록 제안 할 것이다.

interface IPlugin 
{ 
    event EventHandler PluginUpdateEvent; 
} 

어느 양식 클래스 또는 수집 또는 요구 사항이 있었다 어떤 플러그인의 배열을 포함하고 당신이 필요하지만 그들을 발견 할 것이다 당신의 메인 클래스 - 최고의 무엇이든 반사, 생성자 주입, 설정 파일을 통해 .

플러그인을로드 할 때 해당 플러그인의 PluginUpdateEvent에 가입 된 양식인지 확인하고 이벤트 핸들러를 추가하여 이벤트를 처리하고 양식에 필요한 것을 추가하십시오.

0

사용 모델 - 뷰 - 컨트롤 디자인 패턴을 체크 아웃 Event Aggregator pattern

를 사용할 수 있으며, 귀하의 의견은 callBackFunctions 통과에 당신이 그들을 실행하려는.

-- the code is in LUA 
-- **** I create an answerBox, and when user tap this answerBox I want to print->"test" 

local answerBox = require "view.answerBox" 
local test = answerBox:new() 
test.init("text for your answerBox", "1", function() print "answerBox was tapped by the user" end) 

및 answerBox 클래스에서 나는 기능을 얻을 목적이 도청 될 때를 호출이 볼이 구조를 사용하면

-- constructor 
function new(self, message, id, callBackFunction, obj) 
    function callBackFunction(event)    
     callBackFunction(event) 
    end 
    obj.answerBox:addEventListener("tap", callBackFunction) 
end 

하는 것은주의해야합니다. 이 구조에서 answerBox 클래스는 View에 있고 CallBackFunction은 컨트롤러에 있습니다. 심지어 모델 대신 로직을 사용할 수도 있습니다. function() print "test" end

희망이 도움이 될 것입니다. ;)

관련 문제