基于WPF的快速原型工具的設(shè)計(jì)及實(shí)現(xiàn)_第1頁
基于WPF的快速原型工具的設(shè)計(jì)及實(shí)現(xiàn)_第2頁
基于WPF的快速原型工具的設(shè)計(jì)及實(shí)現(xiàn)_第3頁
基于WPF的快速原型工具的設(shè)計(jì)及實(shí)現(xiàn)_第4頁
基于WPF的快速原型工具的設(shè)計(jì)及實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩47頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

基于WPF的快速原型工具的設(shè)計(jì)及實(shí)現(xiàn)摘要快速原型設(shè)計(jì)工具是指建立在低消耗,快速傳播,便于使用等前提下的一款運(yùn)行在PC(Window/Linux/MacOS)的軟件。讓軟件原型的繪制更加迅速和方便。本設(shè)計(jì)主要通過分析軟件設(shè)計(jì)流程,提出客戶端的功能服務(wù)和介紹服務(wù)器的通訊契約??蛻舳朔?wù)包含靠邊文檔服務(wù),畫布,對(duì)象分析器,日志服務(wù),設(shè)置服務(wù),資源服務(wù),工程組成服務(wù),語言服務(wù),菜單服務(wù)。服務(wù)器包含App登錄通信,用戶接口通訊,工程接口通訊,插件通訊。此工具服務(wù)器架構(gòu)采用MVC框架,客戶端架構(gòu)采用MVVM框架,并且在.netcore平臺(tái)進(jìn)行開發(fā)和測(cè)試,對(duì)功能測(cè)試的完成也表明了思路正確,結(jié)構(gòu)合理,達(dá)到了預(yù)期的目標(biāo)。關(guān)鍵詞:原型設(shè)計(jì);WPF;grpc;Acore;1緒論1.1課題背景與研究意義1.1.1課題背景在計(jì)算機(jī)快速發(fā)展的時(shí)代,軟件的新增隨著用戶的需求而日益增多,界面開發(fā)的成本也占據(jù)著軟件總成本的很大一部分。所以,在界面開發(fā)的時(shí)候,需要一款低消耗,便捷而且容易修改的原型設(shè)計(jì)軟件,快速地讓設(shè)計(jì)人員和開發(fā)人員共同確定軟件界面的大體情況。讓界面在開發(fā)過程中最低程度的修改,節(jié)約開發(fā)成本。雖然我國(guó)存在很多原型設(shè)計(jì)軟件,但是這些原型軟件在項(xiàng)目開發(fā)的過程中很多時(shí)候都無法貫穿整個(gè)開發(fā)周期,因此為了讓原型的設(shè)計(jì)與項(xiàng)目開發(fā)的結(jié)合性更強(qiáng),一體化的快速原型設(shè)計(jì)工具是非常迫切的。在最短時(shí)間內(nèi),完成網(wǎng)頁或者有界面的應(yīng)用的界面和簡(jiǎn)單交互,讓項(xiàng)目都能查看并且使用此原型在了解,使用并反饋的過程中,對(duì)不合理或者可優(yōu)化的UI或者UX進(jìn)行調(diào)整這些情況也是在軟件設(shè)計(jì)開發(fā)時(shí)候最需要的。而當(dāng)前國(guó)內(nèi)原型開發(fā)工具,擁有不可擴(kuò)展和難操作,不易分享等缺點(diǎn)。1.1.2研究意義快速原型工具與傳統(tǒng)的原型工具區(qū)別在于以下幾個(gè)方面?能快速地搭建UI,解決軟件難用的問題?不同設(shè)備能通過網(wǎng)絡(luò)來傳播工程,統(tǒng)一工程能擁有多個(gè)版本?原型的控件節(jié)點(diǎn)能夠保存為組件,在下次使用或者以后使用的時(shí)候能夠即可插入到當(dāng)前原型中?技術(shù)人員能夠簡(jiǎn)單的擴(kuò)展本工具,能夠新增自定義的控件?能把完成的原型導(dǎo)出PSD,PNG,JPG等圖像文件1.2課題的可行性分析本節(jié)討論的主要問題工具在技術(shù),經(jīng)濟(jì)和操作上設(shè)計(jì)是否合理和實(shí)現(xiàn)是否有困難。1.2.1技術(shù)的可行性分析本課題工具要求用戶在桌面端系統(tǒng)系統(tǒng)安裝使用,該系統(tǒng)開發(fā)主要使用的軟件有VisualStudio2019MySQL8.0,.netcore3.1,grpc。在開發(fā)技術(shù)方面,客戶端主要是使用.netcore3.1wpf技術(shù),后端使用Acore與grpc通訊協(xié)議,所以WebApi可以在其它語言上使用,如java,python等。用戶可以在LinuxAMD64,Windows7,8,10x86/x64,MacOSx64安裝此應(yīng)用,安裝后此應(yīng)用默認(rèn)擁有基本的原型元素。用戶在UI(View)上的操作可以傳到視圖模型(ViewModel),然后再傳到模型(Model),然后再傳回UI。通過SkiaSharp繪畫引擎實(shí)時(shí)繪制用戶當(dāng)前設(shè)計(jì)的原型。軟件含有對(duì)象分析器,能自動(dòng)分析原型元素的屬性然后自動(dòng)生成屬性UI,可以快速建造新的原型元素。同時(shí),通過grpc框架,將應(yīng)用數(shù)據(jù)同步到服務(wù)器,使工程能共享。1.2.2經(jīng)濟(jì)的可行性分析該系統(tǒng)主要使用免費(fèi)開源的工具和軟件,開發(fā)成本較低,在完成工具后,用戶可以選擇單機(jī)(不包含工程在線共享),局域網(wǎng)或者是外網(wǎng)等方式部署。所以,此工具在經(jīng)濟(jì)上是完全可行的。1.2.3操作可行性分析該工具主要采用C/S架構(gòu),需要在客戶機(jī)上安裝,在流行的桌面端系統(tǒng)都能運(yùn)行,操作方式采用點(diǎn)拖式,用戶能很容易的在軟件上操作。所以,在操作上是可行的。1.3開發(fā)工具及關(guān)鍵技術(shù)系統(tǒng)開發(fā)平臺(tái):以VisualStudio2019作為主要開發(fā)平臺(tái)系統(tǒng)開發(fā)運(yùn)行環(huán)境為:數(shù)據(jù)庫(kù)服務(wù)器:Mysql8.0操作系統(tǒng):Window10服務(wù)器宿主:.netcore3.1即在Window10操作系統(tǒng)下,在VistualStudio2019開發(fā)平臺(tái)上,使用Xaml、C#、proto等開發(fā)語言,采用Mysql8.0數(shù)據(jù)庫(kù),可通過運(yùn)行可執(zhí)行文件(在不同操作系統(tǒng),可執(zhí)行文件不同),啟動(dòng)快速原型工具。2需求分析2.1系統(tǒng)設(shè)計(jì)目標(biāo)本工具設(shè)計(jì)目標(biāo)包含以下內(nèi)容界面設(shè)計(jì)應(yīng)當(dāng)美觀簡(jiǎn)潔易用,而且方便用戶操作功能模塊分割合理,邏輯清晰,操作透明對(duì)數(shù)據(jù)的操作應(yīng)該簡(jiǎn)便,數(shù)據(jù)具有可靠性在默認(rèn)擴(kuò)展中,含有系統(tǒng)的基本功能系統(tǒng)運(yùn)行穩(wěn)定2.2系統(tǒng)參與者1.原型設(shè)計(jì)師在工具登錄入口填寫用戶名和密碼登入個(gè)人后臺(tái)后可以查看自己已創(chuàng)建的工程,搜索可見的工程,可搜索的工程包含其它用戶公開的,自己創(chuàng)建的工程??梢越壎ó?dāng)前工程,創(chuàng)建工程版本,同步當(dāng)前版本,下載歷史版本,刪除工程,刪除歷史版本等操作。2.3系統(tǒng)流程分析本工具實(shí)現(xiàn)的流程如下繪制原型:打開軟件,系統(tǒng)會(huì)自行檢查核心文件和加載并初始化所有服務(wù)點(diǎn)擊菜單的文件-新建,彈出新窗口后,點(diǎn)擊選擇按鈕,創(chuàng)建一個(gè)文件作為工程文件,可以點(diǎn)擊創(chuàng)建默認(rèn)工程,也可以選擇自定義化工程。在自定義化工程時(shí)候,在工程部分選擇區(qū)域能看到現(xiàn)在可以選擇的工程部分,可以右擊選用,讓此工程部分加入到創(chuàng)建的工程里,并且可以在右方修改工程部分的屬性。在主界面,資源管理器,右擊某一個(gè)文件夾,創(chuàng)建資源,選擇場(chǎng)景資源,填入資源名字,點(diǎn)擊選擇按鈕,修改場(chǎng)景資源屬性,點(diǎn)擊創(chuàng)建右擊新建的創(chuàng)建,點(diǎn)擊設(shè)為當(dāng)前活動(dòng)創(chuàng)建在主界面,大綱,展開場(chǎng)景,右擊圖層,創(chuàng)建容器在主界面,視圖工具,點(diǎn)擊矩形,右擊設(shè)計(jì)頁某個(gè)控件,選中目標(biāo)控件,在畫布上拖動(dòng)繪畫出一個(gè)默認(rèn)矩形在主界面,視圖工具,點(diǎn)擊移動(dòng),右擊設(shè)計(jì)頁某個(gè)控件,選中目標(biāo)控件,擊中某個(gè)開始點(diǎn),在畫布上拖動(dòng),目標(biāo)控件也會(huì)跟著移動(dòng)在主界面,屬性,右擊設(shè)計(jì)頁某個(gè)控件,選中目標(biāo)控件,屬性頁會(huì)出現(xiàn)相應(yīng)的控件屬性,修改某些屬性后,控件樣式也會(huì)隨之變化在主界面,大綱,右擊某個(gè)容器或者控件,復(fù)制,右擊某個(gè)容器,粘貼在主界面,大綱,右擊某個(gè)容器或者控件,移動(dòng)此元素-移動(dòng)到上一層/移動(dòng)到下一層在主界面,大綱,右擊某個(gè)容器或者控件,點(diǎn)擊制作控件,輸入控件名字,點(diǎn)擊OK,如果想取消此操作則點(diǎn)擊Cancel在主界面,大綱,右擊某個(gè)容器,添加拷貝控件,選擇某個(gè)存在的控件點(diǎn)擊菜單的文件-保存導(dǎo)出工程,假設(shè)已經(jīng)啟動(dòng)程序了點(diǎn)擊菜單的文件-打開,選擇某一個(gè)工程點(diǎn)擊快速操作-導(dǎo)出-Png/Psd/Tiff/Jpeg/pdzip導(dǎo)入工程,假設(shè)已經(jīng)啟動(dòng)程序了點(diǎn)擊快速操作-導(dǎo)入,選擇一個(gè)pkpkg文件,程序會(huì)自動(dòng)加載此工程修改頭像進(jìn)入登錄界面,輸入用戶名和密碼,登錄到個(gè)人后臺(tái)點(diǎn)擊右上方你的名字,點(diǎn)擊菜單工程上傳頭像選擇一個(gè)圖像文件等待修改結(jié)果工程管理-從遠(yuǎn)程服務(wù)器創(chuàng)建工程進(jìn)入登錄界面,輸入用戶名和密碼,登錄到個(gè)人后臺(tái)點(diǎn)擊右上方你的名字,點(diǎn)擊菜單工程倉(cāng)庫(kù)右擊工程顯示列表,點(diǎn)擊創(chuàng)建工程-公開/非公開,輸入創(chuàng)建的工程名字工程管理-查看工程進(jìn)入登錄界面,輸入用戶名和密碼,登錄系統(tǒng)點(diǎn)擊右上方你的名字,點(diǎn)擊菜單工程倉(cāng)庫(kù)在搜索框輸入關(guān)鍵字點(diǎn)擊搜索按鈕點(diǎn)擊上一頁/下一頁切換頁數(shù)工程管理-從遠(yuǎn)程服務(wù)器創(chuàng)建版本進(jìn)入登錄界面,輸入用戶名和密碼,登錄系統(tǒng)點(diǎn)擊右上方你的名字,點(diǎn)擊菜單工程倉(cāng)庫(kù)點(diǎn)擊菜單-打開,打開某個(gè)工程點(diǎn)擊右上方你的名字,點(diǎn)擊菜單工程倉(cāng)庫(kù) 選擇一個(gè)工程,右擊,點(diǎn)擊綁定工程-從當(dāng)前工程

