2017-03-03 40 views
0

這個問題是關於概念而不是特定的語言。我有一些「變量」和一些處理程序 - 當這個變量的值被改變時要被調用的函數。它在JavaScript中實現,但並不重要。幾個處理程序可以觀察相同變量的值,並按照它們作爲觀察者註冊的順序進行調用。在這個處理程序之一中,我應該怎麼做纔會改變價值?我想這些aproaches:觀測變量的設定值

  1. 值不能在「的onChange」處理程序被改變 - 同樣的方法從已知的觸發器在MySQL例如。但它是不舒服和限制。

  2. 值異步更改 - 所有處理程序都被調用,然後在「下一個打勾」更改值並重新調用所有處理程序。它可以工作,(我知道我需要關心無限循環)。這種方法的缺點是所有的處理程序都會被調用兩次,這可能會對性能產生負面影響(閃爍的UI等)

  3. 值同步更改 - 處理程序隊列處理在一個處理程序中更改時停止,然後是處理程序從開始再次處理隊列。優點 - 並非所有的處理程序都被調用兩次。缺點 - 註冊順序很重要。

+0

這個問題沒有算法。無論如何,你的問題可能更適合程序員。 – BartoszKP

+0

@BartoszKP:我在這個問題中看到三種算法。哪裏有問題? – clemens

+0

@macmoonshine它們是假設和約束的集合,而不是算法。 – BartoszKP

回答

1

另一種選擇是實現兩種處理程序:分配前處理程序和分配後處理程序。只有預賦值處理程序才允許更改該值,並且預處理程序在不重新觸發處理程序的情況下更改該變量。在你的情況下,你可以定義所有的處理程序,這些處理程序可以將值更改爲預分配處理程序,將其他值作爲後分配。

通過這種方法,每個處理程序只被調用一次。

+0

好的和明確的責任劃分。我喜歡。 – user2106769