Winform開發(fā)的應(yīng)用環(huán)境和相關(guān)技術(shù)介紹

隨著時(shí)間的推移,Winform也算是能夠堅(jiān)持下來最久的技術(shù)之一了谒所,它的昔日輝煌和現(xiàn)今的依舊活躍劣领,導(dǎo)致了它依舊擁有者很龐大的用戶群體,雖然目前很多技術(shù)日新月異的奕锌,曾經(jīng)的ASP惊暴、ASP.NET WebForm、Asp.NET MVC肄鸽、WPF等技術(shù)基本上淡出了視野,而迎來了.NET Core油啤、UWP等技術(shù)應(yīng)用村砂,.NET Core也給.NET迎來了一次重要的涅槃重生的契機(jī)屹逛,可以更高效的運(yùn)行在各種平臺(tái)上,從而激發(fā)了.NET的又一春评腺。Winform的技術(shù)雖然基本上已經(jīng)壓縮在一定的范圍內(nèi)蒿讥,不過由于的用途廣泛抛腕,微軟也無法完全舍棄,據(jù)說在即將到來的.NET core 3.0里面摔敛,會(huì)支持Winform马昙,那真是非常不錯(cuò)的一次轉(zhuǎn)變刹悴。

image

1土匀、Winform的應(yīng)用場(chǎng)景

我自己也是一個(gè)Winform開發(fā)的擁躉,基本上十幾年來一直用著Winform開發(fā)各種各樣的應(yīng)用(雖然我也做很多相關(guān)的Web開發(fā))池颈,從最早的一些小工具躯砰,小共享軟件什么的,到后面給客戶開發(fā)一些數(shù)據(jù)管理系統(tǒng)兰怠、業(yè)務(wù)管理系統(tǒng)等等李茫,因此在這方面使用還算有一定的背景魄宏,可以對(duì)WInform這個(gè)技術(shù)應(yīng)用做一個(gè)個(gè)人的概括。

1)用戶體驗(yàn)

在Winform應(yīng)用里面味榛,和其他Web系統(tǒng)比起來予跌,它的用戶體驗(yàn)是最好的券册,而且界面響應(yīng)速度也比Web界面來的快捷一些,由于很多情況下航邢,用戶考慮使用方便性翠忠,如一些報(bào)表的展示乞榨、打印吃既、導(dǎo)入導(dǎo)出文件的處理等常規(guī)的操作,都還是習(xí)慣使用Winform這種定制型非常好的界面來處理河质,畢竟大多數(shù)情況下,單位都有一套業(yè)務(wù)和數(shù)據(jù)的管理系統(tǒng)來處理這些業(yè)務(wù)散休。

2)數(shù)據(jù)敏感

另外很多情況下戚丸,如一些事業(yè)單位扔嵌、機(jī)構(gòu)什么痢缎,他們的數(shù)據(jù)是比較敏感的,不希望對(duì)外公開署穗,網(wǎng)絡(luò)的引入會(huì)提供數(shù)據(jù)外泄的可能嵌洼,另外它們也是經(jīng)常處于內(nèi)網(wǎng)的環(huán)境下咱台,因此一個(gè)單機(jī)版的程序就可以搞定他們的日常業(yè)務(wù)處理了回溺,這種特別的業(yè)務(wù)環(huán)境混萝,注定了使用Winform來處理會(huì)更勝一籌。

3)開發(fā)便利

Winform開發(fā)的程序车要,發(fā)布共享比較容易翼岁,直接安裝就可以使用司光,可以不需要部署在云端(雖然我的混合框架方式可以訪問Web API残家、WCF等服務(wù)獲取數(shù)據(jù),透明的數(shù)據(jù)處理)茴晋;而且Winform的界面開發(fā)起來非常方便诺擅,結(jié)合界面套件,可以做出非常棒的界面效果凌盯。另外從開發(fā)角度上講烹玉,Web前端的技術(shù)淘汰非扯颍快,Winform的技術(shù)積累反而是在逐步加固的過程症杏,因此對(duì)于一些開發(fā)人員來說厉颤,迭代Winform開發(fā)的應(yīng)用會(huì)更加方便凡简,也更加熟練秤涩,因此只要客戶在用筐眷,系統(tǒng)兼容,這種Winform的程序會(huì)一直保留下去照棋。

2武翎、Winform開發(fā)的過程

1)界面開發(fā)

Winform開發(fā)對(duì)比其他有不少優(yōu)點(diǎn)后频,主要的特點(diǎn)還是開發(fā)方便,基于一定的框架膏执,可以快速開發(fā)特定的業(yè)務(wù)管理系統(tǒng)更米。如下是我客戶關(guān)系管理系統(tǒng)的界面效果。主界面是采用了DevExpress套件迟几,可以讓界面看起來非常統(tǒng)一漂亮类腮,另外對(duì)于界面的開發(fā)蛉加,我們可以基于數(shù)據(jù)庫信息的基礎(chǔ)上针饥,通過工具快速生成常規(guī)的列表展示界面丁眼,以及編輯界面,從而進(jìn)行一定的調(diào)整即可藐守。

