假設這是可能的,假設兩個程序都想這樣。當用戶點擊.XYZ文件時,哪個程序運行?
這種情況下的一種解決方案是用戶來選擇文件的關聯程序;但一旦用戶決定讓另外一個程序來執行.XYZ文件,那你不得不接受這樣的事實。
對於很多這種「我想成為這最X」類型的問題,程序員通常會想出一些伎倆,比如運行一個定時器周期性的檢查自己是否仍是最X,如果不是,就重新把它推到X位。不久,你就會開始停下來思考,「如果兩個程序都這樣做會怎樣?」,於是認識到這是一個糟糕的想法。
就算是我這樣解釋了,很多人仍然不得要領。我讓他們去想想「如果兩個程序都這樣做會怎樣?它們會打架,」而我得到的回復是,「我可以讓第二個程序檢查第一個程序是否在運行。」他們不明白第二個程序不是他們寫的。
當出現兩個程序這樣「互毆」時,我們無法預料哪一個會贏,但我們可以確定的、100%的預料的誰會輸:用戶。
我還清楚的記得有一回同事讓我看有兩個非常流利的商業軟件都想成為當用戶點擊.XYZ文檔時被調用的程序。因為這是沒法保證的,於是軟件里就提供了定時檢查的程序試圖解決這個問題。
你安裝了第一個程序,它把自己設置成.XYZ文件的關聯程序,這看起來很正常。然後你安裝了第二個程序,它也把自己設置成.XYZ文件的關聯程序,這樣第一個程序就跳出來說,「不,.XYZ應該是由我來處理的」,並且把文件關聯改了回去。而第二個程序也說,「沒門,我才是處理.XYZ文件的程序」,並且把自己重置回去。
這種小孩鬥氣式的遊戲進行的時候,用戶只能無助的坐在那裡發愣的看着.XYZ文件的圖標在兩個程序間換來換去。這兩個程序都堅持認為讓自己來處理.XYZ文件是在為用戶着想。
[英文原文:What if two programs did this? ]