從我的第一個Flex應用說起(二)——規範與設計

今天,IBM中國研究院的Open House拉開帷幕了,我胡搞瞎搞的FLV播放器也被放到了生產機器上,版本1.0beta3。當然在功能和設計上還很不完善,還需要重新梳理。我還記得寫上一篇的時候版本是0.4,如今已經做了很多改進,與當初的版本相比可以說已經面目全非了。與美工MM合作搞出來的界面、增強了的各種行爲監聽等等。只是由於是趕工的,完全是函數式的編程方式,搜索的東西也都堆在了一個文件裏,沒來得及整理;也沒有註釋和文檔,還沒來得及加上。畢竟,只有數據結構、算法和文檔都齊全且合格了纔有資格約等於軟件。我想這些在之後出1.0候選版本的時候再加上吧。這兩天主要還是爲Open House做支持。

這篇文章要說的第一點恰恰是我現在還沒加入這個小程序上的——規範。寫代碼、編程序是需要規範的,不論用什麼語言、寫什麼應用都是一樣。團隊的開發規範由於這次緊急的任務我還沒有搞出來。Java編碼規範我會在有空的時候寫出來,如果Flex在團隊中得到廣泛應用的話我也會寫Flex的編碼規範,當然還有項目規範。這個事我還是比較胸有成竹的,因爲爲以前所在的幾個團隊都出過規範。每個團隊都需要規範,這可以使得團隊的開發和維護成本極大的降低。爲什麼這麼說?我依託“敏捷”這個現在很流行的思想來說吧。大家都知道敏捷開發中有結對編程和交叉測試這兩項內容。那麼我們怎麼保證在結對的時候雙方都能輕而易舉的看懂對方的代碼?在交叉測試,尤其是結對時所作的交叉白盒測試,怎麼能迅速測出和指出對方代碼中的問題?大家可以思考一下,在代碼格式統一或多樣書寫風格下這項工作怎樣展開?步驟都有哪些?成本如何?這裏我不想多說,留給大家去思考。我相信有過經歷的人會認同我,而那些非常自我的程序員也許會陷入自省或立即BS我。

另外,規範也會成爲團隊管理和項目管理的得力助手,我想管理過團隊的人都會有體會的。我以前所在的團隊,新人加入的第一項任務就是要閱讀和理解規範,而後纔是慢慢介入開發工作當中去。摸過ruby on rails開發的人都會有種感觸,契約式開發要比配置型開發省心得多。團隊管理也是如此。

其實我是想借助這個系列的文章引出一些大家日常工作中普遍存在的事項,將更多可思考的問題拋給大家。我覺得如果單寫這麼一個小小的FLV播放器的設計就太沒意思了,我也幾乎寫不出那麼純的技術文章來。希望大多數人不是在讀到此處之前就已經離開了。

下面說說FLV播放器的設計吧。在寫這個播放器之前我也常常去youku之類的網站看視頻,常常用他們的播放器。像我這種並不聰明的人做東西最開始就是需要去模仿。下面我來講講我模仿出來的基本功能設計:

1、PlayPauseStop這幾個按鈕肯定是大家用播放器最常用的。但是這幾個按鈕怎麼去組合呢。想想看,在按Play按鈕的時候大家是想去播放視頻,在按Pause按鈕的時候大家是想去暫停視頻。這兩個操作所反映出來的意圖恰恰相反,所以這兩個按鈕可以坐在一起,設計成開關狀態。而Stop按鈕,可以在視頻播放或暫停時將播放動作完全停止。所以這個單獨的意圖致使Stop按鈕需要另置於它地。

2、進度滑塊,這個功能會使播放器看上去更高級,大家用起來更方便,是必要的。進度滑塊需要體現兩個功能:一是要實時反映視頻播放的進度;二是要響應用戶的點擊和拖動操作,改變視頻播放進度。第一個功能用Flex非常容易實現。而第二個功能要注意在響應用戶操作的同時怎樣與第一個功能之間做出權衡。比如,在用戶拖動滑塊(點擊、拖動、釋放)和點擊軌道(點擊、滑塊自行滑至點擊處)的過程中,第一個功能需要做出怎樣的讓步纔不會使滑塊抖動甚至反覆跳躍。另外還要注意,滑塊操作與按鈕狀態顯示之間的同步問題。

3、音量調節滑塊和按鈕,這個也是很必要的功能。值得一提的是音量調節滑塊的初始值,這要讓用戶在剛開始觀看視頻的是否不至於感覺刺耳或者聽不到聲音。我這裏所說的音量調節按鈕是指靜音按鈕。當用戶需要立即關閉聲音的時候可以點擊一次即完成操作,而不是用鼠標滑動滑塊到一端。在用戶需要再次聽到聲音的時候,滑塊應該響應用戶對靜音按鈕的點擊而回到靜音之前的位置上去(當然音量也同時回到靜音之前)。這裏是可以提高用戶體驗的。當然,這個功能也同時需要注意音量調節滑塊和音量調節按鈕之間的同步問題。

4、當前播放/總時間顯示,也很能增強用戶體驗,非常必要。這個功能就不多說了,只要與視頻的真實情況一直即可。格式方面,我發現我看到過的播放器大都以“當前播放時間/總時間”來表示的,故跟隨之。要符合大衆的口味嘛。

5、播放器的全屏與還原。在用戶感覺視頻窗口過小時,這個功能就很有必要了。要注意全屏之後播放器的組件佈局是否依然合理。可以通過狀態監聽來根據全屏狀態改變組件到最合適的位置。另外,可以暴露接口以至於能夠用JS從外部設置播放器的寬度和高度,以適應網頁的整體佈局需要。

6、視頻的加載和斷開時間。這個不算是應用功能,但是也是需要注意的。在應用用戶衆多或者帶寬有限的情況下,需要考慮視頻在什麼時候需要創建連接(因爲FLV是流媒體嘛),什麼時候需要真正加載,什麼時候又需要立即斷開連接以節約帶寬。這些操作可以甩到Flash之外,用JS根據具體情況通過接口來操作,這樣就會靈活得多。

以上這些就是做一個FLV播放器所需的基本功能,不知道大家是否已經瞭解了。當然一些高級功能大家也可以根據具體需要加入。比如:視頻默認顯示圖片或動畫(當前視頻在加載時或用戶播放前所呈現的“開胃菜”)、字幕獨立加載和同步(這個相當高級,我這裏也只是有想法而已),等等。大家有興趣的話可以去探索。

我在這裏強調一點,也是很多初級開發者容易忽略的地方。那就是,搞軟件、做程序時刻要注重“用戶體驗”。軟件是做出來讓人用的,而不是自娛自樂的工具。代碼只有創造了價值纔可能稱之爲程序,否則也只能算是一堆字符的亂排。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章