對(duì)于列表界面吗伤,常規(guī)的就是包含數(shù)據(jù)的分頁展示硫眨、查詢礁阁、高級(jí)查詢族奢、導(dǎo)入越走、導(dǎo)出靠欢、打印等這些常規(guī)的功能门怪,這些都可以通過定義好的界面模板進(jìn)行統(tǒng)一生成掷空,生成后進(jìn)行一定的調(diào)整(如加入左側(cè)樹形列列表)即可囤锉。

image

如這個(gè)編輯界面酿傍,也是基于數(shù)據(jù)庫信息的生成后進(jìn)行一定的調(diào)整即可驱入。我們可以快速的修改控件的類型沧侥,如修改為下來列表類型,備注類型等癣朗,而在代碼中進(jìn)行字典類型綁定就可以顯示字典數(shù)據(jù)了旷余。

image

2)后臺(tái)代碼開發(fā)

對(duì)于一個(gè)新建的業(yè)務(wù)表正卧,我們需要開發(fā)的需要底層的實(shí)現(xiàn)和界面層的展示跪解,這些工作量也是非常巨大的叉讥,如果基于控件細(xì)粒度的處理图仓,也是非常繁瑣的工作,因此基于這些開發(fā)過程的考慮惶看,我們引入了提高效率開發(fā)的代碼生成工具Database2Sharp纬黎,專門為我們基于開發(fā)框架基礎(chǔ)上的框架實(shí)現(xiàn)代碼開發(fā)莹桅,和業(yè)務(wù)界面展示的快速開發(fā)。

image

代碼生成工具懂拾,不僅能夠讓它生成我們常規(guī)開發(fā)的界面層以下的實(shí)現(xiàn)代碼(包括BLL岖赋、DAL唐断、Entity杭抠、IDAL等層偏灿,以及混合框架的WCF翁垂、Web API的實(shí)現(xiàn)層和調(diào)用封裝層),以及界面層的調(diào)用代碼枚荣。

有了這些的處理橄妆,我們可極大減輕工作量呼畸。

image

生成的項(xiàng)目中,我們已經(jīng)有了對(duì)應(yīng)框架支持的實(shí)現(xiàn)層了卧须。

image

普通Winform框架的分層架構(gòu)圖笋籽。

image

3)底層數(shù)據(jù)庫支持

在實(shí)際需求中车海,你往往不能決定客戶需要用什么數(shù)據(jù)庫,那么需要根據(jù)實(shí)際需求或者環(huán)境進(jìn)行數(shù)據(jù)庫類型的選型侍芝,如果是單機(jī)版為了方便可以使用SQLite州叠,如果是已有業(yè)務(wù)系統(tǒng)或者需要響應(yīng)速度快一些的咧栗,那么考慮使用SQLServer或者M(jìn)ysql、有些歷史原因的可能會(huì)用PostgreSQL或者Oracle等等交煞。那么框架的彈性就需要支持多種數(shù)據(jù)庫的了错敢,這種支持不能導(dǎo)致太大的工作量最好稚茅,否則會(huì)弄得焦頭爛額的平斩。

框架底層數(shù)據(jù)庫訪問采用了微軟企業(yè)庫實(shí)現(xiàn)绘面,因此在處理多種數(shù)據(jù)庫訪問的時(shí)候揭璃,能夠提供統(tǒng)一的訪問處理操作瘦馍,同時(shí)對(duì)不同的數(shù)據(jù)庫支持操作也是非常不錯(cuò)的。下圖是框架底層數(shù)據(jù)庫的支持情況燥筷。

image

采用了微軟企業(yè)庫Enterprise Library作為我們底層的數(shù)據(jù)庫訪問模塊后箩祥,對(duì)于多種數(shù)據(jù)庫的訪問操作,就會(huì)統(tǒng)一采用這個(gè)企業(yè)庫的數(shù)據(jù)庫訪問對(duì)象肆氓,操作起來非常一致袍祖,為了對(duì)不同數(shù)據(jù)庫的常規(guī)增刪改查等一些操作進(jìn)行進(jìn)一步的封裝,以達(dá)到簡(jiǎn)化代碼的目的谢揪,因此我們可以為每個(gè)不同的數(shù)據(jù)庫定義一個(gè)數(shù)據(jù)訪問操作基類蕉陋,以便實(shí)現(xiàn)一些不同數(shù)據(jù)庫差異性的處理,但是它們還是有一個(gè)共同的數(shù)據(jù)訪問基類拨扶。

采用不同的數(shù)據(jù)庫寺滚,我們需要為不同數(shù)據(jù)庫的訪問層進(jìn)行生成處理屈雄,如為SQLServer數(shù)據(jù)的表生成相關(guān)的數(shù)據(jù)訪問層DALSQL村视,里面放置各個(gè)表對(duì)象的內(nèi)容,不過由于采用了相關(guān)的繼承類處理和基于數(shù)據(jù)庫的代碼生成酒奶,需要調(diào)整的代碼很少蚁孔。