輸入版本名字,點(diǎn)擊確認(rèn)按鈕,如果想中止創(chuàng)建則點(diǎn)擊中止按鈕 輸入版本描述,如果沒有可不輸入,如果想中止創(chuàng)建則點(diǎn)擊中止按鈕等待處理結(jié)果,點(diǎn)擊好按鈕 工程管理-從遠(yuǎn)程服務(wù)器創(chuàng)建版本進(jìn)入登錄界面,輸入用戶名和密碼,登錄系統(tǒng) 點(diǎn)擊右上方你的名字,點(diǎn)擊菜單工程倉(cāng)庫(kù) 點(diǎn)擊某個(gè)工程,右擊,點(diǎn)擊查看詳細(xì) 右擊某個(gè)版本,緩存工程管理-從遠(yuǎn)程服務(wù)器刪除工程進(jìn)入登錄界面,輸入用戶名和密碼,登錄系統(tǒng) 點(diǎn)擊右上方你的名字,點(diǎn)擊菜單工程倉(cāng)庫(kù) 選擇某一工程,右擊,點(diǎn)擊刪除輸入工程的全名,點(diǎn)擊刪除按鈕,如果需要中止操作,點(diǎn)擊取消按鈕 (1)(2)工程管理-從遠(yuǎn)程服務(wù)器刪除工程的版本進(jìn)入登錄界面,輸入用戶名和密碼,登錄系統(tǒng)(1)(2) (3) 右擊某個(gè)工程,查看詳細(xì)(4) 右擊某個(gè)版本,刪除(3) 右擊某個(gè)工程,查看詳細(xì)(4) 右擊某個(gè)版本,刪除點(diǎn)擊確認(rèn)按鈕,如果想中止操作,點(diǎn)擊取消按鈕2.4系統(tǒng)用例表2.4.1相關(guān)用例參與者相關(guān)用例原型設(shè)計(jì)師進(jìn)入程序,登錄,注冊(cè),修改頭像,創(chuàng)建遠(yuǎn)程工程,刪除遠(yuǎn)程工程,創(chuàng)建遠(yuǎn)程版本,刪除遠(yuǎn)程版本,緩存遠(yuǎn)程版本,創(chuàng)建本地工程,打開本地工程,保存當(dāng)前工程,創(chuàng)建資源,創(chuàng)建圖層,創(chuàng)建容器,繪制控件,刪除控件,修改控件屬性,移動(dòng)控件,制作組件,添加組件,刪除圖層,刪除容器,刪除控件,移動(dòng)控件堆疊位置2.4.1用例分析用例UC1:進(jìn)入工具主要參與人:原型設(shè)計(jì)師前置條件:程序運(yùn)行環(huán)境正常插件正常后置條件:程序的服務(wù)啟動(dòng)和初始化正常主要成功場(chǎng)景:用戶正常啟動(dòng)程序所有服務(wù)正常加載完成用戶進(jìn)入到主界面擴(kuò)展場(chǎng)景:*a.服務(wù)啟動(dòng)發(fā)生致命錯(cuò)誤,彈出提示框Loadfatal!并且程序退出用例UC2:登錄主要參與人:原型設(shè)計(jì)師前置條件:參與者正常啟動(dòng)程序數(shù)據(jù)庫(kù)中有此用戶的信息參與者聯(lián)網(wǎng)并且輸入了正確的用戶名和密碼后置條件:系統(tǒng)記錄參與者的登錄信息主成功場(chǎng)景:進(jìn)入登錄界面輸入用戶名和密碼點(diǎn)擊登錄按鈕提交輸入的信息,服務(wù)端驗(yàn)證賬號(hào)信息用戶名和密碼正確,服務(wù)端返回登錄憑證擴(kuò)展場(chǎng)景:*a.參與者沒有輸入正確的用戶名或密碼,點(diǎn)擊登錄,程序提示“登錄失敗”用例UC2:登錄主要參與人:原型設(shè)計(jì)師前置條件:參與者正常啟動(dòng)程序數(shù)據(jù)庫(kù)中有此用戶的信息參與者聯(lián)網(wǎng)并且輸入了正確的用戶名和密碼后置條件:系統(tǒng)記錄參與者的登錄信息主成功場(chǎng)景:進(jìn)入登錄界面輸入用戶名和密碼點(diǎn)擊登錄按鈕提交輸入的信息,服務(wù)端驗(yàn)證賬號(hào)信息用戶名和密碼正確,服務(wù)端返回登錄憑證擴(kuò)展場(chǎng)景:*a,參與者沒有輸入正確的用戶名或密碼,點(diǎn)擊登錄,程序提示“登錄失敗”用例UC3:上傳頭像主要參與人:原型設(shè)計(jì)師前置條件:參與者成功啟動(dòng)程序參與者登入系統(tǒng)后置條件:系統(tǒng)記錄參與者的登錄信息主成功場(chǎng)景:點(diǎn)擊上傳頭像菜單選擇一張圖片服務(wù)端返回頭像切換成功擴(kuò)展場(chǎng)景:*a.圖片被占用,客戶端無法被讀取,提示“上傳圖形失敗”*b.登錄憑證失效,提示“上傳圖形失敗”用例UC4:創(chuàng)建遠(yuǎn)程過程主要參與人:原型設(shè)計(jì)師前置條件:參與者正常啟動(dòng)程序參與者成功登入系統(tǒng)后置條件:工程在遠(yuǎn)程數(shù)據(jù)庫(kù)有記錄主成功場(chǎng)景:點(diǎn)擊工程倉(cāng)庫(kù)菜單點(diǎn)擊創(chuàng)建工程菜單,選擇公開/非公開輸入工程名字點(diǎn)擊確認(rèn)按鈕擴(kuò)展場(chǎng)景:*a.工程名字沒有輸入,程序不繼續(xù)創(chuàng)建工程*b.用戶在輸入工程名字的過程中點(diǎn)擊取消按鈕,程序不繼續(xù)創(chuàng)建工程用例UC5:刪除遠(yuǎn)程過程主要參與人:原型設(shè)計(jì)師前置條件:參與者正常啟動(dòng)程序參與者成功登入系統(tǒng)工程在遠(yuǎn)程數(shù)據(jù)庫(kù)有記錄后置條件:工程記錄在遠(yuǎn)程數(shù)據(jù)庫(kù)中被刪除主成功場(chǎng)景:點(diǎn)擊工程倉(cāng)庫(kù)菜單選擇某一工程右擊工程并且選擇刪除輸入工程的全名點(diǎn)擊確認(rèn)按鈕擴(kuò)展場(chǎng)景:*a.工程的全名輸入與數(shù)據(jù)庫(kù)記錄不一致,程序不繼續(xù)刪除工程*b.用戶在輸入工程名字的過程中點(diǎn)擊取消按鈕,程序不繼續(xù)刪除工程*c,工程的歸屬者不是當(dāng)前用戶,刪除按鈕不可見用例UC6:創(chuàng)建遠(yuǎn)程版本主要參與人:原型設(shè)計(jì)師前置條件:參與者正常啟動(dòng)程序參與者成功登入系統(tǒng)工程在遠(yuǎn)程數(shù)據(jù)庫(kù)有記錄后置條件:工程版本在遠(yuǎn)程數(shù)據(jù)庫(kù)中有記錄主成功場(chǎng)景:打開了某一本地工程點(diǎn)擊工程倉(cāng)庫(kù)菜單選擇某一工程右擊并且選擇綁定工程-從當(dāng)前工程輸入版本名字,點(diǎn)擊確認(rèn)按鈕輸入版本描述,點(diǎn)擊確認(rèn)按鈕擴(kuò)展場(chǎng)景:*a,在輸入版本名字時(shí),不輸入并且點(diǎn)擊確認(rèn)按鈕,程序不繼續(xù)創(chuàng)建版本*b,在輸入版本名字時(shí),版本名字已存在,提示“版本已存在”*c,在輸入版本名字或者輸入描述時(shí),參與者點(diǎn)擊中止按鈕,程序不繼續(xù)創(chuàng)建版本*d.在向遠(yuǎn)程服務(wù)器提交縮略圖時(shí),圖片太大,提示“創(chuàng)建失敗”*e.參與者沒有打開某一本地工程,提示“當(dāng)前沒有打開工程”用例UC7:刪除遠(yuǎn)程版本主要參與人:原型設(shè)計(jì)師前置條件:參與者正常啟動(dòng)程序參與者成功登入系統(tǒng)工程版本在遠(yuǎn)程數(shù)據(jù)庫(kù)有記錄后置條件:工程的版本記錄在遠(yuǎn)程數(shù)據(jù)庫(kù)中被刪除主成功場(chǎng)景:點(diǎn)擊工程倉(cāng)庫(kù)菜單選擇某一工程右擊工程查看詳情右擊某一版本,點(diǎn)擊刪除菜單項(xiàng)擴(kuò)展場(chǎng)景:*a.工程的歸屬者不是當(dāng)前用戶,刪除按鈕不可見用例UC8:緩存遠(yuǎn)程版本主要參與人:原型設(shè)計(jì)師前置條件:參與者正常啟動(dòng)程序參與者成功登入系統(tǒng)工程版本在遠(yuǎn)程數(shù)據(jù)庫(kù)有記錄后置條件:工程的版本緩存到本地文件夾主成功場(chǎng)景:點(diǎn)擊工程倉(cāng)庫(kù)菜單選擇某一工程右擊工程查看詳情右擊某一版本,點(diǎn)擊緩存菜單項(xiàng)擴(kuò)展場(chǎng)景:*a.工程的版本文件不在遠(yuǎn)程服務(wù)器中,提示“緩存失敗”用例UC9:創(chuàng)建本地工程主要參與人:原型設(shè)計(jì)師前置條件:參與者正常啟動(dòng)程序后置條件:工程文件在本地創(chuàng)建主成功場(chǎng)景:點(diǎn)擊菜單-文件-新建點(diǎn)擊選擇按鈕,選擇在某文件夾存放*.pd文件點(diǎn)擊創(chuàng)建默認(rèn)工程或者是點(diǎn)擊自定義化工程,加入若干個(gè)工程部分并且配置好工程部分后,點(diǎn)擊創(chuàng)建按鈕擴(kuò)展場(chǎng)景:*a.程序無權(quán)限訪問文件夾,創(chuàng)建失敗用例UC10:打開本地工程主要參與人:原型設(shè)計(jì)師前置條件:參與者正常啟動(dòng)程序后置條件:工程文件在程序中讀入主成功場(chǎng)景:點(diǎn)擊菜單-文件-打開選擇某一*.pd文件擴(kuò)展場(chǎng)景:*a.工程文件損壞,提示“打開工程失敗”用例UC11:保存當(dāng)前工程主要參與人:原型設(shè)計(jì)師前置條件:參與者正常啟動(dòng)程序參與者打開了某一工程后置條件:工程文件在成功保存主成功場(chǎng)景:點(diǎn)擊菜單-保存擴(kuò)展場(chǎng)景:*a.參與者沒有打開工程,程序不保存工程用例UC12:創(chuàng)建資源主要參與人:原型設(shè)計(jì)師前置條件:參與者正常啟動(dòng)程序參與者打開了某一工程后置條件:資源成功被創(chuàng)建,并且寫入到工程文件夾主成功場(chǎng)景:點(diǎn)擊資源管理器頁,右擊某個(gè)文件夾,點(diǎn)擊創(chuàng)建資源點(diǎn)擊某個(gè)資源,輸入資源名字,點(diǎn)擊選擇按鈕修改資源屬性,點(diǎn)擊創(chuàng)建按鈕擴(kuò)展場(chǎng)景: *a,參與者沒有打開工程,創(chuàng)建資源菜單不出現(xiàn) *b.參與者沒有輸入資源名字,程序不創(chuàng)建資源用例UC13:創(chuàng)建圖層主要參與人:原型設(shè)計(jì)師前置條件:參與者正常啟動(dòng)程序參與者打開了某一工程參與者已設(shè)置了某一場(chǎng)景為活動(dòng)場(chǎng)景后置條件:圖層成功地添加到活動(dòng)場(chǎng)景上主成功場(chǎng)景: 在大綱頁,右擊場(chǎng)景,點(diǎn)擊創(chuàng)建圖層菜單項(xiàng)擴(kuò)展場(chǎng)景:無用例UC14:創(chuàng)建容器主要參與人:原型設(shè)計(jì)師前置條件:參與者正常啟動(dòng)程序參與者打開了某一工程后置條件:容器創(chuàng)建到某一圖層或者容器中主成功場(chǎng)景: 1.在大綱頁,右擊圖層或者容器,點(diǎn)擊創(chuàng)建容器菜單項(xiàng)擴(kuò)展場(chǎng)景: *a.如果創(chuàng)建的節(jié)點(diǎn)在圖層,并且圖層里有內(nèi)容,提示選中圖層存在內(nèi)容,是否替換為空容器用例UC15:繪制控件主要參與人:原型設(shè)計(jì)師前置條件:參與者正常啟動(dòng)程序參與者打開了某一工程設(shè)置了某一場(chǎng)景作為活動(dòng)場(chǎng)景 后置條件:控件在畫布上某節(jié)點(diǎn)上成功添加控件主成功場(chǎng)景:在大綱頁,點(diǎn)擊某個(gè)容器在視圖工具項(xiàng),點(diǎn)擊某個(gè)繪圖工具在設(shè)計(jì)頁,拖出一個(gè)控件擴(kuò)展場(chǎng)景:*a.參與者無選中某一容器,控件不會(huì)被創(chuàng)建*b.參與者無選中繪圖工具,控件不會(huì)被創(chuàng)建用例UC16:刪除控件主要參與人:原型設(shè)計(jì)師前置條件:參與者正常啟動(dòng)程序參與者打開了某一工程設(shè)置了某一場(chǎng)景作為活動(dòng)場(chǎng)景控件已被創(chuàng)建在大綱的某節(jié)點(diǎn)上后置條件:控件在節(jié)點(diǎn)上被移除主成功場(chǎng)景: 在大綱頁,點(diǎn)擊某個(gè)控件右擊點(diǎn)擊刪除菜單項(xiàng)擴(kuò)展場(chǎng)景:無用例UC17:修改控件屬性主要參與人:原型設(shè)計(jì)師前置條件:參與者正常啟動(dòng)程序參與者打開了某一工程設(shè)置了某一場(chǎng)景作為活動(dòng)場(chǎng)景參與者創(chuàng)建了某一控件后置條件:控件屬性被修改主成功場(chǎng)景:在大綱頁,點(diǎn)擊某個(gè)控件在屬性頁,修改控件的屬性擴(kuò)展場(chǎng)景:*a.在設(shè)計(jì)頁,右擊某一控件,并且選中,屬性頁也會(huì)出現(xiàn)該控件的屬性,并且可以修改用例UC18:移動(dòng)控件主要參與人:原型設(shè)計(jì)師前置條件:參與者正常啟動(dòng)程序參與者打開了某一工程設(shè)置了某一場(chǎng)景作為活動(dòng)場(chǎng)景參與者創(chuàng)建了某一控件后置條件:控件位置被移動(dòng)主成功場(chǎng)景: 在大綱頁,點(diǎn)擊某個(gè)控件在視圖控制器選中移動(dòng)在設(shè)計(jì)頁拖動(dòng)控件擴(kuò)展場(chǎng)景: *a,在大綱頁沒有選中控件或者選中了不可移動(dòng)的控件(如創(chuàng)建,圖層),控件不能被移動(dòng)用例UC19:制作組件主要參與人:原型設(shè)計(jì)師前置條件:參與者正常啟動(dòng)程序參與者打開了某一工程設(shè)置了某一場(chǎng)景作為活動(dòng)場(chǎng)景參與者創(chuàng)建了若干個(gè)容器或控件 后置條件:組件被成功制作并且保存在工程目錄中主成功場(chǎng)景: 在大綱頁,點(diǎn)擊某個(gè)控件 右擊后點(diǎn)擊制作組件菜單項(xiàng)輸入組件名字點(diǎn)擊確認(rèn)按鈕擴(kuò)展場(chǎng)景: *a.在輸入組件名字的時(shí)候,不輸入名字,提示“沒有輸入名字,保存取消” *b.在輸入組件名字的時(shí)候,點(diǎn)擊取消按鈕,程序不繼續(xù)制作組件 *c.參與者點(diǎn)擊的控件不可被制作成組件,制作組件的菜單項(xiàng)不可見用例UC20:添加組件主要參與人:原型設(shè)計(jì)師前置條件:參與者正常啟動(dòng)程序參與者打開了某一工程設(shè)置了某一場(chǎng)景作為活動(dòng)場(chǎng)景參與者創(chuàng)建了若干個(gè)容器后置條件:組件被成功添加到容器內(nèi)主成功場(chǎng)景: 在大綱頁,點(diǎn)擊某個(gè)容器或圖層 右擊點(diǎn)擊添加拷貝組件-點(diǎn)擊某個(gè)存在的組件擴(kuò)展場(chǎng)景: *a.組件文件損壞,組件無法加入到容器或圖層中 *b.參與者點(diǎn)擊的控件不可被添加組件,添加拷貝組件的菜單項(xiàng)不可見用例UC21:刪除圖層主要參與人:原型設(shè)計(jì)師前置條件:參與者正常啟動(dòng)程序參與者打開了某一工程設(shè)置了某一場(chǎng)景作為活動(dòng)場(chǎng)景參與者創(chuàng)建了若干個(gè)圖層后置條件:圖層成功在場(chǎng)景中移除主成功場(chǎng)景: 在大綱頁,點(diǎn)擊某個(gè)圖層 右擊點(diǎn)擊刪除擴(kuò)展場(chǎng)景:無用例UC22:刪除容器主要參與人:原型設(shè)計(jì)師前置條件:參與者正常啟動(dòng)程序參與者打開了某一工程設(shè)置了某一場(chǎng)景作為活動(dòng)場(chǎng)景參與者創(chuàng)建了若干個(gè)容器后置條件:容器成功在圖層中移除主成功場(chǎng)景: 在大綱頁,點(diǎn)擊某個(gè)容器 右擊點(diǎn)擊刪除擴(kuò)展場(chǎng)景:無用例UC23:刪除控件主要參與人:原型設(shè)計(jì)師前置條件:參與者正常啟動(dòng)程序參與者打開了某一工程設(shè)置了某一場(chǎng)景作為活動(dòng)場(chǎng)景參與者創(chuàng)建了若干個(gè)控件后置條件:控件成功在圖層或容器中移除主成功場(chǎng)景: 在大綱頁,點(diǎn)擊某一控件 右擊點(diǎn)擊刪除擴(kuò)展場(chǎng)景:無用例UC24:移動(dòng)控件堆疊位置 主要參與人:原型設(shè)計(jì)師前置條件:參與者正常啟動(dòng)程序參與者打開了某一工程設(shè)置了某一場(chǎng)景作為活動(dòng)場(chǎng)景參與者創(chuàng)建了若干個(gè)控件后置條件:控件被成功被移動(dòng)層疊主成功場(chǎng)景: 在大綱頁,點(diǎn)擊某一控件 右擊點(diǎn)擊移動(dòng)此元素-移動(dòng)到上一層/移動(dòng)到下一層擴(kuò)展場(chǎng)景:*a.控件已在最頂層,控件不會(huì)被移動(dòng)*b.控件已在最底層,控件不會(huì)被移動(dòng) *c.參與者選中的控件是不可移動(dòng)的,移動(dòng)此元素的菜單不可見用例圖參見圖用例圖參見圖3.1,包圖參見圖3.23概要設(shè)計(jì)3.1系統(tǒng)模塊總體設(shè)計(jì)通過系統(tǒng)的需求以及功能分析,可以把系統(tǒng)分為以下模塊客戶端服務(wù)發(fā)現(xiàn)模塊服務(wù)注冊(cè)發(fā)現(xiàn)模塊靠邊文檔服務(wù)畫布模塊日志服務(wù)設(shè)置服務(wù)資源服務(wù)工程組成服務(wù)語言服務(wù)菜單服務(wù)服務(wù)器APP登錄用戶功能模塊工程模塊插件模塊圖3.1用例圖數(shù)據(jù)庫(kù)采用數(shù)據(jù)庫(kù)采用Mysql8.0,數(shù)據(jù)庫(kù)的架構(gòu)參見圖3.3數(shù)據(jù)庫(kù)架構(gòu)圖Pd.S?rvices.Meniui:$eKl9)\r*- P'd.Srefvi<es.Languages(iR;BN^)… ,,—IPd.Service^LoOTEr(0^JW5)\□Pd-StniiefS.REtDLlntiiPd.S?rviceE;.A^IonDDcuni£nti^Eii^.'f%KJ$)^\Pd-StniiefS.REtDLlntiiM.SgiDflw.PrPfMirty。輝燈折器|一\Pd.StrvieetLMVc \_M.hryid.s’HinwcaajEai\圖3.2包圖3.2系統(tǒng)數(shù)據(jù)庫(kù)的設(shè)計(jì)3.2.1數(shù)據(jù)庫(kù)概念結(jié)構(gòu)設(shè)計(jì)plugitemidb"_::_1:crsirtisTirneienebtflI--,iii1;name■n:iii:-■:info■■de-pslor.-totrsquirePoiA^rstt?L;license--acian'5I)home-r_lji_:Ipifthor-■■-■j■-IconIfculturelnfe=iiII■:uCrGifiihs■kJjdHOiptvaiTFT"IscttingC-ouiTttervice-Registc-r^ountiiiirHC>urueL?adei<auntntliLjfiAglDnAnchorC-Duntir\l.svalDnDofAjrnenHZ-DuntdebugiW&kjngiFoiltarn^ourvtdAbi-i^WfSrkin^iFoiltaniMGCouHlh廣themeCountit:i11tDalCaunt■"iI)vicvh<ourTtii:ii_'tHbCountint"Il'SIde(CounthnguagoCount?.L)wRlngiDeElgrtarrount?i/1;沁itigEntityCmMnieniiCountml:1;prajectParttaunt-■:..iprajectEuilderCaunt--'■'resourzECreaLorCaunLi…"丄"da^nlDHcCount:11:tidt/mp -J-)MivaP^ch.?Iii.■■:pl岫Id■>.Tplug刀id:bigimWO!)createTime. 」endbl*lo-i-.■name'vardiHr(54)descript:varchar{512)timcstHrnp.inT!ilamp(?ULerld.bigi'j」;:aspnetusersoipeinsppid-■intIEMft三T?srhigirr;]enable-inyke)1■nr-ha'--TKFfft-TiR。:platfOrTYi.I:卜wpsionQMpirakiigui■::.;:!.us*r1d■■:-it.:Time-stamp-卜rAr_■:t■'J'#id頃處四U&flrNema?■■char(256jgNormfilize-dUsciName.■IEiyiaiIt■?:i25NarrriHl[zedEniailYHrdian25E;ErnailC-onfinTjedL而i「E〔:Pass^ordHsih.5ei^jrity5tif'T>p-?€oncumenc^5i:ampn:i-rPhoneNumberIjn:■PhoneNumbcrCanfirmed:nil;:T^voFartnrEnBble-d'ti".nrLodtcutEnd二LockcutEnahledthAuKuFailedCountir:>llportraitdr:ha匸"□,Ext+id-createTim?:DiginbZO)enable-.:in^int(l)nome宀咀publicUr^intCU..Uwrid-:-iiLlpdidljaTifYlta!bilirriEstamp^tirnertanip^prajectitemf nsionverchan;16;戶prqjedldhcisalaTirvi*oigh>.enablei5ff^tP?hrard-3deKriptw.1ji'Z1Z'thumb■■*char_2E圖3.3數(shù)據(jù)庫(kù)架構(gòu)圖3.2.2數(shù)據(jù)庫(kù)設(shè)計(jì)數(shù)據(jù)庫(kù)設(shè)計(jì)是軟件設(shè)計(jì)的重要部分,其中的設(shè)計(jì)可能會(huì)影響功能的實(shí)現(xiàn)和功能的合理性,也會(huì)影響數(shù)據(jù)的安全,同時(shí),數(shù)據(jù)庫(kù)的結(jié)構(gòu)的設(shè)計(jì)會(huì)間接影響功能的最終效果。本系統(tǒng)使用Mysql8.0作為數(shù)據(jù)庫(kù)引擎,數(shù)據(jù)庫(kù)名稱為pddb,共包含7個(gè)表,分別為用戶表aspnetusers,app表openapps,插件表plug,插件項(xiàng)表plugitem,工程表project,工程版本表projectitemo具體設(shè)計(jì)為:其中表字段修飾NN為不可空,AI為自增長(zhǎng),UQ為唯一的,PK為主鍵,F(xiàn)K(表名.字段名)為外鍵(1)用戶表aspnetusers主要存儲(chǔ)用戶的基本信息包含用戶名和密碼表3.2用戶表aspnetusers名稱數(shù)據(jù)類型修飾注釋IdBIGINT(20)NN,AI,PK用戶唯一idUserNameVARCHAR(256)規(guī)范化的用戶名NormalizedUserNameVARCHAR(256)UQ唯一用戶名EmailVARCHAR(256)規(guī)范化的郵箱NormalizedEmailVARCHAR(256)郵箱EmailConfirmedTINYINT(l)NN是否已經(jīng)完成郵件認(rèn)證PasswordHashLONGTEXT密碼hashSecurityStampLONGTEXT安全時(shí)間戳ConcurrencyStampLONGTEXT并發(fā)時(shí)間戳PhoneNumberLONGTEXT手機(jī)號(hào)PhoneNumberConfirmedTINYINT(1)NN是否已經(jīng)完成手機(jī)驗(yàn)證TwoFactorEnabledTINYINT(1)NN雙因素驗(yàn)證是否啟用LockoutEndDATETIME解鎖的結(jié)束時(shí)間LockoutEnabledTINYINT(1)NN賬號(hào)是否被鎖定AccessFailedCountINT(11)NN登錄錯(cuò)誤次數(shù)portraitVARCHAR(64)頭像路徑(2)app表openapp主要記錄開放式接口的key和secret表3.3app表openapp

名稱數(shù)據(jù)類型修飾注釋IdBIGINT(20)NN,AI,PK唯一idcreateTimeBIGINT(20)NN記錄創(chuàng)建的時(shí)間enableTINYINT(1)NN當(dāng)前記錄是否有效keyVARCHAR(52)NNopenapp的開放idsecretVARCHAR(52)NNopenapp的私鑰platformVARCHAR(32)NN所在的平臺(tái)versionVARCHAR(32)NN版本expireBIGINT(20)有效期userIdBIGINT(20)FK(aspnetusers.Id)openapp持有的用戶idTimestampTIMESTAMP(6)時(shí)間戳⑶插件表plug記錄插件的信息表3.4插件表plug名稱數(shù)據(jù)類型修飾注釋IdBIGINT(20)NN,AI,PK唯一idcreateTimeBIGINT(20)NN記錄創(chuàng)建的時(shí)間enableTINYINT(1)NN當(dāng)前記錄是否有效nameVARCHAR(64)NN,UQ插件的名字descriptVARCHAR(512)插件的描述timestampTIMESTAMP(6)時(shí)間戳userIdBIGINT(20)NN創(chuàng)建當(dāng)前插件的用戶id(4)插件項(xiàng)表記錄插件版本的表表3.5插件項(xiàng)表plugitem名稱數(shù)據(jù)類型修飾注釋IdBIGINT(20)NN,AI,PK唯一idcreateTimeBIGINT(20)NN記錄創(chuàng)建的時(shí)間enableTINYINT(1)NN當(dāng)前記錄是否有效nameVARCHAR(128)NN當(dāng)前插件版本的

文件infoLONGTEXTNN當(dāng)前插件版本的簡(jiǎn)略信息depsLONGTEXTNN當(dāng)前插件版本的依賴requirePowersINT(ll)當(dāng)前版本的要求權(quán)限licenseVARCHAR(64)當(dāng)前版本的協(xié)議homeVARCHAR(64)當(dāng)前版本的home頁authorVARCHAR(64)當(dāng)前版本的作者iconVARCHAR(64)當(dāng)前版本的圖標(biāo)cultureinfoVARCHAR(8)當(dāng)前版本的語言versionVARCHAR(32)當(dāng)前版本的版本descriptVARCHAR(512)當(dāng)前版本的描述settingCountINT(11)NN當(dāng)前版本提供設(shè)置數(shù)serviceRegisterCountINT(11)NN當(dāng)前版本提供服務(wù)數(shù)resourceLoaderCountINT(11)NN當(dāng)前版本提供資源加載器數(shù)avalonAnchorCountINT(11)NN當(dāng)前版本提供avalon罪邊文檔數(shù)avalonDocumentCountINT(11)NN當(dāng)前版本提供avalon文檔數(shù)debugWorkingForItemsCountINT(11)NN當(dāng)前版本提供單項(xiàng)調(diào)試器數(shù)debugWorkingForItemessCountINT(11)NN當(dāng)前版本提供多項(xiàng)調(diào)試器數(shù)themeCountINT(11)NN當(dāng)前版本提供主題數(shù)toolCountINT(11)NN當(dāng)前版本提供工具數(shù)viewCountINT(11)NN當(dāng)前版本提供視

圖數(shù)tabCountINT(ll)NN當(dāng)前版本提供tab頁數(shù)viewBuilderCountINT(ll)NN當(dāng)前版本提供視圖建造器數(shù)languageCountINT(11)NN當(dāng)前版本提供語言數(shù)settingDesignerCountINT(11)NN當(dāng)前版本提供設(shè)置設(shè)計(jì)器數(shù)settingEntityCountINT(11)NN當(dāng)前版本提供設(shè)置實(shí)體數(shù)menuCountINT(11)NN當(dāng)前版本提供菜單數(shù)projectPartCountINT(11)NN當(dāng)前版本提供工程部分?jǐn)?shù)projectBuilderCountINT(11)NN當(dāng)前版本提供工程建造器數(shù)resourceCreatorCountINT(11)NN當(dāng)前版本提供資源創(chuàng)建器數(shù)downloadCountINT(11)NN當(dāng)前版本下載數(shù)量timestampTIMESTAMP(6)時(shí)間戳savePathVARCHAR(64)版本存放的路徑plugIdBIGINT(20)NN,FK(plug.Id)插件id(5)工程表project存儲(chǔ)用戶創(chuàng)建的工程的信息表3.6工程表project名稱數(shù)據(jù)類型修飾注釋IdBIGINT(20)NN,AI,PK唯一idcreateTimeBIGINT(20)NN記錄創(chuàng)建的時(shí)間enableTINYINT(l)NN當(dāng)前記錄是否有效nameBIGINT(20)NN工程名字publicTINYINT(1)NN工程是否公開UserIdBIGINT(20)NN,FK(aspnetusers.Id)工程創(chuàng)建者id

updateTimeBIGINT(20)工程更新時(shí)間TimestampTIMESTAMP(6)時(shí)間戳(6)工程項(xiàng)表projectitem存儲(chǔ)用戶創(chuàng)建的工程版本的信息表3.7工程項(xiàng)表projectitem名稱數(shù)據(jù)類型修飾注釋versionVARCHAR(16)NN,PK版本projectIdBIGINT(20)NN,PK屬于的工程idcreateTimeBIGINT(20)NN創(chuàng)建的時(shí)間enableTINYINT(1)NN當(dāng)前記錄是否有效savePathVARCHAR(128)NN工程保存的路徑descriptVARCHAR(512)描述thumbVARCHAR(128)縮略圖位置4系統(tǒng)功能設(shè)計(jì)與實(shí)現(xiàn)4.1客戶端框架4.1.1服務(wù)發(fā)現(xiàn)在程序初始化過程中,會(huì)進(jìn)行下面步驟從插件文件夾中尋找可用的dll(這些dll必須存在一個(gè)入口點(diǎn))加載核心框架服務(wù)(界面參見圖4.1),包含,遠(yuǎn)程連接服務(wù),靠邊文檔服務(wù),視圖調(diào)試器服務(wù),語言服務(wù),日志服務(wù),菜單服務(wù),視圖屬性分析服務(wù),資源服務(wù),設(shè)置服務(wù),源文檔服務(wù),Tab頁服務(wù),主題服務(wù),視圖工具服務(wù),視圖服務(wù),工程部件服務(wù)加載擴(kuò)展dll的服務(wù)核心加載完成圖4.1加載核心服務(wù)4.1.2服務(wù)注冊(cè)與發(fā)現(xiàn)在程序整個(gè)生命過程中,都一直會(huì)存在一個(gè)Ioc容器,此容器存放著核心服務(wù)和插件的服務(wù),服務(wù)的生命周期(Lifetime)可分為3個(gè),分別是單一實(shí)例生存期服務(wù)(Singleton),作用域生存期服務(wù)(Scoped),暫時(shí)生存期服務(wù)(Transient),在服務(wù)獲取時(shí),會(huì)通過作用域不同而生成服務(wù)實(shí)例,而且會(huì)

