框架之路入門(mén)
按耐不住激動(dòng)的心情,因?yàn)槔^上篇文章后,不斷的完善框架,今天終于整個(gè)系統(tǒng)基本穩(wěn)定了,就繼續(xù)談框架。
我做C#開(kāi)發(fā)已經(jīng)近五年了。已經(jīng)愛(ài)上她了,我經(jīng)常開(kāi)玩笑說(shuō),寫(xiě)代碼如同談戀愛(ài),關(guān)鍵是我想認(rèn)真的做一名程序員而不是碼農(nóng)。
簡(jiǎn)單回顧一下,目前系統(tǒng)是WCF三層C/S插件系統(tǒng)。服務(wù)器端是WCF程序寄宿在IIS中,其中我的配置設(shè)計(jì)是長(zhǎng)連接,客戶(hù)端支持多線(xiàn)程,一個(gè)volatile的實(shí)例對(duì)象??蛻?hù)端用Winform,其中客戶(hù)端框架及規(guī)則及核心代碼都是我實(shí)現(xiàn)編寫(xiě)的,顧今天只談客戶(hù)端。
什么是插件框架?一個(gè)插件是業(yè)務(wù)上可劃分的模塊,代碼布局上是一個(gè)程序集,(當(dāng)然構(gòu)件系統(tǒng)可以對(duì)應(yīng)多個(gè)程序集)。框架的作用是把程序集加載到內(nèi)存,及負(fù)責(zé)程序集中的功能的路由通信。
現(xiàn)在的系統(tǒng)是使用osgi把程序集加載到內(nèi)容中,因?yàn)閮H是使用此功能,所以完全可以用C#中的反射程序集加載到內(nèi)存,注意用LoadFile方法。
目前關(guān)于框架所設(shè)計(jì)的表有模塊表,插件表,窗體表,元素表。
主界面(框架的控制中心)設(shè)計(jì)界面只有幾個(gè)容器,其他全是動(dòng)態(tài)生成的(模塊,插件,窗體)。
說(shuō)說(shuō)路由通信規(guī)則吧,什么叫路由通信呢?程序跑起來(lái)之后所有的功能都加載到主界面了。而每個(gè)模塊中的插件在不同的程序集中,(界面主要是動(dòng)態(tài)生成的),怎么能實(shí)現(xiàn)從一個(gè)插件中的某個(gè)窗體跳轉(zhuǎn)到主界面任意一個(gè)插件中的窗體上且?guī)е鴧?shù)傳過(guò)去呢?
這就是路由通信規(guī)則,首先界面上的窗體都繼承一個(gè)基類(lèi),這樣我可以在基類(lèi)中定義一個(gè)事件,如果在窗體中激活這個(gè)事件必須通知主界面,然后在主界面中需找要跳轉(zhuǎn)的窗體。想到查找應(yīng)該立馬想到字典,但是字典中的值不能是一個(gè)簡(jiǎn)單的對(duì)象,必須包括模塊,插件,窗體。怎么把附帶的參數(shù)傳給要跳轉(zhuǎn)的窗體呢?應(yīng)想到object類(lèi),我用的是dynamic定義(實(shí)際也是object),實(shí)參主要用匿名類(lèi)對(duì)象(方便構(gòu)造參數(shù))。找到要跳轉(zhuǎn)的窗體后怎么解析參數(shù)呢?我主要用反射解析對(duì)象中的屬性。
再說(shuō)說(shuō)我這個(gè)系統(tǒng)中的權(quán)限吧,權(quán)限主要是界面上控件是否顯示,是否啟用。目前我是把界面上元素分類(lèi)后存在不同的表中,然后把這些表構(gòu)建成權(quán)限樹(shù),然后在用戶(hù)權(quán)限那里給用戶(hù)分配權(quán)限。
框架主要的已經(jīng)說(shuō)完了,在winform中如果用原生的控件肯定滿(mǎn)足不了某些界面風(fēng)格或功能,這樣就需要做用戶(hù)控件或擴(kuò)展控件了。改變控件風(fēng)格主要是重繪控件,控件的真正激活者是鼠標(biāo)或鍵盤(pán)的那幾個(gè)事件,來(lái)通知操作系統(tǒng),操作系統(tǒng)再發(fā)消息到我們的應(yīng)用系統(tǒng),然后攔截編寫(xiě)處理函數(shù)實(shí)現(xiàn)我們的功能。
其實(shí)asp.net就是一個(gè)插件框架,它管理著我們的web應(yīng)用程序。(后續(xù)我會(huì)再寫(xiě)一遍Web應(yīng)用程序的核心功能)。
程序員最重要的就是編程思想和工作中的悟性。我偶爾還在看C語(yǔ)言,雖然用不上,但是我是通過(guò)C思考C#深入編程思想。
我是大專(zhuān)軟件技術(shù)專(zhuān)業(yè),2011年就考了國(guó)家軟考中級(jí)職稱(chēng)。現(xiàn)在培訓(xùn)機(jī)構(gòu)多如毛,你是否喜歡編程,是否可以一坐一天呢?是否可以堅(jiān)持五年以上?別聽(tīng)說(shuō)程序員工資高,想清楚再入行。
再次補(bǔ)充一下,新的應(yīng)用系統(tǒng)一定重視pdm數(shù)據(jù)庫(kù)模型,保證一直都是最新最完整的數(shù)據(jù)結(jié)構(gòu),如果想在新系統(tǒng)中立足,一定要控制系統(tǒng)的核心功能,框架,及規(guī)則(框架設(shè)計(jì)師玩的就是規(guī)則,業(yè)務(wù)是定要求不要強(qiáng)迫其他程序員)。代碼生成規(guī)則主要是靠pdm完成的。
程序員不喜歡別人管著,對(duì)一個(gè)自覺(jué)的程序員,被人管著是不能發(fā)揮創(chuàng)造性的。我做這個(gè)新系統(tǒng),當(dāng)時(shí)也是破斧成舟,在老系統(tǒng)之中,和直接領(lǐng)導(dǎo)意見(jiàn)不統(tǒng)一(某些40多歲的程序員不學(xué)新技術(shù)總是夜郎自大,如果大bo