image

4)數(shù)據(jù)集中的云端模式

在很多業(yè)務(wù)系統(tǒng)中,有很多需求是希望部署在云端服務(wù)器中惋嚎,這種方式可以實(shí)現(xiàn)數(shù)據(jù)的幾種管理杠氢,也有利于安全。因此我們整合了WCF和Web API兩種服務(wù)訪問方式另伍,而在開發(fā)界面基礎(chǔ)上鼻百,不需要太大的變化即可接入,這就是我們的混合開發(fā)框架摆尝。

混合框架的多種方式支持

image
image

而對(duì)于WCF或者Web API的封裝温艇,我們是通過接口適配的方式,調(diào)用層需要對(duì)業(yè)務(wù)接口進(jìn)行封裝堕汞,從而產(chǎn)生封裝的代碼量勺爱。因此可以利用代碼生成工具生成對(duì)應(yīng)業(yè)務(wù)模塊的接口適配代碼,可以極大減輕對(duì)這部分的開發(fā)效率損耗讯检。

混合框架的架構(gòu)如下所示琐鲁。

image

代碼生成工具Database2Sharp,生成整體性的混合型框架項(xiàng)目如下所示人灼,只是沒有下圖的界面部分围段,這部分在實(shí)際開發(fā)過程中,結(jié)合我的混合型框架案例進(jìn)行整合即可投放,另外也可以界使用Database2Sharp進(jìn)行Winform界面的開發(fā)奈泪,這樣整體性就非常方便操作了:

image

Winform調(diào)用Web API的過程,這個(gè)過程可以通過下面這個(gè)圖示進(jìn)行講解。

image

5)模塊化的框架結(jié)構(gòu)

在開發(fā)Winform應(yīng)用的時(shí)候段磨,我們除了希望簡(jiǎn)化代碼外取逾,其實(shí)很多常規(guī)的業(yè)務(wù)耗绿,我們希望不希望都要重新開發(fā)苹支,如權(quán)限管理系統(tǒng)、字典管理误阻、附件管理等债蜜,這些是很多業(yè)務(wù)都涉及到的模塊,我們應(yīng)該在一定粒度上實(shí)現(xiàn)整合現(xiàn)有模塊即可究反,這樣可以降低我們開發(fā)的難度和減少開發(fā)時(shí)間寻定,我們就可以把重要的時(shí)間花在具體的業(yè)務(wù)領(lǐng)域里面,快速響應(yīng)客戶的需求開發(fā)精耐。

混合型框架可以看成是Winform框架高級(jí)版本狼速,除了它本身是一個(gè)完整的業(yè)務(wù)系統(tǒng)外,它外圍的所有輔助性模塊均(如通用權(quán)限卦停、通用字典向胡、通用附件管理、通用人員管理惊完。僵芹。。小槐。)都實(shí)現(xiàn)了這種混合型的框架拇派,因此使用非常方便,整個(gè)框架如果簡(jiǎn)化來看凿跳,就是在原有的Winform界面層件豌,用接口調(diào)用方式,避免和業(yè)務(wù)邏輯類的緊耦合關(guān)系控嗜。

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末苟径,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子躬审,更是在濱河造成了極大的恐慌棘街,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件承边,死亡現(xiàn)場(chǎng)離奇詭異遭殉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)博助,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門险污,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事蛔糯≌” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵蚁飒,是天一觀的道長(zhǎng)动壤。 經(jīng)常有香客問我,道長(zhǎng)淮逻,這世上最難降的妖魔是什么琼懊? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮爬早,結(jié)果婚禮上哼丈,老公的妹妹穿的比我還像新娘。我一直安慰自己筛严,他們只是感情好醉旦,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著桨啃,像睡著了一般车胡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上优幸,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天吨拍,我揣著相機(jī)與錄音,去河邊找鬼网杆。 笑死羹饰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的碳却。 我是一名探鬼主播队秩,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼昼浦!你這毒婦竟也來了馍资?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤关噪,失蹤者是張志新(化名)和其女友劉穎鸟蟹,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體使兔,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡建钥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了虐沥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片熊经。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡泽艘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出镐依,到底是詐尸還是另有隱情匹涮,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布槐壳,位于F島的核電站然低,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏宏粤。R本人自食惡果不足惜脚翘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一灼卢、第九天 我趴在偏房一處隱蔽的房頂上張望绍哎。 院中可真熱鬧,春花似錦鞋真、人聲如沸崇堰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽海诲。三九已至,卻和暖如春檩互,著一層夾襖步出監(jiān)牢的瞬間特幔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工闸昨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蚯斯,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓饵较,卻偏偏與公主長(zhǎng)得像拍嵌,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子循诉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容