自動(dòng)裝配。4.1.3靠邊文檔服務(wù)左右兩邊靠邊文檔都由服務(wù)lAvalonService定義,此服務(wù)管理靠邊文檔的生命狀態(tài),活動(dòng)布局,靠邊文檔根等,類圖參見圖4.2,在運(yùn)行期間,同一靠邊文檔實(shí)例只會(huì)同時(shí)被激活一個(gè),外部插件可以標(biāo)記AvalonUnit特性,并實(shí)現(xiàn)lAvalonAnchorMetadata接口,程序在服務(wù)發(fā)現(xiàn)時(shí)候會(huì)尋找符合條件的類型進(jìn)行靠邊文檔注冊(cè)圖4.2靠邊文檔服務(wù)類圖資源管理器在工程打開時(shí),此靠邊文檔會(huì)加載工程目錄里的文件,如果這些文件如果可以被以某種方式加載時(shí),右擊此文件項(xiàng)時(shí),可以彈出對(duì)這些文件的操作菜單。視圖工具箱在工程載入后,參與者可以從視圖工具箱選擇合適的工具對(duì)活動(dòng)場(chǎng)景進(jìn)行特定的操作,如果核心框架提供的移動(dòng)視圖和創(chuàng)建矩形,類圖參見圖4.3。

