小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

桌面端軟件設(shè)計(jì)經(jīng)驗(yàn)總結(jié)

 ekylin 2019-09-29

軟件的基本架構(gòu)

1、MVC簡(jiǎn)介

對(duì)于工業(yè)上的桌面端軟件來(lái)說(shuō),主要的功能就是通過(guò)獲取用戶的操作來(lái)處理后臺(tái)的數(shù)據(jù)并在界面上進(jìn)行呈現(xiàn)。對(duì)于這種軟件需求,最經(jīng)典的應(yīng)用就是MVC架構(gòu),可以在圖1中粗略展示MVC框架的設(shè)計(jì)思想。

這里寫(xiě)圖片描述

這里寫(xiě)圖片描述

                                圖1、MVC框架

2、實(shí)際中需要解決的問(wèn)題

     軟件的設(shè)計(jì)需求就是實(shí)時(shí)獲取用戶的操作,比如查詢條件的改變,測(cè)量條件的改變,此時(shí)我們需要立刻獲取用戶的輸入并實(shí)時(shí)改變后臺(tái)的測(cè)量方法及界面顯示的結(jié)果。同時(shí)考慮到需求的變動(dòng)以及界面的實(shí)時(shí)顯示等原因,我們?cè)谲浖O(shè)計(jì)之初就要將model-view-controller三者分離開(kāi),如果我們僅僅在單個(gè)函數(shù)中處理一個(gè)用戶邏輯,不僅無(wú)法做到model和view的聯(lián)動(dòng),在代碼需要修改或者重構(gòu)的時(shí)候也會(huì)有很大的問(wèn)題,導(dǎo)致一處的小改動(dòng)造成整個(gè)軟件的變動(dòng),也就是高耦合,低內(nèi)聚的形式。

     為了解決上述問(wèn)題,使得軟件能及時(shí)處理用戶界面輸入—>后臺(tái)數(shù)據(jù)改變—>用戶界面變化這一需要,我們便有了MVC框架。MVC將軟件的基本結(jié)構(gòu)分為三個(gè)部分,即Model數(shù)據(jù)層,View界面層,兩者之間通過(guò)controller來(lái)連接。當(dāng)我們的視圖部分有了用戶請(qǐng)求之后,控制器獲取用戶的輸入信息,經(jīng)過(guò)判斷之后決定哪些數(shù)據(jù)模型需要改變,當(dāng)數(shù)據(jù)模型改變之后,會(huì)給控制器發(fā)出完成數(shù)據(jù)改變的信號(hào),然后控制器便會(huì)選擇哪些視圖需要更新,視圖部分會(huì)解釋并在界面上顯示更新后的數(shù)據(jù)模型。

這里寫(xiě)圖片描述

當(dāng)我們構(gòu)建好了模型-視圖-控制器之間的邏輯關(guān)系,由控制器決定好model與view之間的關(guān)聯(lián)關(guān)系之后,我們的重心就重模型與視圖之間的連接關(guān)系中解放出來(lái),著重于處理數(shù)據(jù)模型的改動(dòng),這樣只需要改動(dòng)模型,相應(yīng)的視圖部分也會(huì)發(fā)生變化,當(dāng)數(shù)據(jù)需要再次顯示的時(shí)候我們只需要將對(duì)應(yīng)的數(shù)據(jù)傳入controlller即可以實(shí)時(shí)顯示視圖更新。

3、軟件架構(gòu)

     由于軟件的復(fù)雜性,我們可能有多重?cái)?shù)據(jù),多種視圖需要處理,那么我們就需要將軟件的各個(gè)部分分割開(kāi),每一個(gè)部分都是一個(gè)單獨(dú)的小型mvc框架,不同的mvc之間通過(guò)controller來(lái)進(jìn)行通信。

  • 數(shù)據(jù)與界面改動(dòng)的處理

     我的做法是將所有數(shù)據(jù)模型的controller抽象化為project,將每個(gè)不同的model作為project的屬性,不同的model之間可以進(jìn)行連接,當(dāng)其中一個(gè)model改變時(shí),與其相連接的model也會(huì)發(fā)生改變,同時(shí)每個(gè)model由project來(lái)更新,project發(fā)出改變信號(hào),model也會(huì)隨著project的更新信號(hào)發(fā)出更新信號(hào)。舉一個(gè)例子,我們軟件需要對(duì)不同的測(cè)量方法做出不同的數(shù)據(jù)處理,那么在界面上用戶對(duì)測(cè)量方式做了改變之后,project中對(duì)應(yīng)測(cè)量方法的數(shù)據(jù)會(huì)發(fā)生改變,實(shí)際上通過(guò)project來(lái)進(jìn)行測(cè)量方法的更新,測(cè)量方法這個(gè)model會(huì)發(fā)出changed信號(hào),然后我們將project中該信號(hào)綁定到與該model對(duì)應(yīng)的controller,比如Measure_controller中,然后measure_controller會(huì)做出相應(yīng)的改變,并通知其measure_model做出改變,使用不同的測(cè)量公式來(lái)計(jì)算。流程可以簡(jiǎn)化如下:
Project–>projectItem–>projectProperty

測(cè)量方法改變(視圖中)—>measure_property重新賦值—>實(shí)際調(diào)用父類item的賦值–>實(shí)際調(diào)用父類project的賦值–>project更新其子類(字典形式存儲(chǔ))的值,然后依次向下發(fā)出changed信號(hào)–>與project.measure.changed信號(hào)綁定的controller接受到changed信號(hào)–>更新measure方法(如果涉及視圖變化便將其綁定到相應(yīng)的視圖變化操作中),這樣就完成了基本的軟件流程,其余部分的設(shè)計(jì)方法也來(lái)源于此。

軟件設(shè)計(jì)的其他部分比如用戶設(shè)置部分,數(shù)據(jù)存儲(chǔ)與導(dǎo)出部分先填個(gè)坑,日后再補(bǔ)…

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多