取播放數(shù)據(jù)到播放乃至展現(xiàn)上的各種功能各種問題了。但由于這層Flash的封裝,導(dǎo)致很多東西無法直接被我的代碼控制,于是就得另辟蹊徑。
比如“豆瓣電臺”的Flash上有幾個(gè)按鈕,分別對應(yīng)幾種操作。為了能用快捷鍵實(shí)現(xiàn)同樣的操作,就需要調(diào)用Windows的API,模擬發(fā)送點(diǎn)擊按鈕的消息。而在實(shí)踐中我又發(fā)現(xiàn)當(dāng)程序最小化時(shí),模擬發(fā)送的消息不起作用,應(yīng)該是最小化時(shí)窗口異化了,不恩那個(gè)再根據(jù)正常大小的坐標(biāo)發(fā)送消息,為了解決這個(gè)問題,我又重新實(shí)現(xiàn)了窗口最小化的表現(xiàn),把窗口以正常狀態(tài)挪到了屏幕外側(cè)而不是真正的最小化。
再比如播放的數(shù)據(jù),關(guān)于歌曲的一切信息都是由Flash接收的,除非監(jiān)聽網(wǎng)絡(luò),否則無法獲得這些原始數(shù)據(jù),而監(jiān)聽的話效率又太低,過濾干擾數(shù)據(jù)也不容易,于是我就用各種方法來獲取這些原始數(shù)據(jù)。比如歌曲名會同時(shí)更新到Flash所在網(wǎng)頁的標(biāo)題上,我就處理瀏覽器的TitleChanged事件;再比如“豆瓣電臺”有個(gè)標(biāo)明是否喜歡當(dāng)前歌曲的邏輯,這個(gè)“是否喜歡”當(dāng)然是在我得不到的源數(shù)據(jù)里面,但它會在界面上表現(xiàn)出來——喜歡就是“紅心”,不喜歡就是“灰心”,那我就獲取心所在坐標(biāo)的顏色,紅色就是“喜歡”,灰色就是“不喜歡”。
這些Hack的方法,有些是能從網(wǎng)上搜到的,有些就得靠自己的經(jīng)驗(yàn)甚至是靈機(jī)一動想出來的了,正所謂“條條大路通羅馬”,如果正路走不通,找找偏門也許還能更快達(dá)到目的。
版本管理
這里說的不是代碼的“Version Control”,而是軟件本身的版本管理。如果軟件不給別人用,自然不用考慮什么版本,編譯-》覆蓋就好了。但如果要發(fā)布出去,版本就是必須的了,除非你就做一錘子買賣。
版本的定義其實(shí)按照自己喜好來就好了,VS里面有一套按照編譯次數(shù)來定義的規(guī)則,此外還有什么“單數(shù)內(nèi)部,雙數(shù)發(fā)布”之類的規(guī)矩。不過我個(gè)人喜歡用發(fā)布日期來定義版本,這樣簡單好記,而且讓用戶一看就知道需不需要更新。
比較麻煩的是怎樣提示用戶更新。最簡單的當(dāng)然是在網(wǎng)上發(fā)個(gè)帖子,說“我更新啦”,但這樣當(dāng)然不大靠譜。還有一種簡單還比較靠譜的辦法,就是隨便找個(gè)網(wǎng)絡(luò)空間,上傳一個(gè)文件,在里面添加版本信息,最好再加上些更新介紹什么的,每次程序啟動的時(shí)候讀取這個(gè)文件,來提示用戶更新,當(dāng)然還要把用戶導(dǎo)向你的下載頁面。更高級的自然是用戶不用手動下載,自動更新+自動安裝+自動重啟或者提示重啟,這就看起來比較成熟了。小軟件嘛,我覺得第二種就挺好,因?yàn)楹唵危冶緛沓绦蚓筒淮?,下載也不會太麻煩。
插件擴(kuò)展
一個(gè)軟件,越做肯定是越復(fù)雜的,功能越來越多,操作越來越繁瑣。KISS原則很好,但當(dāng)你面對用戶們勤勞的申訴,熱情的郵件,渴望的留言時(shí),你又怎能無動于衷,而且往往添加一個(gè)新功能并不是困難的事情。
于是當(dāng)你花了一個(gè)下午把用戶的需求統(tǒng)統(tǒng)滿足然后更新,滿心期待用戶的感謝與贊美的時(shí)候,卻發(fā)現(xiàn)人們開始抱怨“怎么這么多亂七八糟的功能?”“太臃腫了!”“我要原來那個(gè)簡潔的版本!”
然后你就迷茫了,就困惑了,感慨一聲“真TMD難伺候”,然后把原來的簡單版本打個(gè)包,再冠之以“簡潔版”發(fā)布出來。
當(dāng)有人跟你留言“你好,可不可以只添加這個(gè)功能就好了呢?”你差不多該瘋了。
所以用KISS原則來架構(gòu)程序的主體,然后再輔以插件系統(tǒng),這才是解決問題的最佳方案。而.Net的反射機(jī)制,基本是為插件系統(tǒng)量身定做的,足夠容易,足夠方便,具體可以參見園子里的相關(guān)文章http://zzk.cnblogs.com/so.aspx?w=%E6%8F%92%E4%BB%B6%E7%B3%BB%E7%BB%9F&t=,這樣大家各取所