WPF做的小型音樂播放器-升級版


上一個版本 是利用周日休息時間制作的,考慮不充分,開發時間也短,只完成了加載頻道列表和播放歌曲的功能.這幾天晚上在家進行了部分加工,首先是完善了部分功能,其次對部分不合理的設計進行了重構(還不知道重構得合理不合理).

首先看下部分功能截圖:

首先是搜索功能完成了部分.點擊搜索功能會切換到該頻道,並加載歌曲放歌.設計時,就把搜索做成了一個模塊,頻道是一個模塊,播放器是一個模塊.選中搜索結果,會由搜索模塊發出事件消息.頻道模塊根據選中的搜索結果構造合適的頻道,並發出事件通知播放器.播放器根據當前頻道再加載歌曲.

這樣子設計的好處是,模塊只需要關心自己的業務邏輯,方便維護.比如,所有對頻道的操作都是在頻道模塊內,所有對歌曲的操作都是在播放器模塊,不會造成邏輯混亂.

其次就是左側的導航,以前是在頁面寫了5個Region,這樣很傻的,現在是通過把模塊注冊到TabControl的方式來實現.這樣更好方便管理.

有個小功能,在不同的歌曲時,會根據封面圖片切換背景色.設計時把封面做成了一個模塊,封面模塊會監聽切換歌曲的事件,並下載圖片.圖片下載完畢后,通知主界面更換背景色.

這里更可以看到,在ViewModel通過調用InteractionRequest或者其他的方式來操作動畫是沒有任何問題的.

彈出的子窗口,也會跟着主窗口變色,這個用個綁定就實現了.程序里定義了一個ChildWindowViewModelBase類,專門處理彈出窗口,在ViewModel內部可以實現窗口的打開關閉等常用功能.

這里的窗口打開后,對應按鈕是灰掉的.只需要保證按鈕和窗口的DataContext是同一個ViewModel,再利用一個IsOpen的屬性就很好實現了.如果用事件驅動,就不得不注冊一堆事件來實現這個功能,這也體現了MVVM把UI和邏輯分開的優勢.

應用程序內置了一個捕捉異常的模塊,這里是通過應用程序發起一個出錯的事件消息,ExceptionViewModel捕捉到后記錄日志,打開提示框.

現在的項目采用了大量的事件消息.比如:所有模塊加載完畢會發出一個事件消息,Channel模塊捕捉到后會開始加載頻道,Account模塊會開始嘗試自動登錄等等.應用程序退出會發出一個事件消息,右下角氣泡(Notify模塊)會釋放資源.

合理的采用事件(EventAggregator)會避免模塊之間的強引用,實現解耦.

現在的解決方案已經頗具規模了.接下來可能再加入一個歌詞模塊,然后就不會有新的模塊了.

這里得說下分這么多模塊的好處:

首先,按照上面說的,把業務邏輯分到不同的模塊,方便維護.如果是團隊開發,那么把模塊分給不同的開發人員,互相的開發工作也不會受到影響.

其次,模塊可以實現按需加載.目前項目中模塊是全部加載的,我們可以做個適當的判斷,只加載其中部分.最關鍵的是,由於模塊之間沒有強引用,缺少部分模塊對應用程序不會產生任何影響!可能你只是不能搜索,或者不能登錄,或者不能放歌,但是應用程序會正常運行,而且其他模塊的操作都可以正常進行.

第三,可以隨時建立模塊來替換以前的模塊.同上所述,這樣的替換操作不會對應用程序帶來任何影響.

 

目前很多功能都不完善,我會慢慢的把功能都補上,並嘗試加點自己覺得有用的東西.當然,所有的代碼都是以Prism為框架,MVVM模式為指導思想.

最后還是放上源碼.

注意:此項目UI和部分邏輯參考了開源的音樂播放器 豆瓣電台 ,請大家只用來做學習和拍磚樓豬的武器就行了.

再注意:項目采用VS2012開發,VS2012SP1能順利打開.

源碼下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM