在開發(fā)項目的時候,我們?yōu)榱颂岣咚俣群唾|(zhì)量纬乍,往往不是白手起家仿贬,需要基于一定的基礎上進行項目的快速開發(fā)茧泪,這樣可以利用整個框架的生態(tài)基礎模塊调炬,以及成熟統(tǒng)一的開發(fā)方式舱馅,可以極大提高我們開發(fā)的效率代嗤。本篇隨筆就是介紹基于Winform開發(fā)框架或混合框架基礎上進行項目的快速開發(fā)干毅,這個主題在之前的一些隨筆有一定的介紹硝逢,但是覺得都不是很全面渠鸽、完整徽缚,因此本篇隨筆通過一些簡單的例子以及一個具體的項目案例來進行全流程的開發(fā)出來凿试,希望讀者對基于我們開發(fā)框架的開發(fā)模式有一個更深入的了解那婉。
1详炬、基于框架開發(fā)簡單界面的過程
由于我們框架提供了很多基礎的模塊來給我們新業(yè)務開發(fā)提供便利,如公用類庫蝇闭、分頁控件呻引、字典管理逻悠、權(quán)限管理系統(tǒng)韭脊、自動升級、附件管理饥伊、人員管理琅豆、工作流管理等可以反復重用的模塊茫因。
有了這些模塊的加持,我們開發(fā)項目很多基礎的處理就不用所有的東西都從頭來過洛巢。
對于一個新建的業(yè)務表狼渊,我們需要開發(fā)的需要底層的實現(xiàn)和界面層的展示狈邑,這些工作量也是非常巨大的米苹,如果基于控件細粒度的處理蘸嘶,也是非常繁瑣的工作训唱,因此基于這些開發(fā)過程的考慮,我們引入了提高效率開發(fā)的代碼生成工具Database2Sharp赞庶,專門為我們基于開發(fā)框架基礎上的框架實現(xiàn)代碼開發(fā),和業(yè)務界面展示的快速開發(fā)为肮。
代碼生成工具茅特,不僅能夠讓它生成我們常規(guī)開發(fā)的界面層以下的實現(xiàn)代碼(包括BLL温治、DAL、Entity绸狐、IDAL等層,以及混合框架的WCF累盗、Web API的實現(xiàn)層和調(diào)用封裝層)寒矿,以及界面層的調(diào)用代碼。
有了這些的處理若债,我們可極大減輕工作量符相。
我們開發(fā)新業(yè)務表的處理沒有發(fā)生變化,需要設計好自己的業(yè)務表蠢琳,然后利用代碼生成工具生成對應代碼,最后合并到項目里面并調(diào)整界面為合適的展示方式傲须。
我在之前的隨筆《循序漸進開發(fā)WinForm項目(3)--Winform界面層的項目設計》里面簡單的介紹了一般簡單界面的處理過程蓝牲。
我們首先需要使用PowerDesigner或者同類工具進行表的建模,如下所示泰讽。
然后使用代碼生成工具生成框架代碼例衍,如Winform框架生成下面項目框架代碼昔期。
這個分層,在Web項目或者WInform項目(包括WPF項目)這些分層都是可以重用的佛玄,這樣我們就不用重復處理界面一下的邏輯硼一,針對性的開發(fā)我們需要的界面層即可。
DAL層根據(jù)不同的需要梦抢,擴展支持不同的數(shù)據(jù)庫類型欠动,每個數(shù)據(jù)庫類型,對應一個數(shù)據(jù)庫訪問實現(xiàn)層即可惑申,它們實現(xiàn)IDAL層的接口具伍,稱之為數(shù)據(jù)庫訪問接口實現(xiàn)層。
然后接著在代碼生成工具中單擊“Windows界面代碼生成”后圈驼,生成的窗體界面文件如下所示人芽,分為了兩個部分,一個是列表界面绩脆,一個是數(shù)據(jù)編輯界面萤厅。
然后把相關的界面內(nèi)容復制到剛才創(chuàng)建的空項目工程上,最后界面層的項目截圖如下所示靴迫。
生成的界面打開就具有了常規(guī)的列表和數(shù)據(jù)編輯展示的界面惕味,如下所示。
列表界面包括了查詢玉锌、新建名挥、導入、導出主守,以及分頁控件的整合處理禀倔,分頁控件里面整合支持了各種右鍵操作,包括增加参淫、編輯救湖、刪除,以及各種調(diào)整設置功能涎才。
搞定列表界面鞋既,下面我們再來看看數(shù)據(jù)的編輯界面部分,數(shù)據(jù)編輯界面生成的效果如下所示(由于版面的原因耍铜,我把它進行了一定的縮幸毓搿)。
我們看到业扒,里面的字段說明检吆,控件的名稱等內(nèi)容,都已經(jīng)合理安排好了程储,基本上設計數(shù)據(jù)庫的時候蹭沛,指定的字段備注就能正確生成出來了臂寝。
這里演示的表字段比較少,因此可能排版布局方面沒有很好的演示效果摊灭,不過我們知道DevExpress本身的LayoutControl布局很強大咆贬,我們可以隨意調(diào)整里面控件的位置。
對于控件的類型帚呼,也可以進行不同類型的轉(zhuǎn)換掏缎,如可以吧文本類型,轉(zhuǎn)換為數(shù)值類型的輸入控件等等煤杀。
如果對于復雜的界面眷蜈,我們需要進行一定的合并拖動處理,以實現(xiàn)我們所需要的界面效果沈自,如下所示酌儒。
對于界面層大量的處理操作,我們后臺的代碼基本上不需要調(diào)整枯途,從而減少我們出錯和降低效率的問題忌怎。
以上就是我們在做一個簡單界面的過程中,一些開發(fā)思路過程酪夷。
2榴啸、實際的項目開發(fā)過程
以上介紹過程中,基本上設計到了核心的開發(fā)流程了晚岭,而我們實際的項目開發(fā)過程中鸥印,可能還需要涉及到更細節(jié)的一些過程。
1)基礎項目的生成
首先我們可能需要很多字段在一個表里面腥例,需要設計到很多業(yè)務表辅甥,那么也就是工作量的問題,和前面不會有本質(zhì)的差異燎竖。
不管我們業(yè)務中涉及有多少個表,只要我們定義好表和它的備注信息要销,一切后面處理起來都會是那么的愜意的了构回。
生成的項目中,我們已經(jīng)有了對應框架支持的實現(xiàn)層了疏咐。
而界面層纤掸,我們可以考慮使用框架基于插件模式的動態(tài)加載配置菜單的啟動模塊項目,如下所示浑塞。
對于Winform的界面項目借跪,我們一般建議將我們的業(yè)務獨立一個整體的項目,并包含所需要的引用文件酌壕,這個在利用代碼生成工具生成代碼的時候掏愁,就會有一個空白的UI項目可供使用的歇由。
如對于普通的WInform項目,可以看到它的項目效果大概如下所示果港。
我們這里實際的項目使用混合框架進行處理的沦泌,因此界面的內(nèi)容比這個復雜一點,不過也是一個獨立的界面項目辛掠。
我們看到整個UI的界面部分是放在了Client目錄下面谢谦,我在下面進行了分門別類的放置一些目錄,區(qū)分不同的界面部分萝衩,方便尋找和處理的回挽。
其他的Core層則是使用引用現(xiàn)有文件路徑的方式進行包含文件,目的是減少DLL的依賴猩谊。
對于混合框架部分千劈,我們這里需要多闡述一些項目,包括Web API的項目(或者WCF的項目)预柒,以及對Web API的調(diào)用封裝處理队塘。
Web API項目我們可以從框架案例中把基礎的Web API項目拷貝過來使用,然后增加自己業(yè)務的Web API控制器就可以了宜鸯。
對于新增業(yè)務表的Web API控制器代碼憔古,也可以利用代碼生成工具進行生成。
生成后的控制器代碼淋袖,我們整合到主體的Web API項目中就可以使用了(對于WCF項目鸿市,一樣的方式,不在贅述)即碗。
控制器里面焰情,基本上就是封裝對常規(guī)BLL層的調(diào)用,不過Web API的接口都需要token參數(shù)剥懒,或者一些特殊的接口需要簽名信息(如登陸的接口等)
關于Web API的封裝調(diào)用介紹内舟,這里不準備詳細進行介紹,有興趣可以了解下我的其他隨筆《Web API應用架構(gòu)在Winform混合框架中的應用(3)--Winfrom界面調(diào)用WebAPI的過程分解》初橘、《Web API應用架構(gòu)在Winform混合框架中的應用(4)--利用代碼生成工具快速開發(fā)整套應用》验游、《Web API應用架構(gòu)設計分析(1)》、《Web API應用架構(gòu)設計分析(2)》保檐、《Web API接口設計經(jīng)驗總結(jié)》耕蝉、《Winform混合式開發(fā)框架訪問Web API接口的處理》、《Web API項目中使用Area對業(yè)務進行分類管理》夜只,還是蠻多的垒在,呵呵。
原則上扔亥,我們有了啟動界面項目WHC.Framework.StarterDx2场躯,有了基于插件模塊界面項目的WHC.HospitalDeptMis.ClientDx谈为,以及一些框架的支持模塊,那么我們就基本上可以跑起來了推盛。
如果編譯沒問題峦阁,順利的話,我們登陸后可以看到界面如下所示耘成。
我們沒有看到任何業(yè)務的菜單榔昔,那些在頂端的系統(tǒng)管理菜單是固定的菜單項,我們應該如何才能顯示我們需要的菜單項呢瘪菌?
2)菜單配置
我們根據(jù)我們實際的需要撒会,創(chuàng)建業(yè)務界面的菜單,我們在權(quán)限管理系統(tǒng)的菜單管理界面里面师妙,新建我們的菜單信息诵肛。
上面的WInform窗體類型,就是用于定位我們的窗體對象類的默穴,前面部分為類的全名怔檩,后者為DLL的文件名稱,中間用逗號分隔蓄诽。
一般菜單最好分為三層薛训,便于區(qū)分展示,如下界面所示
定義好菜單后仑氛,我們需要為對應的角色分配對應的菜單資源乙埃,這樣用戶登錄系統(tǒng)后才能看到對應的菜單,如下是角色分配菜單的界面锯岖。
登錄系統(tǒng)界面介袜,可以看到菜單信息的展示了。
** 3)權(quán)限的配置**
前面介紹了菜單的創(chuàng)建和配置出吹,其中角色包含菜單資源也可以看做是菜單權(quán)限的配置遇伞,不過我們知道,系統(tǒng)還是有很多功能操作需要進行控制的捶牢,如新增赃额、編輯、刪除叫确,導出、導入等芍锦,這些是如何實現(xiàn)權(quán)限的控制的呢竹勉?
這些依然是在權(quán)限系統(tǒng)里面進行控制管理的,首先我們需要定義需要控制的功能點娄琉,如下界面所示次乓,可以批量錄入某個業(yè)務的相關處理操作吓歇。
最后我們可以看到展開的功能點
定義好這些功能點后,我們可以為對應的角色分配對應的功能點權(quán)限票腰,和前面的菜單權(quán)限分配類似城看。
做完這些,剩下最后一步就是需要在界面中綁定權(quán)限控制邏輯杏慰,我們來看看列表界面和詳細界面如何進行控制的测柠。
列表界面的權(quán)限控制處理如下:
編輯詳細界面權(quán)限控制處理如下所示。
有了界面模塊的權(quán)限通用處理缘滥,以及權(quán)限管理系統(tǒng)的信息配置轰胁,那么整個系統(tǒng)跑起來就能夠?qū)崿F(xiàn)我們對菜單的控制,以及對系列度的功能點進行控制處理的了朝扼。
這個是在實際開發(fā)過程中赃阀,我們需要注意的處理步驟。