2013-05-18 2 views
0

이벤트 (변경 가능한 개체가 아닌)에서 보낸 사람의 상태를 수정하는 것이 좋지 않습니까? C# 이벤트가 보낸 사람 상태를 변경합니다.

내가 찾은 모든 이벤트의 예

은 매우 간단하고 만 같이 할 Console.WriteLine("event!")

간단한 코드 :

public void HandleEvent(object sender, EventArgs args) 
{ 
    ClassA a = (ClassA)sender; 

    a.doSomething(this.makeSomething()); 
} 
+1

나는 많은 경우에 괜찮다고 생각한다. 이벤트가 "나는 더 많은 데이터를 준비했습니다!"라고 상상해보십시오. 당신은 그런 사건들에 대해 발신자를 돌연변이시킬 것으로 예상됩니다. –

답변

2

그렇게 나쁜 행동은 아니지만 조심해야합니다. 예를 들어, dosomething이 이벤트 핸들러에서 호출되거나 직접 호출되면 관련성이 있습니다.

eventhandler가 트리거 될 때 의존 할 수 없기 때문에 비동기식이므로 dosomethingelse를 호출하기 전에 dosomething이 실행 된 것으로 간주 할 수 없습니다.

예 : dosomething은 1 일 때만 상태를 2로 변경해야합니다. 1이 아니거나 이미 2 이상의 논리가 필요한 경우.

이 구멍으로 사라지기 시작하면 dosomething 요청을 대기열에 넣은 다음 현재 상태 및 요청 대기열을 처리하는 엔진을 갖는 것이 좋습니다.

그래서 dosomething을 호출하는 다른 메소드와 관련하여 생각해보십시오. 그것이 자체적으로 포함되어 있다면, 의존성이 확산되기 시작하면 괜찮습니다. 나쁜 습관과는 반대되는 나쁜 생각입니다.

1

내가 지금까지 당신이 가정을하지 않는 한, 그것은 나쁜 관행을 고려하지 않을 것 이벤트에 등록 된 이벤트 핸들러를 호출 할 런타임이 따르는 순서에 대해 설명합니다. 실제로 주문 not guaranteed 인 경우 발신자을 포함하여 개체의 상태를 변경하는 데 의존해서는 안됩니다.