TaolContejrt-iTs會(huì)泛型類丄展性,Canva?AEventArgsAHandle,OutterConfainerARotateTransform尹TaolContejrt-iTs會(huì)泛型類丄展性,Canva?AEventArgsAHandle,OutterConfainerARotateTransform尹ScaleTrantformASenderASkewTiansform夕TranslaieTransform/方法扌GetTfuePcInt&ToolConiextiTsIM自岫Ma控口9 、Fmi/Meffif/fitjSw僉■Abshdtt掛+PtgObject-屬陛,icon」萬■法AttackDetlack學(xué)KeyDown&KeyUp^^?Mou&eDovmEMouseEnterWMou&eLeave-MouseMave?MouseUp&MouseWwlTo&lsService矣+PackagingSer^'icexToolPackage.IToolMetadatfl,ToolP^ckages■頻/currentTool,CurrentTcKil』萬洼?CondilicmRMakePackageITe^lsServke 』搦口-*IPdc.k^giiigSeMce^TDQlPtickdgeiIToolMelddatia,TQolPdfCk^ge>J腐住夕Nsg,方法.4泊? 絢伽阿K&yUp?AfwseEm? M攻.Enter7 牌叫我國(guó)曽? MW紹伽鎏? M叫seOpT^olPackage §奏■+F^ck^Ba&e-:IToolMetadata*j方法7ToolPdiclkdgeToolUnltAttributc 公■*PlugUnitAttribule-方法整ToolUnilAtiribuie(+1毆)圖4.3視圖工具箱服務(wù)類圖大綱在工程打開后,存在某一活動(dòng)場(chǎng)景的時(shí)候,此視圖會(huì)顯示當(dāng)前活動(dòng)場(chǎng)景的可視樹,并且對(duì)可視樹的元素進(jìn)行移動(dòng),刪除等操作。調(diào)試在工程打開后,存在某一活動(dòng)場(chǎng)景的時(shí)候,參與者可啟用調(diào)試靠邊文檔的可用調(diào)試器,并且在在工程打開后,存在某一活動(dòng)場(chǎng)景的時(shí)候,參與者可啟用調(diào)試靠邊文檔的可用調(diào)試器,并且在畫布上可見調(diào)試的輔助線。屬性在工程打開后,存在某一活動(dòng)場(chǎng)景的時(shí)候,并且已選擇某一元素作為當(dāng)前活動(dòng)元素時(shí),此視圖會(huì)分析當(dāng)前活動(dòng)元素的可用屬性,并且生成相應(yīng)的操作控件進(jìn)行展示,參與者可以調(diào)整這些控件的值來調(diào)整當(dāng)前活動(dòng)元素的樣式。4.1.4畫布畫布繪畫引擎由Skiasharp提供,此引擎具有跨平臺(tái),3D加速繪畫等優(yōu)點(diǎn),引擎核心是OpenGL,在場(chǎng)景文件加載后(*.scene)會(huì)對(duì)此文件進(jìn)行反序列化,生成一個(gè)場(chǎng)景對(duì)象,而這個(gè)場(chǎng)景對(duì)象就是在畫布所呈現(xiàn)的圖像,在繪畫引擎啟動(dòng)后,每一幀(默認(rèn)16.66ms/幀)都會(huì)對(duì)當(dāng)前可呈現(xiàn)對(duì)象進(jìn)行重畫,每一個(gè)畫布都會(huì)存在一個(gè)繪畫器,當(dāng)有服務(wù)要求重繪時(shí),下一幀才會(huì)要求重繪,而位置計(jì)算和大小計(jì)算都會(huì)在被標(biāo)記層疊改變后才會(huì)在下一幀重新計(jì)算。繪畫流水線在程序中是抽象的(類圖參見圖4.4),不依賴?yán)L畫引擎,不是平臺(tái)實(shí)現(xiàn)的,所以如果需要切換繪畫引擎,如Win2d(一個(gè)2d高性能繪畫引擎),DirectX(一個(gè)2d/3d高性能繪圖引擎)等,都非常容易。UlEle-mmt鬟■Lltlprr^nlrnnlNri■定Tom頃1;鬟■Lltlprr^nlrnnlNri■定Tom頃1;?方福'~iLonlenlNeedWIiM^diEtanlu-nfeCianlai...A=+Conpa-mNCaniHit.UlK!*L?iithEto>Twnl=AV舊臓由w *■NT■制異=方牛CPalhEtflienri%S^r^irwflld栄2虹_府叩?|E.6nl■*hrliEtepenl■?宣溫-*CwRenderTextEunT字爾■<Tonfi齡%ifflIwSDccoMtiof*#m’hrLHh>FscEJza#Tiifl■TeDwcmIe-可活% ■虬%沖?4叫由凱engender代T^flGunA?招A?招,tKHdrrborderrhlctfem皂ItMrvifLiiliuhXCGfreiHjtiiusY*iHI斗IMlhDriMIhmi,*Bffdef,CorneiRadius「慎叫以血值曾F4I?吼AiianOBO^rid*Btrdef_PToptnr€han<jHlfiBcw^i,F(xiàn)虬氣cpM.tha仔1e-M?*kjr#Ove?ridee_DnRjefriM岫饗T*匚El?MT-Wt*L的PfiMHyOTcfAxipwly-HUSHtT?l5.Matefjcmenlinft]電OnflefWs?ScfcLeft3SstM電WwWdAok-HLMWbrnw"%gvTlpM母qpig*ChjkJitHi:-方活七ChilldiHi_Cc4lKlt3r¥€furled5EDfTldirwir%Hr-mIrwHbi^hlw^%llEITi_N?!dM?HMJie9.M^bHEI^rrvnUnfo叫UnftefiderVReMMtWew$£?iVAwDdsu^%農(nóng)賦_岫1山睫%UWMd?.海H睥圖4.4視圖模型類圖4.1.5高性能對(duì)象分析器在很多模塊中,都使用了一個(gè)高性能對(duì)象分析器來支撐從程序角度的對(duì)象到參與者角度的UI界面(類圖參見圖4.5),并且可以對(duì)生成的控件進(jìn)行單/雙向綁定,用戶從界面更改的值,通過管道(在

