2017-03-03 4 views
0

이 질문은 오히려 특정 언어보다 개념에 관한 것입니다. 나는이 변수의 값이 바뀔 때 호출되어야하는 "변수"와 일부 핸들러를 가지고있다. 자바 스크립트로 구현되었지만 중요하지는 않습니다. 여러 핸들러는 동일한 변수의 값을 볼 수 있으며 관찰자로 등록 된 동일한 순서로 호출됩니다. 이 핸들러 중 하나에서 값이 변경되면 어떻게해야합니까? 나는이 aproaches 생각 해요 :관찰 된 변수의 값을 설정하십시오.

  1. 값은 "onChange가"핸들러에서 변경할 수 없습니다 - 같은 방법은 예를 들어 MySQL의에서 트리거로 알려져있다. 그러나 그것은 불편하고 제한적입니다.

  2. 값이 비동기 적으로 변경됩니다. 모든 처리기가 호출 된 후 "다음 틱"값이 변경되고 모든 처리기가 다시 호출됩니다. 그것은 작동 할 수 있습니다 (나는 무한 루프에 대해 신경을 써야한다는 것을 알고 있습니다). 이 접근법의 단점은 모든 핸들러가 두 번 호출되고 이것이 성능에 부정적인 영향을 미칠 수 있다는 것입니다 (UI 깜박임)

  3. 값이 동 기적으로 변경됨 - 하나의 핸들러에서 값이 변경된 후 핸들러 인 경우 핸들러 큐 처리가 중지됨 큐가 다시 시작될 때부터 처리됩니다. 장점 - 모든 핸들러가 두 번 호출되는 것은 아닙니다. 단점 - 등록 주문 문제.

+0

이 질문에는 알고리즘이 없습니다. 귀하의 질문은 어쨌든 프로그래머에게 더 적합 할 수 있습니다. – BartoszKP

+0

@BartoszKP :이 질문에는 세 가지 알고리즘이 있습니다. 문제가 어디에 있습니까? – clemens

+0

@macmoonshine 이들은 알고리즘이 아닌 가정과 제약 조건의 집합입니다. – BartoszKP

답변

1

또 다른 대안은 두 가지 종류의 처리기를 구현하는 것입니다. 사전 및 사후 할당 처리기. 사전 할당 핸들러 만이 값을 변경하고 핸들러를 다시 트리거하지 않고 프리 핸들러가 변수를 변경하는 경우 허용됩니다. 귀하의 경우에는 사전 할당 처리자로 값을 변경할 수있는 모든 처리기를 정의하고 사후 할당으로 다른 처리기를 정의합니다.

이 방법을 사용하면 모든 처리기가 방금 한 번 호출됩니다.

+0

resposibility의 훌륭하고 분명한 부문. 나는 그것을 좋아한다. – user2106769