【厚积薄发系列】C++项目总结3—定制版本架构设计与实现

需求背景:
具体项目名就不说了,主要是一个施工现场的三维布置类软件,第一个版本主要是大而全包含了施工场地常见的三维模型,能满足大多数施工单位的三维设计需求。但是不同施工单位对某些模型定制化的需求,需要快速响应不同施工企业对该软件的需求。


设计与实现:

以前的版本是基于传统的单体架构的软件,好多模块都耦合在一个项目中。

为了实现不同定制版本的快速开发,主要采用了组件化架构的思想主要点:

1.已有的基础版本的模块划分和解耦。

2.定制版本动态加载和组件化可配置的思想。

3.基础代码(基础版本)+拓展代码(定制版本)。

4.封装变化,外观模式提供统一的访问接口。

基本架构图如下:


基本流程:

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


关键技术点:

1.模块解耦,根据高耦合低内聚的思想,把不同功能特点划分成多个不同的子项目,如基础三维模型、基础命令、基础合法性检查等等。每个独立的模块是一个子项目采用dll的方式管理起来。

2.定制版本内容采用组件化的思想,也是独立的dll,采用配置文件控制对应的定制版本动态加载,外观模式封装成统一的访问接口,内部实现判断,用户无需感知。

3.XML配置定制化的三维模型类,以及配置基础构件中差异化参数化属性等等。

4.C++反射机制实现模型类动态初始化,根据XML读取定制版本的模型字符串类名动态创建模型对象。(备注:JAVA有成熟的反射机制,而C++反射机制需要自己实现,后续出一篇文章专门细说)


总结与反思:

整个过程软件的架构由传统的单体架构转向了组件化架构,传统的单体架构不仅模块划分不清而且严重耦合,导致系统难于维护和测试,单个功能的修改需要导致整个项目的重新编译和测试。转向组件化架构后不仅使得项目中模块的划分更趋于合理层次更加清晰,使得定制版本和基础版本很好的解耦了,便于多个不同定制版本的同时并行开发与发布,也便于新入组的开发更快更好的理解整个项目,也同时减少了测试的负担,因为在基础版本稳定的基础上,定制版本的拓展代码跟基础代码已经解耦,对基础版本的稳定性影响极小。可配置的思想优于硬编码,提高了软件的灵活性。

猜你喜欢

转载自blog.csdn.net/lujiang0120/article/details/79451066