WPF是通過綁定技術(shù))來對(duì)綁定對(duì)象的值進(jìn)行更改。此分析器與平臺(tái)無關(guān),所以它可以用在任意的MSIL環(huán)境中使用,如果當(dāng)前平臺(tái)沒有綁定技術(shù)等平臺(tái)實(shí)現(xiàn)的管道技術(shù),分析器提供一個(gè)高性能的與平臺(tái)無關(guān)的對(duì)象讀寫器,此讀寫器是無耦合,開箱即用的對(duì)象屬性取值,寫值輔助器,在使用讀寫器附加到一個(gè)對(duì)象時(shí),會(huì)在當(dāng)前平臺(tái)生成IL代碼并進(jìn)行編譯運(yùn)行,所以此讀寫器與一般時(shí)候?qū)?duì)象屬性進(jìn)行g(shù)etter和setter的耗時(shí)相差不大(性能測(cè)試圖參見圖4.6)olAeAnalR^rJtn-Ktt』方洗lAeAnalR^rJtn-Ktt』方洗AoAnaloier 盪#DefaJt夕SstUngs■J5?拿Analize吼Ar^llaePart吊AaAn*liwr!+1B9關(guān)芋■CdnStepin虬CwpAr^llze%Gener日世Aftall型dkl機(jī)bodHemsGenerawAri^iizediPropertyliems虬Gene間磨Methodl拍m陌.Gen^ratflPropertyltern華*GeiAixlFilierMethixls虬GelArKlFllterProperli^%MethodCa^Analiz-e巳Prog]以MiWi院ICallection^IViewfiuilder?TView>?IVIeveBulkibblecTVIew^FflrVlew?uild?r^TView>-事段,wstcrnB-uilden%vlew&ulid^rs-m*Count夕CbhlomBulldert,K2ollectlon<iVlewBuiider<7V?ew>>JiReadOnlyJ&SlringPravider-g?Add?MdR*nvv(4-11U0?Build?Clear?Ccrttiins?CcpyTo?ForVew&ildeffMataO?GeiDyr^mkBuilOer?GetEnumerator孔lEnumerableGetEnumeratior?RemoveSort』事件FNoBuiltIVI*Kfiulldibl^..A'遷咬口'PColi€<tkxi-=lvlwB^...-TO±夕g會(huì)沖I■咆國(guó),施祗成加-方単N?SulkjH4ndl?vmpropwiylkm圖4.5對(duì)象分析器類圖t〔MicrosoftVisualStudio調(diào)試控制含直接訪問用時(shí):00:00:00,5643613間接訪問用時(shí):00:00:017269740TestSet:直接寫用時(shí);00:00:00.4698264間接寫用時(shí):00:00:01.5914433TestAnalizer;對(duì)象擁有屬性:10000個(gè)分析對(duì)象用時(shí)(包含生成取值和設(shè)值器);00:00^03.5062699圖4.6對(duì)象分析器性能測(cè)試如圖可見,對(duì)象分析器在讀寫屬性和分析屬性時(shí)都擁有很大的優(yōu)勢(shì)。4.1.6日志服務(wù)程序的日志服務(wù)基于NLog,通過Ioc容器自動(dòng)裝配,任何服務(wù)都允許在Ioc容器獲取一個(gè)暫時(shí)

