緣由
做一個藍(lán)牙方面的 APP邑雅,需要在系統(tǒng)進(jìn)入休眠之前關(guān)閉藍(lán)牙妈经,在系統(tǒng)喚醒之后開啟藍(lán)牙。是否由這個系統(tǒng)事件來觸發(fā)藍(lán)牙的開與關(guān)吹泡?(開關(guān)廣播,增刪服務(wù))
思考
雖然從表面上來看爆哑,將這個系統(tǒng)事件作為藍(lán)牙的開關(guān)是自然而然的,把它寫出來:
系統(tǒng)事件-->APP 中藍(lán)牙的開關(guān)
怎么看上述關(guān)系都是很別扭的队贱。仔細(xì)思考后,實際上有三個時間點來作這個開關(guān):
- 系統(tǒng)事件時間點
- APP 本身的活動時間點
- 藍(lán)牙狀態(tài)變化時間點
可能這三個事件本身有一定的因果關(guān)系柱嫌,但是是層層遞進(jìn)的,是有層次的编丘。將藍(lán)牙的想著設(shè)定放在系統(tǒng)級和 APP 級都是不合適的,放在藍(lán)牙狀態(tài)反轉(zhuǎn)時最合適嘉抓。
結(jié)論
- 相應(yīng)的事件處理要放在相應(yīng)級別的狀態(tài)的切換點。
- 即使相應(yīng)級別狀態(tài)反轉(zhuǎn)由其它層級決定蕾盯,也應(yīng)該增加相應(yīng)的抽象。
上一點作一下解釋:
層級 A狀態(tài)變化-->層級 B狀態(tài)變化,有一事件 層級B 的處理函數(shù) SomeFunc()望拖。若層級 B 沒有相應(yīng)的狀態(tài)標(biāo)識,自然想到的處理邏輯就是:
func stateAChange(){
switch stateA{
case1: //code
case2: //code
...
}
}
但是這個邏輯不明確说敏,應(yīng)該增加相應(yīng)的抽象層,抽象出一個層級 B 的狀態(tài)指示標(biāo)識盔沫。
func stateAChange(){
switch stateA{
case1: stateB = //
case2: stateB = //
...
}
}
func stateBChange(){
//code
}