版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于WPF的快速原型工具的设计及实现摘要快速原型设计工具是指建立在低消耗,快速传播,便于使用等前提下的一款运行在PC(Window/Linux/MacOS)的软件。让软件原型的绘制更加迅速和方便。本设计主要通过分析软件设计流程,提出客户端的功能服务和介绍服务器的通讯契约。客户端服务包含靠边文档服务,画布,对象分析器,日志服务,设置服务,资源服务,工程组成服务,语言服务,菜单服务。服务器包含App登录通信,用户接口通讯,工程接口通讯,插件通讯。此工具服务器架构采用MVC框架,客户端架构采用MVVM框架,并且在.netcore平台进行开发和测试,对功能测试的完成也表明了思路正确,结构合理,达到了预期的目标。关键词:原型设计;WPF;grpc;Acore;1绪论1.1课题背景与研究意义1.1.1课题背景在计算机快速发展的时代,软件的新增随着用户的需求而日益增多,界面开发的成本也占据着软件总成本的很大一部分。所以,在界面开发的时候,需要一款低消耗,便捷而且容易修改的原型设计软件,快速地让设计人员和开发人员共同确定软件界面的大体情况。让界面在开发过程中最低程度的修改,节约开发成本。虽然我国存在很多原型设计软件,但是这些原型软件在项目开发的过程中很多时候都无法贯穿整个开发周期,因此为了让原型的设计与项目开发的结合性更强,一体化的快速原型设计工具是非常迫切的。在最短时间内,完成网页或者有界面的应用的界面和简单交互,让项目都能查看并且使用此原型在了解,使用并反馈的过程中,对不合理或者可优化的UI或者UX进行调整这些情况也是在软件设计开发时候最需要的。而当前国内原型开发工具,拥有不可扩展和难操作,不易分享等缺点。1.1.2研究意义快速原型工具与传统的原型工具区别在于以下几个方面•能快速地搭建UI,解决软件难用的问题•不同设备能通过网络来传播工程,统一工程能拥有多个版本•原型的控件节点能够保存为组件,在下次使用或者以后使用的时候能够即可插入到当前原型中•技术人员能够简单的扩展本工具,能够新增自定义的控件•能把完成的原型导出PSD,PNG,JPG等图像文件1.2课题的可行性分析本节讨论的主要问题工具在技术,经济和操作上设计是否合理和实现是否有困难。1.2.1技术的可行性分析本课题工具要求用户在桌面端系统系统安装使用,该系统开发主要使用的软件有VisualStudio2019MySQL8.0,.netcore3.1,grpc。在开发技术方面,客户端主要是使用.netcore3.1wpf技术,后端使用Acore与grpc通讯协议,所以WebApi可以在其它语言上使用,如java,python等。用户可以在LinuxAMD64,Windows7,8,10x86/x64,MacOSx64安装此应用,安装后此应用默认拥有基本的原型元素。用户在UI(View)上的操作可以传到视图模型(ViewModel),然后再传到模型(Model),然后再传回UI。通过SkiaSharp绘画引擎实时绘制用户当前设计的原型。软件含有对象分析器,能自动分析原型元素的属性然后自动生成属性UI,可以快速建造新的原型元素。同时,通过grpc框架,将应用数据同步到服务器,使工程能共享。1.2.2经济的可行性分析该系统主要使用免费开源的工具和软件,开发成本较低,在完成工具后,用户可以选择单机(不包含工程在线共享),局域网或者是外网等方式部署。所以,此工具在经济上是完全可行的。1.2.3操作可行性分析该工具主要采用C/S架构,需要在客户机上安装,在流行的桌面端系统都能运行,操作方式采用点拖式,用户能很容易的在软件上操作。所以,在操作上是可行的。1.3开发工具及关键技术系统开发平台:以VisualStudio2019作为主要开发平台系统开发运行环境为:数据库服务器:Mysql8.0操作系统:Window10服务器宿主:.netcore3.1即在Window10操作系统下,在VistualStudio2019开发平台上,使用Xaml、C#、proto等开发语言,采用Mysql8.0数据库,可通过运行可执行文件(在不同操作系统,可执行文件不同),启动快速原型工具。2需求分析2.1系统设计目标本工具设计目标包含以下内容界面设计应当美观简洁易用,而且方便用户操作功能模块分割合理,逻辑清晰,操作透明对数据的操作应该简便,数据具有可靠性在默认扩展中,含有系统的基本功能系统运行稳定2.2系统参与者1.原型设计师在工具登录入口填写用户名和密码登入个人后台后可以查看自己已创建的工程,搜索可见的工程,可搜索的工程包含其它用户公开的,自己创建的工程。可以绑定当前工程,创建工程版本,同步当前版本,下载历史版本,删除工程,删除历史版本等操作。2.3系统流程分析本工具实现的流程如下绘制原型:打开软件,系统会自行检查核心文件和加载并初始化所有服务点击菜单的文件-新建,弹出新窗口后,点击选择按钮,创建一个文件作为工程文件,可以点击创建默认工程,也可以选择自定义化工程。在自定义化工程时候,在工程部分选择区域能看到现在可以选择的工程部分,可以右击选用,让此工程部分加入到创建的工程里,并且可以在右方修改工程部分的属性。在主界面,资源管理器,右击某一个文件夹,创建资源,选择场景资源,填入资源名字,点击选择按钮,修改场景资源属性,点击创建右击新建的创建,点击设为当前活动创建在主界面,大纲,展开场景,右击图层,创建容器在主界面,视图工具,点击矩形,右击设计页某个控件,选中目标控件,在画布上拖动绘画出一个默认矩形在主界面,视图工具,点击移动,右击设计页某个控件,选中目标控件,击中某个开始点,在画布上拖动,目标控件也会跟着移动在主界面,属性,右击设计页某个控件,选中目标控件,属性页会出现相应的控件属性,修改某些属性后,控件样式也会随之变化在主界面,大纲,右击某个容器或者控件,复制,右击某个容器,粘贴在主界面,大纲,右击某个容器或者控件,移动此元素-移动到上一层/移动到下一层在主界面,大纲,右击某个容器或者控件,点击制作控件,输入控件名字,点击OK,如果想取消此操作则点击Cancel在主界面,大纲,右击某个容器,添加拷贝控件,选择某个存在的控件点击菜单的文件-保存导出工程,假设已经启动程序了点击菜单的文件-打开,选择某一个工程点击快速操作-导出-Png/Psd/Tiff/Jpeg/pdzip导入工程,假设已经启动程序了点击快速操作-导入,选择一个pkpkg文件,程序会自动加载此工程修改头像进入登录界面,输入用户名和密码,登录到个人后台点击右上方你的名字,点击菜单工程上传头像选择一个图像文件等待修改结果工程管理-从远程服务器创建工程进入登录界面,输入用户名和密码,登录到个人后台点击右上方你的名字,点击菜单工程仓库右击工程显示列表,点击创建工程-公开/非公开,输入创建的工程名字工程管理-查看工程进入登录界面,输入用户名和密码,登录系统点击右上方你的名字,点击菜单工程仓库在搜索框输入关键字点击搜索按钮点击上一页/下一页切换页数工程管理-从远程服务器创建版本进入登录界面,输入用户名和密码,登录系统点击右上方你的名字,点击菜单工程仓库点击菜单-打开,打开某个工程点击右上方你的名字,点击菜单工程仓库 选择一个工程,右击,点击绑定工程-从当前工程
输入版本名字,点击确认按钮,如果想中止创建则点击中止按钮 输入版本描述,如果没有可不输入,如果想中止创建则点击中止按钮等待处理结果,点击好按钮 工程管理-从远程服务器创建版本进入登录界面,输入用户名和密码,登录系统 点击右上方你的名字,点击菜单工程仓库 点击某个工程,右击,点击查看详细 右击某个版本,缓存工程管理-从远程服务器删除工程进入登录界面,输入用户名和密码,登录系统 点击右上方你的名字,点击菜单工程仓库 选择某一工程,右击,点击删除输入工程的全名,点击删除按钮,如果需要中止操作,点击取消按钮 (1)(2)工程管理-从远程服务器删除工程的版本进入登录界面,输入用户名和密码,登录系统(1)(2) (3) 右击某个工程,查看详细(4) 右击某个版本,删除(3) 右击某个工程,查看详细(4) 右击某个版本,删除点击确认按钮,如果想中止操作,点击取消按钮2.4系统用例表2.4.1相关用例参与者相关用例原型设计师进入程序,登录,注册,修改头像,创建远程工程,删除远程工程,创建远程版本,删除远程版本,缓存远程版本,创建本地工程,打开本地工程,保存当前工程,创建资源,创建图层,创建容器,绘制控件,删除控件,修改控件属性,移动控件,制作组件,添加组件,删除图层,删除容器,删除控件,移动控件堆叠位置2.4.1用例分析用例UC1:进入工具主要参与人:原型设计师前置条件:程序运行环境正常插件正常后置条件:程序的服务启动和初始化正常主要成功场景:用户正常启动程序所有服务正常加载完成用户进入到主界面扩展场景:*a.服务启动发生致命错误,弹出提示框Loadfatal!并且程序退出用例UC2:登录主要参与人:原型设计师前置条件:参与者正常启动程序数据库中有此用户的信息参与者联网并且输入了正确的用户名和密码后置条件:系统记录参与者的登录信息主成功场景:进入登录界面输入用户名和密码点击登录按钮提交输入的信息,服务端验证账号信息用户名和密码正确,服务端返回登录凭证扩展场景:*a.参与者没有输入正确的用户名或密码,点击登录,程序提示“登录失败”用例UC2:登录主要参与人:原型设计师前置条件:参与者正常启动程序数据库中有此用户的信息参与者联网并且输入了正确的用户名和密码后置条件:系统记录参与者的登录信息主成功场景:进入登录界面输入用户名和密码点击登录按钮提交输入的信息,服务端验证账号信息用户名和密码正确,服务端返回登录凭证扩展场景:*a,参与者没有输入正确的用户名或密码,点击登录,程序提示“登录失败”用例UC3:上传头像主要参与人:原型设计师前置条件:参与者成功启动程序参与者登入系统后置条件:系统记录参与者的登录信息主成功场景:点击上传头像菜单选择一张图片服务端返回头像切换成功扩展场景:*a.图片被占用,客户端无法被读取,提示“上传图形失败”*b.登录凭证失效,提示“上传图形失败”用例UC4:创建远程过程主要参与人:原型设计师前置条件:参与者正常启动程序参与者成功登入系统后置条件:工程在远程数据库有记录主成功场景:点击工程仓库菜单点击创建工程菜单,选择公开/非公开输入工程名字点击确认按钮扩展场景:*a.工程名字没有输入,程序不继续创建工程*b.用户在输入工程名字的过程中点击取消按钮,程序不继续创建工程用例UC5:删除远程过程主要参与人:原型设计师前置条件:参与者正常启动程序参与者成功登入系统工程在远程数据库有记录后置条件:工程记录在远程数据库中被删除主成功场景:点击工程仓库菜单选择某一工程右击工程并且选择删除输入工程的全名点击确认按钮扩展场景:*a.工程的全名输入与数据库记录不一致,程序不继续删除工程*b.用户在输入工程名字的过程中点击取消按钮,程序不继续删除工程*c,工程的归属者不是当前用户,删除按钮不可见用例UC6:创建远程版本主要参与人:原型设计师前置条件:参与者正常启动程序参与者成功登入系统工程在远程数据库有记录后置条件:工程版本在远程数据库中有记录主成功场景:打开了某一本地工程点击工程仓库菜单选择某一工程右击并且选择绑定工程-从当前工程输入版本名字,点击确认按钮输入版本描述,点击确认按钮扩展场景:*a,在输入版本名字时,不输入并且点击确认按钮,程序不继续创建版本*b,在输入版本名字时,版本名字已存在,提示“版本已存在”*c,在输入版本名字或者输入描述时,参与者点击中止按钮,程序不继续创建版本*d.在向远程服务器提交缩略图时,图片太大,提示“创建失败”*e.参与者没有打开某一本地工程,提示“当前没有打开工程”用例UC7:删除远程版本主要参与人:原型设计师前置条件:参与者正常启动程序参与者成功登入系统工程版本在远程数据库有记录后置条件:工程的版本记录在远程数据库中被删除主成功场景:点击工程仓库菜单选择某一工程右击工程查看详情右击某一版本,点击删除菜单项扩展场景:*a.工程的归属者不是当前用户,删除按钮不可见用例UC8:缓存远程版本主要参与人:原型设计师前置条件:参与者正常启动程序参与者成功登入系统工程版本在远程数据库有记录后置条件:工程的版本缓存到本地文件夹主成功场景:点击工程仓库菜单选择某一工程右击工程查看详情右击某一版本,点击缓存菜单项扩展场景:*a.工程的版本文件不在远程服务器中,提示“缓存失败”用例UC9:创建本地工程主要参与人:原型设计师前置条件:参与者正常启动程序后置条件:工程文件在本地创建主成功场景:点击菜单-文件-新建点击选择按钮,选择在某文件夹存放*.pd文件点击创建默认工程或者是点击自定义化工程,加入若干个工程部分并且配置好工程部分后,点击创建按钮扩展场景:*a.程序无权限访问文件夹,创建失败用例UC10:打开本地工程主要参与人:原型设计师前置条件:参与者正常启动程序后置条件:工程文件在程序中读入主成功场景:点击菜单-文件-打开选择某一*.pd文件扩展场景:*a.工程文件损坏,提示“打开工程失败”用例UC11:保存当前工程主要参与人:原型设计师前置条件:参与者正常启动程序参与者打开了某一工程后置条件:工程文件在成功保存主成功场景:点击菜单-保存扩展场景:*a.参与者没有打开工程,程序不保存工程用例UC12:创建资源主要参与人:原型设计师前置条件:参与者正常启动程序参与者打开了某一工程后置条件:资源成功被创建,并且写入到工程文件夹主成功场景:点击资源管理器页,右击某个文件夹,点击创建资源点击某个资源,输入资源名字,点击选择按钮修改资源属性,点击创建按钮扩展场景: *a,参与者没有打开工程,创建资源菜单不出现 *b.参与者没有输入资源名字,程序不创建资源用例UC13:创建图层主要参与人:原型设计师前置条件:参与者正常启动程序参与者打开了某一工程参与者已设置了某一场景为活动场景后置条件:图层成功地添加到活动场景上主成功场景: 在大纲页,右击场景,点击创建图层菜单项扩展场景:无用例UC14:创建容器主要参与人:原型设计师前置条件:参与者正常启动程序参与者打开了某一工程后置条件:容器创建到某一图层或者容器中主成功场景: 1.在大纲页,右击图层或者容器,点击创建容器菜单项扩展场景: *a.如果创建的节点在图层,并且图层里有内容,提示选中图层存在内容,是否替换为空容器用例UC15:绘制控件主要参与人:原型设计师前置条件:参与者正常启动程序参与者打开了某一工程设置了某一场景作为活动场景 后置条件:控件在画布上某节点上成功添加控件主成功场景:在大纲页,点击某个容器在视图工具项,点击某个绘图工具在设计页,拖出一个控件扩展场景:*a.参与者无选中某一容器,控件不会被创建*b.参与者无选中绘图工具,控件不会被创建用例UC16:删除控件主要参与人:原型设计师前置条件:参与者正常启动程序参与者打开了某一工程设置了某一场景作为活动场景控件已被创建在大纲的某节点上后置条件:控件在节点上被移除主成功场景: 在大纲页,点击某个控件右击点击删除菜单项扩展场景:无用例UC17:修改控件属性主要参与人:原型设计师前置条件:参与者正常启动程序参与者打开了某一工程设置了某一场景作为活动场景参与者创建了某一控件后置条件:控件属性被修改主成功场景:在大纲页,点击某个控件在属性页,修改控件的属性扩展场景:*a.在设计页,右击某一控件,并且选中,属性页也会出现该控件的属性,并且可以修改用例UC18:移动控件主要参与人:原型设计师前置条件:参与者正常启动程序参与者打开了某一工程设置了某一场景作为活动场景参与者创建了某一控件后置条件:控件位置被移动主成功场景: 在大纲页,点击某个控件在视图控制器选中移动在设计页拖动控件扩展场景: *a,在大纲页没有选中控件或者选中了不可移动的控件(如创建,图层),控件不能被移动用例UC19:制作组件主要参与人:原型设计师前置条件:参与者正常启动程序参与者打开了某一工程设置了某一场景作为活动场景参与者创建了若干个容器或控件 后置条件:组件被成功制作并且保存在工程目录中主成功场景: 在大纲页,点击某个控件 右击后点击制作组件菜单项输入组件名字点击确认按钮扩展场景: *a.在输入组件名字的时候,不输入名字,提示“没有输入名字,保存取消” *b.在输入组件名字的时候,点击取消按钮,程序不继续制作组件 *c.参与者点击的控件不可被制作成组件,制作组件的菜单项不可见用例UC20:添加组件主要参与人:原型设计师前置条件:参与者正常启动程序参与者打开了某一工程设置了某一场景作为活动场景参与者创建了若干个容器后置条件:组件被成功添加到容器内主成功场景: 在大纲页,点击某个容器或图层 右击点击添加拷贝组件-点击某个存在的组件扩展场景: *a.组件文件损坏,组件无法加入到容器或图层中 *b.参与者点击的控件不可被添加组件,添加拷贝组件的菜单项不可见用例UC21:删除图层主要参与人:原型设计师前置条件:参与者正常启动程序参与者打开了某一工程设置了某一场景作为活动场景参与者创建了若干个图层后置条件:图层成功在场景中移除主成功场景: 在大纲页,点击某个图层 右击点击删除扩展场景:无用例UC22:删除容器主要参与人:原型设计师前置条件:参与者正常启动程序参与者打开了某一工程设置了某一场景作为活动场景参与者创建了若干个容器后置条件:容器成功在图层中移除主成功场景: 在大纲页,点击某个容器 右击点击删除扩展场景:无用例UC23:删除控件主要参与人:原型设计师前置条件:参与者正常启动程序参与者打开了某一工程设置了某一场景作为活动场景参与者创建了若干个控件后置条件:控件成功在图层或容器中移除主成功场景: 在大纲页,点击某一控件 右击点击删除扩展场景:无用例UC24:移动控件堆叠位置 主要参与人:原型设计师前置条件:参与者正常启动程序参与者打开了某一工程设置了某一场景作为活动场景参与者创建了若干个控件后置条件:控件被成功被移动层叠主成功场景: 在大纲页,点击某一控件 右击点击移动此元素-移动到上一层/移动到下一层扩展场景:*a.控件已在最顶层,控件不会被移动*b.控件已在最底层,控件不会被移动 *c.参与者选中的控件是不可移动的,移动此元素的菜单不可见用例图参见图用例图参见图3.1,包图参见图3.23概要设计3.1系统模块总体设计通过系统的需求以及功能分析,可以把系统分为以下模块客户端服务发现模块服务注册发现模块靠边文档服务画布模块日志服务设置服务资源服务工程组成服务语言服务菜单服务服务器APP登录用户功能模块工程模块插件模块图3.1用例图数据库采用数据库采用Mysql8.0,数据库的架构参见图3.3数据库架构图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系统数据库的设计3.2.1数据库概念结构设计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数据库架构图3.2.2数据库设计数据库设计是软件设计的重要部分,其中的设计可能会影响功能的实现和功能的合理性,也会影响数据的安全,同时,数据库的结构的设计会间接影响功能的最终效果。本系统使用Mysql8.0作为数据库引擎,数据库名称为pddb,共包含7个表,分别为用户表aspnetusers,app表openapps,插件表plug,插件项表plugitem,工程表project,工程版本表projectitemo具体设计为:其中表字段修饰NN为不可空,AI为自增长,UQ为唯一的,PK为主键,FK(表名.字段名)为外键(1)用户表aspnetusers主要存储用户的基本信息包含用户名和密码表3.2用户表aspnetusers名称数据类型修饰注释IdBIGINT(20)NN,AI,PK用户唯一idUserNameVARCHAR(256)规范化的用户名NormalizedUserNameVARCHAR(256)UQ唯一用户名EmailVARCHAR(256)规范化的邮箱NormalizedEmailVARCHAR(256)邮箱EmailConfirmedTINYINT(l)NN是否已经完成邮件认证PasswordHashLONGTEXT密码hashSecurityStampLONGTEXT安全时间戳ConcurrencyStampLONGTEXT并发时间戳PhoneNumberLONGTEXT手机号PhoneNumberConfirmedTINYINT(1)NN是否已经完成手机验证TwoFactorEnabledTINYINT(1)NN双因素验证是否启用LockoutEndDATETIME解锁的结束时间LockoutEnabledTINYINT(1)NN账号是否被锁定AccessFailedCountINT(11)NN登录错误次数portraitVARCHAR(64)头像路径(2)app表openapp主要记录开放式接口的key和secret表3.3app表openapp
名称数据类型修饰注释IdBIGINT(20)NN,AI,PK唯一idcreateTimeBIGINT(20)NN记录创建的时间enableTINYINT(1)NN当前记录是否有效keyVARCHAR(52)NNopenapp的开放idsecretVARCHAR(52)NNopenapp的私钥platformVARCHAR(32)NN所在的平台versionVARCHAR(32)NN版本expireBIGINT(20)有效期userIdBIGINT(20)FK(aspnetusers.Id)openapp持有的用户idTimestampTIMESTAMP(6)时间戳⑶插件表plug记录插件的信息表3.4插件表plug名称数据类型修饰注释IdBIGINT(20)NN,AI,PK唯一idcreateTimeBIGINT(20)NN记录创建的时间enableTINYINT(1)NN当前记录是否有效nameVARCHAR(64)NN,UQ插件的名字descriptVARCHAR(512)插件的描述timestampTIMESTAMP(6)时间戳userIdBIGINT(20)NN创建当前插件的用户id(4)插件项表记录插件版本的表表3.5插件项表plugitem名称数据类型修饰注释IdBIGINT(20)NN,AI,PK唯一idcreateTimeBIGINT(20)NN记录创建的时间enableTINYINT(1)NN当前记录是否有效nameVARCHAR(128)NN当前插件版本的
文件infoLONGTEXTNN当前插件版本的简略信息depsLONGTEXTNN当前插件版本的依赖requirePowersINT(ll)当前版本的要求权限licenseVARCHAR(64)当前版本的协议homeVARCHAR(64)当前版本的home页authorVARCHAR(64)当前版本的作者iconVARCHAR(64)当前版本的图标cultureinfoVARCHAR(8)当前版本的语言versionVARCHAR(32)当前版本的版本descriptVARCHAR(512)当前版本的描述settingCountINT(11)NN当前版本提供设置数serviceRegisterCountINT(11)NN当前版本提供服务数resourceLoaderCountINT(11)NN当前版本提供资源加载器数avalonAnchorCountINT(11)NN当前版本提供avalon罪边文档数avalonDocumentCountINT(11)NN当前版本提供avalon文档数debugWorkingForItemsCountINT(11)NN当前版本提供单项调试器数debugWorkingForItemessCountINT(11)NN当前版本提供多项调试器数themeCountINT(11)NN当前版本提供主题数toolCountINT(11)NN当前版本提供工具数viewCountINT(11)NN当前版本提供视
图数tabCountINT(ll)NN当前版本提供tab页数viewBuilderCountINT(ll)NN当前版本提供视图建造器数languageCountINT(11)NN当前版本提供语言数settingDesignerCountINT(11)NN当前版本提供设置设计器数settingEntityCountINT(11)NN当前版本提供设置实体数menuCountINT(11)NN当前版本提供菜单数projectPartCountINT(11)NN当前版本提供工程部分数projectBuilderCountINT(11)NN当前版本提供工程建造器数resourceCreatorCountINT(11)NN当前版本提供资源创建器数downloadCountINT(11)NN当前版本下载数量timestampTIMESTAMP(6)时间戳savePathVARCHAR(64)版本存放的路径plugIdBIGINT(20)NN,FK(plug.Id)插件id(5)工程表project存储用户创建的工程的信息表3.6工程表project名称数据类型修饰注释IdBIGINT(20)NN,AI,PK唯一idcreateTimeBIGINT(20)NN记录创建的时间enableTINYINT(l)NN当前记录是否有效nameBIGINT(20)NN工程名字publicTINYINT(1)NN工程是否公开UserIdBIGINT(20)NN,FK(aspnetusers.Id)工程创建者id
updateTimeBIGINT(20)工程更新时间TimestampTIMESTAMP(6)时间戳(6)工程项表projectitem存储用户创建的工程版本的信息表3.7工程项表projectitem名称数据类型修饰注释versionVARCHAR(16)NN,PK版本projectIdBIGINT(20)NN,PK属于的工程idcreateTimeBIGINT(20)NN创建的时间enableTINYINT(1)NN当前记录是否有效savePathVARCHAR(128)NN工程保存的路径descriptVARCHAR(512)描述thumbVARCHAR(128)缩略图位置4系统功能设计与实现4.1客户端框架4.1.1服务发现在程序初始化过程中,会进行下面步骤从插件文件夹中寻找可用的dll(这些dll必须存在一个入口点)加载核心框架服务(界面参见图4.1),包含,远程连接服务,靠边文档服务,视图调试器服务,语言服务,日志服务,菜单服务,视图属性分析服务,资源服务,设置服务,源文档服务,Tab页服务,主题服务,视图工具服务,视图服务,工程部件服务加载扩展dll的服务核心加载完成图4.1加载核心服务4.1.2服务注册与发现在程序整个生命过程中,都一直会存在一个Ioc容器,此容器存放着核心服务和插件的服务,服务的生命周期(Lifetime)可分为3个,分别是单一实例生存期服务(Singleton),作用域生存期服务(Scoped),暂时生存期服务(Transient),在服务获取时,会通过作用域不同而生成服务实例,而且会
自动装配。4.1.3靠边文档服务左右两边靠边文档都由服务lAvalonService定义,此服务管理靠边文档的生命状态,活动布局,靠边文档根等,类图参见图4.2,在运行期间,同一靠边文档实例只会同时被激活一个,外部插件可以标记AvalonUnit特性,并实现lAvalonAnchorMetadata接口,程序在服务发现时候会寻找符合条件的类型进行靠边文档注册图4.2靠边文档服务类图资源管理器在工程打开时,此靠边文档会加载工程目录里的文件,如果这些文件如果可以被以某种方式加载时,右击此文件项时,可以弹出对这些文件的操作菜单。视图工具箱在工程载入后,参与者可以从视图工具箱选择合适的工具对活动场景进行特定的操作,如果核心框架提供的移动视图和创建矩形,类图参见图4.3。
TaolContejrt-iTs会泛型类丄展性,Canva?AEventArgsAHandle,OutterConfainerARotateTransform尹TaolContejrt-iTs会泛型类丄展性,Canva?AEventArgsAHandle,OutterConfainerARotateTransform尹ScaleTrantformASenderASkewTiansform夕TranslaieTransform/方法扌GetTfuePcInt&ToolConiextiTsIM自岫Ma控口9 、Fmi/Meffif/fitjSw僉■Abshdtt掛+PtgObject-属陛,icon」万■法AttackDetlack学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 牌叫我国曽® MW绍伽鎏® M叫seOpT^olPackage §奏■+F^ck^Ba&e-:IToolMetadata*j方法7ToolPdiclkdgeToolUnltAttributc 公■*PlugUnitAttribule-方法整ToolUnilAtiribuie(+1殴)图4.3视图工具箱服务类图大纲在工程打开后,存在某一活动场景的时候,此视图会显示当前活动场景的可视树,并且对可视树的元素进行移动,删除等操作。调试在工程打开后,存在某一活动场景的时候,参与者可启用调试靠边文档的可用调试器,并且在在工程打开后,存在某一活动场景的时候,参与者可启用调试靠边文档的可用调试器,并且在画布上可见调试的辅助线。属性在工程打开后,存在某一活动场景的时候,并且已选择某一元素作为当前活动元素时,此视图会分析当前活动元素的可用属性,并且生成相应的操作控件进行展示,参与者可以调整这些控件的值来调整当前活动元素的样式。4.1.4画布画布绘画引擎由Skiasharp提供,此引擎具有跨平台,3D加速绘画等优点,引擎核心是OpenGL,在场景文件加载后(*.scene)会对此文件进行反序列化,生成一个场景对象,而这个场景对象就是在画布所呈现的图像,在绘画引擎启动后,每一帧(默认16.66ms/帧)都会对当前可呈现对象进行重画,每一个画布都会存在一个绘画器,当有服务要求重绘时,下一帧才会要求重绘,而位置计算和大小计算都会在被标记层叠改变后才会在下一帧重新计算。绘画流水线在程序中是抽象的(类图参见图4.4),不依赖绘画引擎,不是平台实现的,所以如果需要切换绘画引擎,如Win2d(一个2d高性能绘画引擎),DirectX(一个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虬气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^%农賦_岫1山睫%UWMd®.海H睥图4.4视图模型类图4.1.5高性能对象分析器在很多模块中,都使用了一个高性能对象分析器来支撑从程序角度的对象到参与者角度的UI界面(类图参见图4.5),并且可以对生成的控件进行单/双向绑定,用户从界面更改的值,通过管道(在
WPF是通过绑定技术)来对绑定对象的值进行更改。此分析器与平台无关,所以它可以用在任意的MSIL环境中使用,如果当前平台没有绑定技术等平台实现的管道技术,分析器提供一个高性能的与平台无关的对象读写器,此读写器是无耦合,开箱即用的对象属性取值,写值辅助器,在使用读写器附加到一个对象时,会在当前平台生成IL代码并进行编译运行,所以此读写器与一般时候对对象属性进行getter和setter的耗时相差不大(性能测试图参见图4.6)olAeAnalR^rJtn-Ktt』方洗lAeAnalR^rJtn-Ktt』方洗AoAnaloier 盪#DefaJt夕SstUngs■J5»拿Analize吼Ar^llaePart吊AaAn*liwr!+1B9關芋■CdnStepin虬CwpAr^llze%Gener日世Aftall型dkl机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會冲I■咆国,施祗成加-方単N«SulkjH4ndl«vmpropwiylkm图4.5对象分析器类图t〔MicrosoftVisualStudio调试控制含直接访问用时:00:00:00,5643613间接访问用时:00:00:017269740TestSet:直接写用时;00:00:00.4698264间接写用时:00:00:01.5914433TestAnalizer;对象拥有属性:10000个分析对象用时(包含生成取值和设值器);00:00^03.5062699图4.6对象分析器性能测试如图可见,对象分析器在读写属性和分析属性时都拥有很大的优势。4.1.6日志服务程序的日志服务基于NLog,通过Ioc容器自动装配,任何服务都允许在Ioc容器获取一个暂时
的日志器,并且在此日志器进行写日志,所写的日志会保存在本地目录。7设置服务设置服务基于Microsoft.Extensions.Configuration,此服务框架允许JSON,INI,XML等设置提供源,这些提供源在运行状态中,可以通过配置器的生成操作,生成一个与格式无关的Key-Value配置集合,因为设置的保存需求,通过对配置器的扩展,可以对配置集合修改的项进行保存,并且在下一次载入中,可以重新加载修改的配置集合,并且通过对象图(SettingMap)通知设置的修改。对象图是一个与平台无关,结合了高性能分析器的对象分析树,在程序运行中,对对象图的更改可通知配置集合的更改,此过程是双向的,类图参见图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学 <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>财尹iouce,ihb>V^Jun•Ea&nuiE财•做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-网EUkkdhuHRdMdKlRwflthangrtSaved如UMThrngN图4.7设置服务类图4.1.8资源服务资源服务提供与平台无关的资源加载操作服务,在程序运行中,此服务可以对平台的文件进行加载W.scene(场景文件),*.view(组件文件)等等,并且此服务允许加入其它文件的加载器,类图参见图4.8。4I—J图4.8资源服务类图4I—J图4.8资源服务类图9工程组成服务此服务提供了一个可扩展,易扩展的工程组成服务,在参与者进行创建工程时,可以选择工程组成服务的某一些工程来自定义工程,类图参见图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工程组成服务类图4.1.10语言服务此服务支撑了整个程序的语言服务,此服务可以通过从任何文件通过某一种方式加载字符串(默认支持从RESX,JSON,XML加载语言),加载过程中,需要提供一个值,指示加载的是什么语言,语言集合最终会编译成一棵树,加速字符串的读取速度。并且语言服务支持从WPF的XAML中进行直接标签使用,在程序运行过程中,会自动从语言服务中加载当前线程语言的合适字符串,类图参见图4.10。/«?n ujffeMe....MSWBH凳■-pFromSrreaiTLangua™OnlnitStrinqs.■iiLangijageWftidta浦李監/«?n ujffeMe....MSWBH凳■-pFromSrreaiTLangua™OnlnitStrinqs.■iiLangijageWftidta浦李監%cullurelnfo,dkporwed%ilrejarnFactory%strings,AutcDi^ponrse>Culturenio争l^lnitEdStringsJ&Stream尹Strings;®Okpose®GeTShlrvgSInilStri咿®rcv心的成鳗lLangSd*inigN&cle*知夕财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争CurrenlLangiiageMedata,this-方注%Build&Corudition由GelStrir*g®FM^k«Package%RaisedetStringRaiseSelCuilluirelnfDff^eCuitur^info图4.10语言服务类图4.1.11菜单服务菜单服务支持动态创建,并且支持层级菜单,扩展菜单,替换菜单等运行中操作,类图参见图4.11。
Aatirui#INRiMMvtebii■I*lik*VWE<2iiJQriAlhrRtwhct-&f*w*wrdR串血Si洲ElWMt..*■c#册m/Mm-f*Zui>•Sc■JVSU-IM♦MfrUMHMSUUAjn^,酶EiJfwWrrM^myMutw^NMruWain.*F-jd MmMhjatu■IDwCwIMinjIcb!MfH«#力心‘me李Aatirui#INRiMMvtebii■I*lik*VWE<2iiJQriAlhrRtwhct-&f*w*wrdR串血Si洲ElWMt..*■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 号 FmiI]•tanpoil\9皿土、I端htfw!拿OpwiI*dUm!*PMIqMj#•^r^iMrii■<;-醉!苦Ctirrlikw,&■心*vXi代曲拿HA«j!AM^TMibM拘NKd.f*P«mri励Rl*JQA*FIW•iVtanjHulil-1Bffi■iMn!、:StoLlu^hi■叩ml-,LinF'flivriChH^fd* *girntf 眼hipr*unu<t1JfjrntUuihHhVcMi图4.11菜单服务类图4.2服务器架构4.2.1APP登录客户端与服务器的通信安全,由一个连接凭证支撑(app_session),此凭证需要通过一次请求来获取,在请求中,需要提供客户端标识(Key),平台号(Platform),版本(Version),时间戳(Timestamp),签名(Sign=MD5(Key+Timestamp+Platform+Version+Secert,32)),如果验证成功,服务器会返回一个12小时有效期的连接凭证,此凭证存在服务器缓存内,一个客户端标识只会有一个连接凭证。在往后的功能接口中,都必须提供此凭证,而且都需要在请求元数据中提供以上信息,来证明请求的合法性,通讯契约参见图4.12。serviceApp(//App登录rpcLogin(Pd,Models-AppLoginR^auest)returnis(Pd,Models,AppLogInResponse):图4.12App登录通讯契约4.2.2用户功能设计客户端可以向服务器发起用户注册请求,在请求过程中,为保证安全性,密码须通过此公式进行加密AES(MD5(pwd,32),Timestamp+Sign),在服务器会通过AES解密来获取hash加密后的密码,如果请求成功,数据库将记录创建的用户信息。可以向服务器发起用户登录请求,在请求中,需按照注册的密码加密方式,对密码进行加密,如果成功登录,服务器会返回一个JWTToken,此凭证在6小时内有效,此值可以从服务器配置中进行调整。JWTToken会保存在服务器内存中,在需要身份验证的请求中,需要带着整个凭证来请求,验证请求者的身份。可以向服务器发起用户修改密码请求,在请求中,旧密码和新密码都需要按照注册的密码加密方式,只有在旧密码验证通过后,才会执行密码修改,在修改密码成功后,登录则需要使用新密码才能成功登录。可以向服务器发起检查凭证的请求,请求须附带须检查的登录凭证,服务器会返回一个值,指示此凭证是否有效。可以向服务器发起更改名字的请求,请求须附带登录凭证和更改的名字,此名字不能为空,服务器会返回一个值,指示更改是否成功。可以向服务器发起上传头像的请求,请求须附带登录凭证和图片的完整路径,图片的完整路径不能为空,并且会通过E-Tag验证,服务器会返回一个值,指示更改是否成功。通讯契约参见图4.13。serviceUser(〃注刖rpeR&gister[Pd.MDd&lSxRe^tsterR&quest}retLrns(Pd..Models.Regiit&rRespcnse)j〃檢测名字是否相冋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);〃检測普*会心是否可用rpcCheckAccessToken(Pd.Models.CheckAccessTokenRequest)returns(Pd-Wodels^CheckAccessTokenResponse)〃上传头像rpeUploadPoi^trait(Pd.Models.UploddPortraitRequest)returns(Pd.Models.Upl-oadPortraitResponse);)图4.13用户服务通讯契约4.2.3工程功能设计客户端可以向服务器发起创建工程的请求,请求时须附带工程的名字等信息,服务器会返回一个值,指示创建是否成功。可以向服务器发起删除工程的请求,请求时须附带工程的Id,服务器会返回一个值,指示创建是否成功。可以向服务器发起获取工程的请求,请求时须附带用户的Id(工程持有者),来搜索工程,服务器会返回一个数组,指示获取的结果。可以向服务器发起搜索工程从关键字请求,请求时须附带搜索关键字来搜索工程,服务器会返回一个数组,并且会返回分页实体,指示获取的结果。可以向服务器发起获取工程的所有版本请求,请求时须附带工程Id,此过程必须是工程持有者或此工程必须是公开的才能被获取,否则返回401状态码。可以向服务器发起删除工程版本的请求,请求时须附带工程Id和版本Id,此过程需要身份验证,并且删除的版本必须归属参数所带工程上,返回一个值,指示删除是否成功。可以向服务器发起更新工程版本的请求,请求时须附带工程Id和创建版本的信息,并且会返回一个值,指示创建是否成功。通讯契约参见图4.14oServicePr^jfrct(〃拽索顼甘从关键字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."创■工建「取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)〃更新匸牌是否發开rp±Upd^tePubl1((Pd^ModelsUpdatePutjlitReque^t)「酔上(Pd.Modele.-L'pdaEePublicReponhe);〃工程的版本是斉存在rpc15Pi-qjectVersioriExi51(Pd..Models.IsProje<tVersianExlstflequest}returns(Pd.Model5..IsPrajectVersionExistResponse);)图4.14工程服务通讯契约4.2.4插件功能设计客户端可以向服务器发起创建插件根部的请求,请求须附带创建的基本信息,服务器会返回一个值,指示是否创建成功。可以向服务器发起删除插件根部的请求,请求须附带插件根部的id,服务器会返回一个值,指示是否删除成功。可以向服务器发起搜索插件的请求,请求须附带搜索关键字,如果成功搜索,服务器会返回一个数组和一个分页实体。可以向服务器发起删除插件版本的请求,请求须附带插件版本的Id,服务器会返回一个值,指示是否删除成功。可以向服务器发起获取插件所有版本的请求,请求须附带插件版本的Id,服务器会返回一个数组代表此插件的版本。可以向服务器发起获取版本原型的请求,请求须附带插件版本的Id,服务器会返回一个JSON信息,指示插件版本的原型。可以向服务器发起创建插件版本的请求,请求须附带插件版本的信息,服务器会返回一个值,指示是否插件成功。通讯契约参见图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);//创建插件的根rpcCreateRoot(Pdb1sB€reatelRootRequest)returns(Pd.ModelstCreateRootResponse)j〃冊除插件的根rpcDeleteRoot(Pd^odelE.D-eLetelRootRequest)returns(PdBPtadeIs.DeleteRootResponse)j〃更新插件根的描雄rpcUpdateRootDescript(PdBMode1e,..UpdateRootDescriptRequee±)returnE(Pd□Models.UpdbteRootDEecriptReEponse)]〃创遂版布rpcCreateVersioni(Pd.MadelsrCreateVersionRequest)returns(PdtModeIs*CreateVersionResponeg);•〔rpcDeleteVersicni(Pd.hadels.DeleteVersionRequest)returns(PdtMode1&*DeleteVersionRespense)■图4.15插件服务通讯契约5系统测试5.1系统测试简介系统测试,是为了发现功能是否正确,是否能运行正常,在失败的时候是否能给予合适的提示并且系统能够合理地处理失败的结果,并且也为了能发现潜在的缺陷,在产品上线前进行修复。5.2测试计划5.2.1测试目标对快速原型工具侧重对功能模块进行测试,为找出功能模块的缺陷,并且解决,保证系统正常运行。5.2.2测试范围与方法表5.1各模块的测试方法测试模块功能点测试类型测试方法用户模块登录,注册,修改密码,修改头像黑盒测试判定表法画布显示,重绘黑盒测试功能规格导出法、因果图法日志服务日志保存黑盒测试功能规格导出法、因果图法设置服务设置显示,设置更改保存黑盒测试功能规格导出法、因果图法资源服务资源加载黑盒测试功能规格导出法、因果图法语言服务字符串获取黑盒测试功能规格导出法、因果图法工程组成服务工程合成黑盒测试功能规格导出法、因果图法菜单服务显示黑盒测试功能规格导出法、因果
图法工程控制模块工程创建,在远程服务器创建,在远程服务器删除,版本创建,删除,缓存黑盒测试功能规格导出法、因果图法插件模块插件搜索黑盒测试功能规格导出法、因果图法5.2.3测试环境表5.2测试环境客户端硬件CPU:Intel(R)Core(TM)i57200U2.71GHz内存:8GB硬盘:128G软件操作系统:Window10x64(1903)运行环境:dotnetcore3.1.201网络环境网络类型:局域网5.2.4测试缺陷说明1.缺陷等级:衡量缺陷对系统运行,功能的提供以及安全性的影响程度,缺陷严重等级具体如下表所示。表5.3缺陷验证等级序号等级分类标准1微小对系统运行,功能实现和安全性无太大影响,一般是界面显示的缺陷,如字体太大或太小等2一般对系统运行有一定的影响,但不影响功能的正常使用,常见在提示表述错误,界面布局存在冋题等3严重对系统的主要功能存在一定的影响,功能的结果与预期不相
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度智能制造生产线建设与技术引进合同
- 2024年度建筑施工合同:某房地产公司与施工方关于建筑工程的协议
- 蛋糕裱花嘴市场需求与消费特点分析
- 2024年度版权保护合同协议书
- 2024年度版权转让合同转让的权利和义务
- 2024年度技术服务合同:某互联网企业与技术服务提供商之间的技术支持约定
- 诊断用放射性药物制剂市场发展预测和趋势分析
- 2024年度农产品电商平台建设与推广合同
- 2024年度厕所改造工程质量检测与评估合同
- 2024年度建筑工程项目管理与质量保证合同
- 2024-2030年中国浮法玻璃行业发展前景与投资动态分析报告
- 2024-2030年中国智能建筑行业发展分析及投资经营模式研究报告
- 北京市丰台区怡海中学2024-2025学年高三上学期11月期中英语试题(含解析)
- 慢性肾衰竭病人的护理查房
- 电子商务运营流程详解作业指导书
- 2024年部编版九年级语文上册电子课本(高清版)
- 2024年江西省高考地理真题(原卷版)
- 2024年自考《14269数字影像设计与制作》考试复习题库(含答案)
- 中职兽药与药理课件
- 2024年新版全员消防安全知识培训
- ω-3脂肪酸处方药物在老年疾病中的应用专家共识(2024版)解读
评论
0/150
提交评论