在传统行业做开发有一些年了,也经手了一些项目,从刚开始的打下手到后来的主程,有诸多总结与感慨,这里我们就聊聊如何做好一个桌面客户端。
都说软件开发没有银弹,但对于传统行业的桌面客户端来讲,有些事情其实在我们接手一个软件之前就可以做好。
工程文件不是万能的,但没有是万万不能的
如果做一个桌面客户端软件没有工程文件,那简直太low了。当然这个工程文件也分好多种,简单点的就是使用配置文件ini,直接放到用户的目录下,中等一点的话就使用sqlite,如果想让用户创建工程文件就把sqlite包装一下,高级一点的就自己定义工程文件的格式,不过不要加载工程的时候直接把整个文件都读取,太损耗性能,尽量做一个索引表。
我这里还是推荐使用sqlite,适用于绝大部分没有图片和音频的场景,使用也非常方便。
每个程序都会有一个设置界面
写了那么多年的软件,每个软件都会有设置界面,所以我们可以把设置功能单独拎出来,先不定义具体的设置属性,可以先定义好设置界面的一些操作。例如设置里的信息都是需要保存的,所以我们要将设置的对象信息进行持久化存储,其次用户在设置完属性后,主界面需要针对当前配置做出响应,所以我们还要有一个事件注册和回调系统,或者直接做一个状态机。
先考虑dock类型界面,再考虑其他
其实现在大部分的桌面客户端,基本都采用dock类型的设计方式,什么是dock,参考下图。
这是三维编辑器blender的主界面,我们可以发现,中间界面显示信息主体,下方和右侧分别是时间轴编辑器,对象编辑器和属性编辑器,并且每个界面都可以拖动和调整大小,这就是dock类型的界面,可提供给用户自定义界面布局的功能。
说实在,dock布局加属性编辑器加对象编辑器可以解决绝大部分桌面客户端的设计需求,你可以理解为这是桌面客户端中万能钥匙,所以有一个好的对象编辑器和属性编辑器是桌面客户端开发的重点。
界面线程只做界面
这句话重点其实不在于这句话本身,而是在这句话之外。例如开发过程中我们一般都会遇到IO操作,这时如果将IO操作放到了主线程,很容易让界面进入到卡死状态,所以我们必须要把IO操作放到其他线程,这样才能保证用户始终流畅的使用我们的软件。
总结
其实如果把上述几件事情做好,那我们在桌面客户端开发中,基本不会遇到特别棘手的问题,当然要做好这几件事情还是挺难的,需要我们不断地去思考和尝试。