桌面端软件设计经验总结

软件的基本架构

1、MVC简介

对于工业上的桌面端软件来说,主要的功能就是通过获取用户的操作来处理后台的数据并在界面上进行呈现。对于这种软件需求,最经典的应用就是MVC架构,可以在图1中粗略展示MVC框架的设计思想。

这里写图片描述

这里写图片描述

                                图1、MVC框架


2、实际中需要解决的问题

     软件的设计需求就是实时获取用户的操作,比如查询条件的改变,测量条件的改变,此时我们需要立刻获取用户的输入并实时改变后台的测量方法及界面显示的结果。同时考虑到需求的变动以及界面的实时显示等原因,我们在软件设计之初就要将model-view-controller三者分离开,如果我们仅仅在单个函数中处理一个用户逻辑,不仅无法做到model和view的联动,在代码需要修改或者重构的时候也会有很大的问题,导致一处的小改动造成整个软件的变动,也就是高耦合,低内聚的形式。

     为了解决上述问题,使得软件能及时处理用户界面输入—>后台数据改变—>用户界面变化这一需要,我们便有了MVC框架。MVC将软件的基本结构分为三个部分,即Model数据层,View界面层,两者之间通过controller来连接。当我们的视图部分有了用户请求之后,控制器获取用户的输入信息,经过判断之后决定哪些数据模型需要改变,当数据模型改变之后,会给控制器发出完成数据改变的信号,然后控制器便会选择哪些视图需要更新,视图部分会解释并在界面上显示更新后的数据模型。

这里写图片描述

当我们构建好了模型-视图-控制器之间的逻辑关系,由控制器决定好model与view之间的关联关系之后,我们的重心就重模型与视图之间的连接关系中解放出来,着重于处理数据模型的改动,这样只需要改动模型,相应的视图部分也会发生变化,当数据需要再次显示的时候我们只需要将对应的数据传入controlller即可以实时显示视图更新。


3、软件架构

     由于软件的复杂性,我们可能有多重数据,多种视图需要处理,那么我们就需要将软件的各个部分分割开,每一个部分都是一个单独的小型mvc框架,不同的mvc之间通过controller来进行通信。

  • 数据与界面改动的处理

     我的做法是将所有数据模型的controller抽象化为project,将每个不同的model作为project的属性,不同的model之间可以进行连接,当其中一个model改变时,与其相连接的model也会发生改变,同时每个model由project来更新,project发出改变信号,model也会随着project的更新信号发出更新信号。举一个例子,我们软件需要对不同的测量方法做出不同的数据处理,那么在界面上用户对测量方式做了改变之后,project中对应测量方法的数据会发生改变,实际上通过project来进行测量方法的更新,测量方法这个model会发出changed信号,然后我们将project中该信号绑定到与该model对应的controller,比如Measure_controller中,然后measure_controller会做出相应的改变,并通知其measure_model做出改变,使用不同的测量公式来计算。流程可以简化如下:
Project–>projectItem–>projectProperty

扫描二维码关注公众号,回复: 1047077 查看本文章

测量方法改变(视图中)—>measure_property重新赋值—>实际调用父类item的赋值–>实际调用父类project的赋值–>project更新其子类(字典形式存储)的值,然后依次向下发出changed信号–>与project.measure.changed信号绑定的controller接受到changed信号–>更新measure方法(如果涉及视图变化便将其绑定到相应的视图变化操作中),这样就完成了基本的软件流程,其余部分的设计方法也来源于此。

软件设计的其他部分比如用户设置部分,数据存储与导出部分先填个坑,日后再补…

猜你喜欢

转载自blog.csdn.net/wingwc/article/details/78674263