今天是2017-03-04,我1號(hào)辭職的,今天第4天沒上班了。在公司我工作也剛好5年了,這5年來?yè)Q了幾個(gè)工作,但是中間沒有停留超過1個(gè)月的。我雖換工作頻繁,但是走的一直是技術(shù)路線,且都是C#桌面軟件開發(fā)。辭職的時(shí)候,我的理由是,我對(duì)業(yè)務(wù)根本沒興趣,走的就是技術(shù)路線,而公司還是傳統(tǒng)的軟件開發(fā),技術(shù)上還是采用保守的態(tài)度。公司是做業(yè)績(jī)盈利的不可能讓程序猿自由的寫感興趣的代碼的。一個(gè)做delphi開發(fā)的項(xiàng)目經(jīng)理帶C#團(tuán)隊(duì),一直強(qiáng)調(diào)快速開發(fā),最后出的產(chǎn)品問題不斷,這種種的問題,只有在公司中存在。

  閑話少扯,繼續(xù)說框架,上次的框架又經(jīng)過我自己的不斷重構(gòu),加入了路由通信機(jī)制,多線程異步加載,同步控制,替換掉osgi加載程序集等功能。下面分別說明。

路由通信:程序集A中的a對(duì)象,想調(diào)用程序集B中的b對(duì)象,通過主界面去找b對(duì)象,而主界面是完全動(dòng)態(tài)加載及動(dòng)態(tài)控制的,主界面分模塊,插件,窗體。

a,b分別屬于不同模塊,不同插件的不同窗體,a怎么調(diào)用b直接在主界面上切換,而不是彈出窗體,這樣的機(jī)制就是路由通信,通信的意思就是需要傳遞參數(shù)。

a只用告訴主界面,我?guī)е鴧?shù)信息需要找b,剩下的工作由主界面完成。字典是查找最快的數(shù)據(jù)結(jié)構(gòu),那就需要把b窗體的插件,模塊維護(hù)成字典。(主界面上所有的窗體對(duì)象都需要這樣的字典維護(hù))。C#中的消息被封裝成事件了,所以需要把窗體的事件處理函數(shù)放在主界面那里管理,窗體a只用觸發(fā)事件,由訂閱的主界面去處理即可。參數(shù)為了統(tǒng)一,我采用的是dynamic對(duì)象,接收窗體再反射解析對(duì)象。

  一個(gè)軟件從登錄到主界面,用戶肯定是不愿意等待的,意思是進(jìn)入主界面越快越好,但是主界面動(dòng)態(tài)構(gòu)建,邏輯數(shù)據(jù)復(fù)雜的話,肯定加載緩慢,且登錄邏輯也需要判斷很多條件,及整個(gè)系統(tǒng)的一些初始化工作。在登錄界面顯示前就開一個(gè)線程跑主界面的數(shù)據(jù),在登錄界面出來后再跑一個(gè)線程取登錄界面的數(shù)據(jù)。登錄界面用this.Update()在shown事件中,意思是登錄界面立刻出現(xiàn),然后跑登錄界面的數(shù)據(jù)。【還有一種辦法是發(fā)用戶消息,用戶消息會(huì)在一個(gè)線程上執(zhí)行,在執(zhí)行Load事件后,立刻更新界面this.Update(),再執(zhí)行消息的處理過程。這樣可以把界面與加載分開處理?!吭诘卿洺晒?,再跑一個(gè)線程取一些緩存數(shù)據(jù)。

假如主界面出來后,如果開始跑主界面數(shù)據(jù)的線程還沒執(zhí)行完,是需要同步控制的,當(dāng)然C#的同步機(jī)制很多,我用的就是