的日志器,并且在此日志器進(jìn)行寫日志,所寫的日志會(huì)保存在本地目錄。7設(shè)置服務(wù)設(shè)置服務(wù)基于Microsoft.Extensions.Configuration,此服務(wù)框架允許JSON,INI,XML等設(shè)置提供源,這些提供源在運(yùn)行狀態(tài)中,可以通過配置器的生成操作,生成一個(gè)與格式無關(guān)的Key-Value配置集合,因?yàn)樵O(shè)置的保存需求,通過對(duì)配置器的擴(kuò)展,可以對(duì)配置集合修改的項(xiàng)進(jìn)行保存,并且在下一次載入中,可以重新加載修改的配置集合,并且通過對(duì)象圖(SettingMap)通知設(shè)置的修改。對(duì)象圖是一個(gè)與平臺(tái)無關(guān),結(jié)合了高性能分析器的對(duì)象分析樹,在程序運(yùn)行中,對(duì)對(duì)象圖的更改可通知配置集合的更改,此過程是雙向的,類圖參見圖4.7。I快IHngQ EVTIJfPfrfjuKSMIlngCan..,R]如心I!PfrfjuKSMIlngCan..,R]如心I!-幃:w*Lhangt句ikffa..|OtMr^KfllcaikPjihIDunqs-tflk-NAfifli;**IJlMH^nfikPdLh■^niingFctH-j縫£wlhiic|FDkl?rMjnH![:fI■fDcdMJliSfiwiflCah..IrrErr&Lfe^eirngFcM..]TOC\o"1-5"\h\z!Strth* I"髀 [JWdrmnqwyTU,I -**1 J uHiingMap* VHIr^SA^p> 鈕卩Son〔白-0Tt學(xué) <endrim■GrncriHe^Fll!ngMap4 GrtDetiflnefffir rw^kef'dckd^c-丁W^ingDwignetirrricf,丁W^ingDwignetirrricf,M?Nlr^Mjp&DUIC4!jMjp^DUr!:IlAddPleFhgMjpguIki.IIWt&M叩IbuJlOn^Ktkiuvf^illiir^.SiAlin^GfilXuiJv?*St,**,nodei-XE#■Cowil>財(cái)尹iouce,ihb>V^Jun?Ea&nuiE財(cái)?做Ew歸如七Flnumwabk■…kiil&ouiU?SkiingWlap# 『膈IFIX'.L^fLulFiihUFX-r^ilpfe"■-我*t:buldr:氣coMgurdlkr^cunM/IM-.WS>HkkfC<nfyuiriliar&auicnbbi商歡m_>RcxriAg%bikJR心,由蜥心*(M:吟W?C<nri£bb<iE.,C%niijuirfksn£AuiLm_Lu<K.lH><<h'rf<H]iMJ'7.h1riik*PtclM<|V單袖MAwik.*11<*1'hdngiaAwiteCelling-網(wǎng)EUkkdhuHRdMdKlRwflthangrtSaved如UMThrngN圖4.7設(shè)置服務(wù)類圖4.1.8資源服務(wù)資源服務(wù)提供與平臺(tái)無關(guān)的資源加載操作服務(wù),在程序運(yùn)行中,此服務(wù)可以對(duì)平臺(tái)的文件進(jìn)行加載W.scene(場(chǎng)景文件),*.view(組件文件)等等,并且此服務(wù)允許加入其它文件的加載器,類圖參見圖4.8。4I—J圖4.8資源服務(wù)類圖4I—J圖4.8資源服務(wù)類圖9工程組成服務(wù)此服務(wù)提供了一個(gè)可擴(kuò)展,易擴(kuò)展的工程組成服務(wù),在參與者進(jìn)行創(chuàng)建工程時(shí),可以選擇工程組成服務(wù)的某一些工程來自定義工程,類圖參見圖4.9。WWv9?Fowfcn■Dpbnrftr-4*[VwuwciTirAgwi|-IN.■.Aft?-g*.SKjIcrS-:-Aa/Lg”:■?JM;■PI?-O#iwimftbUL4>■a-?*?:?M■*if—irWF'-Fl■■BPS-SO.lwAhaz-ml-.*?■KA圖4.9工程組成服務(wù)類圖4.1.10語言服務(wù)此服務(wù)支撐了整個(gè)程序的語言服務(wù),此服務(wù)可以通過從任何文件通過某一種方式加載字符串(默認(rèn)支持從RESX,JSON,XML加載語言),加載過程中,需要提供一個(gè)值,指示加載的是什么語言,語言集合最終會(huì)編譯成一棵樹,加速字符串的讀取速度。并且語言服務(wù)支持從WPF的XAML中進(jìn)行直接標(biāo)簽使用,在程序運(yùn)行過程中,會(huì)自動(dòng)從語言服務(wù)中加載當(dāng)前線程語言的合適字符串,類圖參見圖4.10。/??n ujffeMe....MSWBH凳■-pFromSrreaiTLangua?OnlnitStrinqs.■iiLangijageWftidta浦李監(jiān)/??n ujffeMe....MSWBH凳■-pFromSrreaiTLangua?OnlnitStrinqs.■iiLangijageWftidta浦李監(jiān)%cullurelnfo,dkporwed%ilrejarnFactory%strings,AutcDi^ponrse>Culturenio爭(zhēng)l^lnitEdStringsJ&Stream尹Strings;?Okpose?GeTShlrvgSInilStri咿?rcv心的成鰻lLangSd*inigN&cle*知夕財(cái)fa夕饋熾戶版血夕聞h戶席-M語5EerrmvM?忻ILvnrdr.,株?□■*IL>£pa虻Bb??IStrmgPrCTflder-W5#■珈股5方湛坤f堿琳御FPLnn^u?g*Svr¥rn賜m4NPai:kdglngSer>1c&<...■+帷仙血泌象志妙…rl^tnngPrcjvider-Kt-方盜呻SWC微海1■■曲珀甘凳■-pFrDm54r*EfTiLangud.?!』?iS用酷OnlnitStringsXm/LjMffuaffeMe.a.A?■-pFromSIrftanLanigua...!』BiS亳OnlnrtStringE.Q Urtgungf5trMk>e奨?P-ackaginflSeivke^LanquagePacIt.-事歇,cullurelnfo,h■其,k>ng5trirfcgNode-Wt夕CuiturelnfD爭(zhēng)CurrenlLangiiageMedata,this-方注%Build&Corudition由GelStrir*g?FM^k?Package%RaisedetStringRaiseSelCuilluirelnfDff^eCuitur^info圖4.10語言服務(wù)類圖4.1.11菜單服務(wù)菜單服務(wù)支持動(dòng)態(tài)創(chuàng)建,并且支持層級(jí)菜單,擴(kuò)展菜單,替換菜單等運(yùn)行中操作,類圖參見圖4.11。

Aatirui#INRiMMvtebii■I*lik*VWE<2iiJQriAlhrRtwhct-&f*w*wrdR串血Si洲ElWMt..*■c#冊(cè)m/Mm-f*Zui>?Sc■JVSU-IM?MfrUMHMSUUAjn^,酶EiJfwWrrM^myMutw^NMruWain.*F-jd MmMhjatu■IDwCwIMinjIcb!MfH?#力心‘me李A(yù)atirui#INRiMMvtebii■I*lik*VWE<2iiJQriAlhrRtwhct-&f*w*wrdR串血Si洲ElWMt..*■c#冊(cè)m/Mm-f*Zui>?Sc■JVSU-IM?MfrUMHMSUUAjn^,酶EiJfwWrrM^myMutw^NMruWain.*F-jd MmMhjatu■IDwCwIMinjIcb!MfH?#力心‘me李Ccwrwwrd(itsaiw>mJtllETiFh散心fmw拿MiMEJtl7lMnffFfcrqwvJRFpkrrTil*加4!C-midl?rritar;kErVlawH:faM』g亀BHA^lhodM?K*AA:Eian1Pp*4rvihJh臉過moeixFfinurdiFHi-W:JAcosfilMRiPiAjiAxiuil l(XNsFAnlHriuuMFptar#UtAtrmAErar^#*fJtMuiMrt4>Mnrwrk4gr盧A*t-B?Fd?EHrd*n'Mbhh^ih#*flk-*?rdrlurdWMUv-m,ftpjvlFhM.^専Add.Gh^S■2r^wlrtun?riiHh尊.HutiXJkvfiTo%htu^iT由e■MtFHSnfc#Rwiawf*1TE'MarialrWFlMlji>-ji 辛 Avudo-iI 事 C?£-a?MNI ri E^t1 *做I 號(hào) FmiI]?tanpoil\9皿土、I端htfw!拿OpwiI*dUm!*PMIqMj#?^r^iMrii■<;-醉!苦Ctirrlikw,&■心*vXi代曲拿HA?j!AM^TMibM拘NKd.f*P?mri勵(lì)Rl*JQA*FIW?iVtanjHulil-1Bffi■iMn!、:StoLlu^hi■叩ml-,LinF'flivriChH^fd* *girntf 眼hipr*unu<t1JfjrntUuihHhVcMi圖4.11菜單服務(wù)類圖4.2服務(wù)器架構(gòu)4.2.1APP登錄客戶端與服務(wù)器的通信安全,由一個(gè)連接憑證支撐(app_session),此憑證需要通過一次請(qǐng)求來獲取,在請(qǐng)求中,需要提供客戶端標(biāo)識(shí)(Key),平臺(tái)號(hào)(Platform),版本(Version),時(shí)間戳(Timestamp),簽名(Sign=MD5(Key+Timestamp+Platform+Version+Secert,32)),如果驗(yàn)證成功,服務(wù)器會(huì)返回一個(gè)12小時(shí)有效期的連接憑證,此憑證存在服務(wù)器緩存內(nèi),一個(gè)客戶端標(biāo)識(shí)只會(huì)有一個(gè)連接憑證。在往后的功能接口中,都必須提供此憑證,而且都需要在請(qǐng)求元數(shù)據(jù)中提供以上信息,來證明請(qǐng)求的合法性,通訊契約參見圖4.12。serviceApp(//App登錄rpcLogin(Pd,Models-AppLoginR^auest)returnis(Pd,Models,AppLogInResponse):圖4.12App登錄通訊契約4.2.2用戶功能設(shè)計(jì)客戶端可以向服務(wù)器發(fā)起用戶注冊(cè)請(qǐng)求,在請(qǐng)求過程中,為保證安全性,密碼須通過此公式進(jìn)行加密AES(MD5(pwd,32),Timestamp+Sign),在服務(wù)器會(huì)通過AES解密來獲取hash加密后的密碼,如果請(qǐng)求成功,數(shù)據(jù)庫(kù)將記錄創(chuàng)建的用戶信息。可以向服務(wù)器發(fā)起用戶登錄請(qǐng)求,在請(qǐng)求中,需按照注冊(cè)的密碼加密方式,對(duì)密碼進(jìn)行加密,如果成功登錄,服務(wù)器會(huì)返回一個(gè)JWTToken,此憑證在6小時(shí)內(nèi)有效,此值可以從服務(wù)器配置中進(jìn)行調(diào)整。JWTToken會(huì)保存在服務(wù)器內(nèi)存中,在需要身份驗(yàn)證的請(qǐng)求中,需要帶著整個(gè)憑證來請(qǐng)求,驗(yàn)證請(qǐng)求者的身份。可以向服務(wù)器發(fā)起用戶修改密碼請(qǐng)求,在請(qǐng)求中,舊密碼和新密碼都需要按照注冊(cè)的密碼加密方式,只有在舊密碼驗(yàn)證通過后,才會(huì)執(zhí)行密碼修改,在修改密碼成功后,登錄則需要使用新密碼才能成功登錄??梢韵蚍?wù)器發(fā)起檢查憑證的請(qǐng)求,請(qǐng)求須附帶須檢查的登錄憑證,服務(wù)器會(huì)返回一個(gè)值,指示此憑證是否有效??梢韵蚍?wù)器發(fā)起更改名字的請(qǐng)求,請(qǐng)求須附帶登錄憑證和更改的名字,此名字不能為空,服務(wù)器會(huì)返回一個(gè)值,指示更改是否成功??梢韵蚍?wù)器發(fā)起上傳頭像的請(qǐng)求,請(qǐng)求須附帶登錄憑證和圖片的完整路徑,圖片的完整路徑不能為空,并且會(huì)通過E-Tag驗(yàn)證,服務(wù)器會(huì)返回一個(gè)值,指示更改是否成功。通訊契約參見圖4.13。serviceUser(〃注刖rpeR&gister[Pd.MDd&lSxRe^tsterR&quest}retLrns(Pd..Models.Regiit&rRespcnse)j〃檢測(cè)名字是否相冋rpcCheckName(Pd.Mode1saCheckNaneR-eque51)returns(Pd.Models.CheckNameResp^nse);〃燮錄rpcLogin(Pd.Models.LoginRequest)returns(Pd.Models.LoginResponse)j〃密碼修改rpcPridModify(PdMode1s.PwdModifyRequest)rsturns(Pd.ModelstP^dMDdifyResiporise);//獲取用戶基本信.息rpcGetUserinfo(Pd,Mode1sGetUserlrifoReque51)returns(Pd+Hudels-GetU5erlm'FoRe5pon5e);〃檢測(cè)普*會(huì)心是否可用rpcCheckAccessToken(Pd.Models.CheckAccessTokenRequest)returns(Pd-Wodels^CheckAccessTokenResponse)〃上傳頭像rpeUploadPoi^trait(Pd.Models.UploddPortraitRequest)returns(Pd.Models.Upl-oadPortraitResponse);)圖4.13用戶服務(wù)通訊契約4.2.3工程功能設(shè)計(jì)客戶端可以向服務(wù)器發(fā)起創(chuàng)建工程的請(qǐng)求,請(qǐng)求時(shí)須附帶工程的名字等信息,服務(wù)器會(huì)返回一個(gè)值,指示創(chuàng)建是否成功??梢韵蚍?wù)器發(fā)起刪除工程的請(qǐng)求,請(qǐng)求時(shí)須附帶工程的Id,服務(wù)器會(huì)返回一個(gè)值,指示創(chuàng)建是否成功??梢韵蚍?wù)器發(fā)起獲取工程的請(qǐng)求,請(qǐng)求時(shí)須附帶用戶的Id(工程持有者),來搜索工程,服務(wù)器會(huì)返回一個(gè)數(shù)組,指示獲取的結(jié)果??梢韵蚍?wù)器發(fā)起搜索工程從關(guān)鍵字請(qǐng)求,請(qǐng)求時(shí)須附帶搜索關(guān)鍵字來搜索工程,服務(wù)器會(huì)返回一個(gè)數(shù)組,并且會(huì)返回分頁實(shí)體,指示獲取的結(jié)果??梢韵蚍?wù)器發(fā)起獲取工程的所有版本請(qǐng)求,請(qǐng)求時(shí)須附帶工程Id,此過程必須是工程持有者或此工程必須是公開的才能被獲取,否則返回401狀態(tài)碼??梢韵蚍?wù)器發(fā)起刪除工程版本的請(qǐng)求,請(qǐng)求時(shí)須附帶工程Id和版本Id,此過程需要身份驗(yàn)證,并且刪除的版本必須歸屬參數(shù)所帶工程上,返回一個(gè)值,指示刪除是否成功??梢韵蚍?wù)器發(fā)起更新工程版本的請(qǐng)求,請(qǐng)求時(shí)須附帶工程Id和創(chuàng)建版本的信息,并且會(huì)返回一個(gè)值,指示創(chuàng)建是否成功。通訊契約參見圖4.14oServicePr^jfrct(〃拽索頊甘從關(guān)鍵字rpc (PdrWdelit.SMrcheyK;eyR?ou?Sit)returnit(Rl;〃読艱匸程M中rpcGetFronld(Pd..P^dels.Ge-tFriMiidRBque-st)retLirns.(PdMedelebGet^r-eimldRje!Sps>njse]|j〃獲成工程所宥版本rpcGetAlIversion(Pd.mdel耳?GetAllVersionRequest)returns(Pd.Models.GetjMIVersionResponse)]〃從用戶獲取rpcGetFraBUser{Pd.iModel&.SstFronLlserRequest)returns(Pd.Models.GetFroniLJserRespanse)j."創(chuàng)■工建「取Create(Pd,M&Oie15,ereu&st)re-turns<叫「知血房「頃#砒白腥卽011就〉;//R傳制皐irp±UpluddVerjiian(PdaMbdulii.Upl[i-adVersiDnRec|ut?i!L)rttui^ns(Pd?NodeJt,_Up1d^idVtsrs,IcrRetpan^e)j障丄程rpcDelete(Pd□Mode1s*De1eteReque5t)returns(PduMcdel^uDeleteBesponse);〃州除版本rpcDeletetfersion(Pd_Modele.Delet&VersionRuest)returns(Pd.Models.DeleteVErsionRes-painEe)j“更新名字rpcUpdateN^rie(Pd?MedelsfUpcJsiteWameHequest)return-s(Pd.Model5.Updst^NameAespen5p)〃更新匸牌是否發(fā)開rp±Upd^tePubl1((Pd^ModelsUpdatePutjlitReque^t)「酔上(Pd.Modele.-L'pdaEePublicReponhe);〃工程的版本是斉存在rpc15Pi-qjectVersioriExi51(Pd..Models.IsProje<tVersianExlstflequest}returns(Pd.Model5..IsPrajectVersionExistResponse);)圖4.14工程服務(wù)通訊契約4.2.4插件功能設(shè)計(jì)客戶端可以向服務(wù)器發(fā)起創(chuàng)建插件根部的請(qǐng)求,請(qǐng)求須附帶創(chuàng)建的基本信息,服務(wù)器會(huì)返回一個(gè)值,指示是否創(chuàng)建成功??梢韵蚍?wù)器發(fā)起刪除插件根部的請(qǐng)求,請(qǐng)求須附帶插件根部的id,服務(wù)器會(huì)返回一個(gè)值,指示是否刪除成功??梢韵蚍?wù)器發(fā)起搜索插件的請(qǐng)求,請(qǐng)求須附帶搜索關(guān)鍵字,如果成功搜索,服務(wù)器會(huì)返回一個(gè)數(shù)組和一個(gè)分頁實(shí)體??梢韵蚍?wù)器發(fā)起刪除插件版本的請(qǐng)求,請(qǐng)求須附帶插件版本的Id,服務(wù)器會(huì)返回一個(gè)值,指示是否刪除成功。可以向服務(wù)器發(fā)起獲取插件所有版本的請(qǐng)求,請(qǐng)求須附帶插件版本的Id,服務(wù)器會(huì)返回一個(gè)數(shù)組代表此插件的版本??梢韵蚍?wù)器發(fā)起獲取版本原型的請(qǐng)求,請(qǐng)求須附帶插件版本的Id,服務(wù)器會(huì)返回一個(gè)JSON信息,指示插件版本的原型??梢韵蚍?wù)器發(fā)起創(chuàng)建插件版本的請(qǐng)求,請(qǐng)求須附帶插件版本的信息,服務(wù)器會(huì)返回一個(gè)值,指示是否插件成功。通訊契約參見圖4.15oservicePine〃尋找插件從美攝宇rpcFindByKey(Pd.MedeletFindGylteyRequest)returns(PduMedelEtFindByKeyResponse)]"尋找插件從用戶名字rpcFindByUser(Pd 1etFindByUEer-Request)returns{PdBPtade1e.FindEyUserResponse)j"獲収插件所有版本rpcGetVersions(Pd.Made1ebGetVer&ionRequest)returns(Pd.MadelE.GetVersionResponse〃獲取插件原壁信息rpcGetVersionProto(Pd.Made1stGetVersionProtoRequest)returns(Pd.Models.GetVersionProtoRespanse);//創(chuàng)建插件的根rpcCreateRoot(Pdb1sB€reatelRootRequest)returns(Pd.ModelstCreateRootResponse)j〃冊(cè)除插件的根rpcDeleteRoot(Pd^odelE.D-eLetelRootRequest)returns(PdBPtadeIs.DeleteRootResponse)j〃更新插件根的描雄rpcUpdateRootDescript(PdBMode1e,..UpdateRootDescriptRequee±)returnE(Pd□Models.UpdbteRootDEecriptReEponse)]〃創(chuàng)遂版布rpcCreateVersioni(Pd.MadelsrCreateVersionRequest)returns(PdtModeIs*CreateVersionResponeg);?〔rpcDeleteVersicni(Pd.hadels.DeleteVersionRequest)returns(PdtMode1&*DeleteVersionRespense)■圖4.15插件服務(wù)通訊契約5系統(tǒng)測(cè)試5.1系統(tǒng)測(cè)試簡(jiǎn)介系統(tǒng)測(cè)試,是為了發(fā)現(xiàn)功能是否正確,是否能運(yùn)行正常,在失敗的時(shí)候是否能給予合適的提示并且系統(tǒng)能夠合理地處理失敗的結(jié)果,并且也為了能發(fā)現(xiàn)潛在的缺陷,在產(chǎn)品上線前進(jìn)行修復(fù)。5.2測(cè)試計(jì)劃5.2.1測(cè)試目標(biāo)對(duì)快速原型工具側(cè)重對(duì)功能模塊進(jìn)行測(cè)試,為找出功能模塊的缺陷,并且解決,保證系統(tǒng)正常運(yùn)行。5.2.2測(cè)試范圍與方法表5.1各模塊的測(cè)試方法測(cè)試模塊功能點(diǎn)測(cè)試類型測(cè)試方法用戶模塊登錄,注冊(cè),修改密碼,修改頭像黑盒測(cè)試判定表法畫布顯示,重繪黑盒測(cè)試功能規(guī)格導(dǎo)出法、因果圖法日志服務(wù)日志保存黑盒測(cè)試功能規(guī)格導(dǎo)出法、因果圖法設(shè)置服務(wù)設(shè)置顯示,設(shè)置更改保存黑盒測(cè)試功能規(guī)格導(dǎo)出法、因果圖法資源服務(wù)資源加載黑盒測(cè)試功能規(guī)格導(dǎo)出法、因果圖法語言服務(wù)字符串獲取黑盒測(cè)試功能規(guī)格導(dǎo)出法、因果圖法工程組成服務(wù)工程合成黑盒測(cè)試功能規(guī)格導(dǎo)出法、因果圖法菜單服務(wù)顯示黑盒測(cè)試功能規(guī)格導(dǎo)出法、因果

圖法工程控制模塊工程創(chuàng)建,在遠(yuǎn)程服務(wù)器創(chuàng)建,在遠(yuǎn)程服務(wù)器刪除,版本創(chuàng)建,刪除,緩存黑盒測(cè)試功能規(guī)格導(dǎo)出法、因果圖法插件模塊插件搜索黑盒測(cè)試功能規(guī)格導(dǎo)出法、因果圖法5.2.3測(cè)試環(huán)境表5.2測(cè)試環(huán)境客戶端硬件CPU:Intel(R)Core(TM)i57200U2.71GHz內(nèi)存:8GB硬盤:128G軟件操作系統(tǒng):Window10x64(1903)運(yùn)行環(huán)境:dotnetcore3.1.201網(wǎng)絡(luò)環(huán)境網(wǎng)絡(luò)類型:局域網(wǎng)5.2.4測(cè)試缺陷說明1.缺陷等級(jí):衡量缺陷對(duì)系統(tǒng)運(yùn)行,功能的提供以及安全性的影響程度,缺陷嚴(yán)重等級(jí)具體如下表所示。表5.3缺陷驗(yàn)證等級(jí)序號(hào)等級(jí)分類標(biāo)準(zhǔn)1微小對(duì)系統(tǒng)運(yùn)行,功能實(shí)現(xiàn)和安全性無太大影響,一般是界面顯示的缺陷,如字體太大或太小等2一般對(duì)系統(tǒng)運(yùn)行有一定的影響,但不影響功能的正常使用,常見在提示表述錯(cuò)誤,界面布局存在冋題等3嚴(yán)重對(duì)系統(tǒng)的主要功能存在一定的影響,功能的結(jié)果與預(yù)期不相

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論