2017-01-18 6 views
0

私はさまざまな状態で実行するアプリケーションを持っています。例えば、state1state2、およびstate3です。アプリケーションの特定の動作は、ボタンが押されたなどのアプリケーションの状態に依存し、ボタンの状態に応じて状態が変わります。JavaScriptの状態と状態の変化を追跡するためのイディオム

標準イディオムまたはデザインがあるかどうかは疑問ですJavaScriptの状態変化を追跡するためのパターン。おそらく、私の言葉遣いは誤解を招くか、または不正確なので、私は例を挙げます。私はこのような状態を確認することがあります:

function foo() { 
    if (currentState === someState) { 
     doSomething(); 
    } 
} 

しかし、私は複数の場所に文字列の状態をハードコーディングする必要はありませんように、状態を追跡したい、つまり、私は避けたいですこのこと:私はCURを変えることができる

var appState = { 
    state1: 'state1', 
    state2: 'state2', 
    state3: 'state3' 
} 

この方法:

function foo() { 
    if (currentState === 'state1') { 
     doSomething(); 
    } 
} 

を念頭に来て最初にすることは、可能な各状態のためのプロパティを持つappStateオブジェクトを作成することですしかし、何かがこのソリューションについてオフに感じている

if (currentState === appState.state1) { 
    ... 
} 

;:のようなアプリの状態を借りる:

などの状態を確認しますおそらくプロパティ名と値の繰り返し。

一般的なパターンやベストプラクティスを知るには、JavaScriptを読み書きする経験がありません。私は、上記の状況にJavaScriptコミュニティが従う標準的なソリューション/イディオムがあるのか​​どうか疑問に思っています。この質問を調べることで、私はState design patternthis nice postというパターンをJavaScriptに適用する方法を知りました。私はこのルートを検討して、それを完全には割り引いていませんが、単純なアプリケーションでは不必要に複雑かもしれないようです。

+0

ので、 、 質問は何ですか?有限状態機械の使い方は? –

+0

ハードコードされた文字列がそれほど悪いのはなぜ分かりませんか?数字を使うこともできますか? –

+0

このためのイディオムは "貧弱なデザイン"です。 – theonlygusti

答えて

2

JavaScriptは非常に動的なので、決して最良の解決策ではありません。あなたが大好きなものをベースにしています。私は、このようSTHん、イベントに異なる機能を実行するでしょう:あなたがrepetetiveになりたいいけないよう

var states={ 
    dark:{ 
    alert:function(){ 
     alert("its night"); 
    }, 
    //more to come 
    }, 
    bright:{ 
    alert:function(){ 
     alert("its day"); 
    } 
    } 
    }//etc 

ただ、すべての州で、それにその変更を関数を置きます。あなたは、現在の状態を設定できます

var currentstate=states.dark; 

今、あなたはどこかにあなたのコードでは、行うことができます。

currentstate.alert(); 

状態が明るいに設定されている場合、これも動作します。ウィッヒ状態が最新であるかを確認するには、あなたが行うことができます:

if(currentstate==states.dark) 

しかし、状態はその後、無意味なあなたの例であることありえないオブジェクト。

PS: 上部構造を改善するには、サブ状態を持っているOOPを使用することができます(つまり、別の状態に似て振る舞う)

states.grey=Object.create(states.dark); 
states.grey.alert=function(){ 
    alert("its getting brighter..."); 
}; 

また、これはあなたのタイプミスの問題を解決します:

state.dak //error: cannot read property of undefined. 
関連する問題