前一陣做了一個(gè)小軟件“豆瓣電臺(tái)桌面版”,到現(xiàn)在已經(jīng)基本告一段落。其實(shí)做這個(gè)小軟件,一方面是研習(xí)研習(xí)自己最薄弱的Winform開發(fā),順便掌握了一點(diǎn)Windows API編程的基本知識(shí),更主要的,是體驗(yàn)了一把獨(dú)立開發(fā)軟件的過(guò)程:從需求,到開發(fā),到測(cè)試,到推廣等等一系列的過(guò)程,倒是小有收獲。
這是我第一次獨(dú)立開發(fā)一個(gè)桌面小軟件,身兼設(shè)計(jì)、開發(fā)、文檔、測(cè)試、推廣、客服數(shù)職,體會(huì)不可謂不深,但也不能說(shuō)這些心得就是對(duì)的,在這里拋磚引玉,還望有更多經(jīng)驗(yàn)的童鞋討論指教。
需求篇
和開發(fā)商業(yè)軟件不同,開發(fā)小軟件的第一個(gè)客戶,也是最重要的客戶肯定是開發(fā)者自己。我猜絕大多數(shù)開發(fā)小軟件的童鞋都會(huì)有這樣的一段心路歷程:
“我擦,XXX怎么用著這么別扭” \ “我勒個(gè)去,XXX怎么連這個(gè)功能都沒(méi)有”
-》
Google \ Baidu 一番
-》
下載一個(gè)或者幾個(gè)看上去很美好的似乎可以滿足我們的小小愿望的軟件
-》
各種不給力
-》
一怒之下,打開IDE或者記事本,踏上了開發(fā)小軟件之路
這個(gè)過(guò)程中我們可能還加入了幾個(gè)論壇,看了幾個(gè)博客,下載了幾分源碼,最好別丟掉它們,它們會(huì)是很寶貴的資源。
既然需求是自己提的,一切都好說(shuō)。這時(shí)如果有前人的代碼借鑒更是容易,有時(shí)只要改動(dòng)幾行代碼就可以了;即使是沒(méi)有代碼,既然能動(dòng)手寫,至少說(shuō)明心中有數(shù),一般也不會(huì)太困難,一個(gè)周末基本就搞定了。
如果就此打住,可能只是誕生了一個(gè)小工具,一段小代碼,沒(méi)有推廣的必要,也就沒(méi)有接下來(lái)的麻煩了,但這時(shí)候,可能心中一點(diǎn)點(diǎn)小小的完美主義會(huì)跟你說(shuō)“你不能做的更好么?”然后你開始會(huì)想之前看到的AAA、BBB、CCC軟件,它們的XXX、YYY、ZZZ功能看上去都不錯(cuò),為什么我不把它們也添加到自己的軟件里面呢?這樣你之前的一點(diǎn)小小的自我滿足欲開始向更大的野心膨脹了。
開發(fā)篇
語(yǔ)言+平臺(tái)
開發(fā)小軟件,當(dāng)然是越快越好,如果再有點(diǎn)野心,越方便擴(kuò)展越好。.Net雖然基本還是個(gè)Windows Only的框架,但開發(fā)效率實(shí)在是高,而且本人也最熟,所以豁上放棄Linux和蘋果的用戶,也毅然選擇了.Net和C#。
不過(guò)用.Net開發(fā)桌面應(yīng)用程序也有好幾個(gè)選擇,一個(gè)是Winform,一個(gè)是WPF,還有一個(gè)是可脫離瀏覽器的Silverlight。
Winform:各種庫(kù)各種控件很豐富,開發(fā)較快,而且可以直接調(diào)用系統(tǒng)各方面資源,再一個(gè)性能比較好,占得資源比較少;但一些在WPF和Silverlilght下很容易實(shí)現(xiàn)的效果在Winform下就會(huì)很困難,更別說(shuō)動(dòng)畫了,而且布局方面也很麻煩。
WPF:大部分的Winform控件都可以直接放到WPF里面,也可以直接調(diào)用系統(tǒng)各方面資源,動(dòng)畫、特效什么的都很容易實(shí)現(xiàn),流式布局或者表格布局也很方便;最大的問(wèn)題是性能較差,占用資源大概是Winform的兩倍左右。
Silverlight(Out of Browser):布局方便,動(dòng)畫、特效也很多;但控件比WPF的弱,不能直接調(diào)用系統(tǒng)資源。
最后考慮到我的軟件需要調(diào)用系統(tǒng)資源,同時(shí)也要考慮性能(一個(gè)小小的電臺(tái)軟件占用物理內(nèi)存六、七十兆還是有點(diǎn)夸張),選擇了Winform。
Hack! Hack!
既然是茶余飯后的小軟件,除了必要的良好架構(gòu)之外,最好是在現(xiàn)有的輪子上增增補(bǔ)補(bǔ),而不是完全重新做一個(gè)輪子。但輪子畢竟是別人做的,各種不順手,這時(shí)候就該發(fā)揮我們的才智,用各種小聰明進(jìn)行各種Hack了。
比如“豆瓣電臺(tái)桌面版”,就是直接用WebBrowser控件包了一個(gè)網(wǎng)頁(yè)中的原本的那個(gè)豆瓣電臺(tái)的flash。這樣不用考慮從獲