大型软件怎么开发功能模块更方便?

一直在考虑怎么在大型软件开发功能模块更方便,软件用语言C/C++

原开发流程:开发–编译–打开软件–加载数据–触发操作–出问题–回到开发

暂时想到的2个方向

  1. 使用动态dll,功能触发时加载,用完卸载

    • good:开发–编译–触发操作–出问题–回到开发
    • bad :1. 加载失败原因难查 2.卸载失败很可能 3.要死一起死
  2. 内嵌tinycc,软件常用及可能用到api做dllexport给tcc使用,用完delete TCCState

    • good:1.开发–编译–触发操作–出问题–回到开发 2.要死就死tcc
    • bad :1.tcc调用写一堆代码 2.后续代码要重新写入dll中还要测试
    • PS :很适合写业务逻辑及快速demo

不知道朋友们是怎么做的?

瞎说一个:lua? :see_no_evil:

最好量化一下你的“大”到底是多大,才会收到有意义的回复。

嗯嗯,CAD/3D这类的行业用设计软件,工业基础类软件,不过我脑袋里的知识没办法很好的处理你说的量化“大”,一般都将这个归类大型软件,我也就这么归类了

不瞎说,lua试过 :see_no_evil: ,只是这样的话就我维护这个模块了,其他同事对lua不感兴趣 :sob:

这种规模的软件结构设计的关键是“去偶合”,

也就是整个系统需要划分成很多模块组成,划分的原则是模块之间的关联尽可能的小,模块越独立越好。

模块进行分类,类型划分合理的话,分类合理的情况下,只需要定义类型之间的关系,不需要每一个模块都单独处理。

每一个模块的源代码,开发,测试都可以独立进行,出了问题也只影响模块本身,不会牵一发动全身。

现在流行的应该是 wasm :rofl:

用于 C 和 C++ 嵌入的可以选 wamr, WasmEdge

频繁加载卸载用第一种方案显然不可行,对于稳定的插件加载用第一种,比如Office插件 机制。 频繁加载卸载的话用脚本语言可能更合适,比如js,python,lua之类的。CAD之流的似乎两种都有? 回归到问题本身,可能功能模块的规模和稳定性才是考量的核心。

如果必须用c|c++,我觉得应该是用c/c++实现一个脚本语言,然后在用这个脚本语言开发更方便,比如CAD有自己的CADlisp,各种大型软件的脚本语言千奇百怪,有些直接用现成的,但还没有见过没有的

我的想法是简化用户及我自己的开发过程,有的时候脑袋里冒出一些想法,会想着实现出来看看,可能就是3分钟热度的事情,对用户的吸引也是如此,某次的突然深入就可能产生一个忠实用户,所以在规模和稳定性之外进行了便捷性思考

对于我这样做后续能减少很多的思维负担,因为减少了很多动手和反馈之间的时间

1 个赞

嗯,我这边也在看各个的脚本语言,自己实现暂时是不可能的,因为这个是随产品一起到用户手上的,要是稳定性太差了公司能把我开了

关于脚本的考虑,除非公司主体支持使用这一脚本语言,自己使用风险还是很大的,所以我就把范围缩小到现有使用的语言C/C++上了