本文會作為一個(gè)系列,分為以下部分來介紹:
(1)見識一下這個(gè)界面框架;
(2)界面框架如何進(jìn)行開發(fā);
(3)輔助開發(fā)支持:Demo、模板、VsPackage制作。
框架源碼如下所示。
本文介紹第(1)部分。
1 安裝
現(xiàn)在我們就先來見識一下這個(gè)界面框架。首先,你可以通過以下鏈接來下載到這個(gè)框架的VS插件安裝包:下載地址。下載解壓后,文件如下:
雙擊這個(gè)文件,進(jìn)行安裝(目前只支持VS2012和VS2013,拋棄了VS2010,I am sorry)。
點(diǎn)擊安裝,即可完成。
2 創(chuàng)建主程序
接著打開Visual Studio 2013,新建項(xiàng)目,選擇默認(rèn)iOpenWorksExtension。
這里面有兩個(gè)模板,一個(gè)是主程序、一個(gè)是插件。在這里,我們先創(chuàng)建一個(gè)主程序,你可以發(fā)現(xiàn)主程序已經(jīng)包含了一些通用的功能插件,比如界面框架、配置服務(wù)、數(shù)據(jù)庫服務(wù)、權(quán)限管理等。在編譯主程序之前,需要確保已經(jīng)安裝了iOpenWorksSDK和Nuget。
這里編譯時(shí)需要OSGi.NET框架支持,并使用Nuget去下載一些第三方庫。編譯通過后,可以直接運(yùn)行主程序。
首先是一個(gè)SplashWindow。
接著是一個(gè)Login窗體,輸入默認(rèn)管理員admin/admin。
登錄成功后,顯示如下主界面,左邊是可擴(kuò)展導(dǎo)航欄、右邊是可擴(kuò)展顯示區(qū)域、底下是狀態(tài)欄,右上角有可擴(kuò)展的系統(tǒng)菜單。
3 創(chuàng)建插件
接著,我們在項(xiàng)目中來添加一個(gè)新建插件。需要注意的是:插件目錄必須位于主程序的bin/Plugins目錄。
插件創(chuàng)建完成后,其項(xiàng)目結(jié)構(gòu)如下所示。
這是一個(gè)使用MVVM架構(gòu)開發(fā)的典型的應(yīng)用。Model表示數(shù)據(jù)庫模型、DataAccessor表示數(shù)據(jù)庫訪問類、ViewModel表示視圖模型。接著我們來運(yùn)行項(xiàng)目。你可以發(fā)現(xiàn)界面多了一個(gè)功能模塊。
插件定義了一個(gè)CourseManagementUserControl.xaml頁面,當(dāng)點(diǎn)擊“課程管理”菜單時(shí),便在右邊顯示區(qū)域動態(tài)展示出來。點(diǎn)擊“增加/編輯”時(shí),在右邊彈出一個(gè)輸入框,加載了AddOrEditCourseUserControl.xaml控件。在插件的Manifest.xml文件,你可以看到,插件是通過以下配置將菜單和現(xiàn)實(shí)內(nèi)容注冊到界面框架的。
另外,在插件的BundleActivator里面定義了如下服務(wù)供插件直接調(diào)用。
服務(wù)即通用功能,有:
(1)PermissionService權(quán)限檢測服務(wù):編碼方式來判斷當(dāng)前用戶是否具有某個(gè)權(quán)限;
(2)ConfigurationService配置服務(wù):持久化保存界面位置、大小、顏色等個(gè)性化信息;
(3)DbConnectionFactoryService數(shù)據(jù)庫連接工廠:獲取數(shù)據(jù)庫連接;
(4)MainWindowService主窗體服務(wù):用于關(guān)閉當(dāng)前顯示區(qū)域和打開/關(guān)閉側(cè)邊框。
在插件開發(fā)過程中,我們可以直接來寫模型、數(shù)據(jù)庫訪問、視圖模型、視圖代碼,如果需要使用框架功能,你就調(diào)用上述4個(gè)服務(wù)即可,不再需要與任何框架打交道。下面我們可以嘗試來添加一個(gè)新的XAML頁面ContactsManagementUserControl.xaml,并更改Manifest.xml做如下配置。
此時(shí),運(yùn)行后,新頁面便可以加載到內(nèi)容區(qū)域了。
下來就可以在這個(gè)頁面上根據(jù)業(yè)務(wù)來編寫頁面顯示、ViewModel等代碼了。
4 框架體驗(yàn)總結(jié)
通過上述簡單演示,你可以發(fā)現(xiàn)這樣的框架有如下好處:
(1)高復(fù)用:界面可服用、通用功能可服用;
(2)標(biāo)準(zhǔn)化:每一個(gè)插件都是用標(biāo)準(zhǔn)的架構(gòu)、標(biāo)準(zhǔn)的代碼來進(jìn)行開發(fā),容易維護(hù);
(3)模塊化:可以將一個(gè)大軟件分成不同模塊,由不同人開發(fā)不同插件來組合;
(4)分層:強(qiáng)制將基礎(chǔ)插件與業(yè)務(wù)插件分為不同層次,不至于出現(xiàn)基礎(chǔ)插件調(diào)用業(yè)務(wù)插件的功能;
(5)一致的用戶體驗(yàn):框架提供標(biāo)準(zhǔn)化UI,使整個(gè)系統(tǒng)有了一致的展示。
此外,在OSGi.NET基礎(chǔ)上,還可以支持動態(tài)模塊化(動態(tài)安裝、啟動、停止、更新、卸載模塊)、自動化部署與更新功能。