写在前面
这个内容确实是我有点疏忽了,我以为做算法的同事应该多少对这方面会有点了解的。但是我想了一下我刚毕业的时候,确实对这方面的理解不深,查了很多资料才勉强搞懂什么意思,也是后来随着工程学习的愈加深入,才渐渐了解了在C++开发中动态链接库的重要性及如何编写。
一般在说一个标准时,我喜欢从两个角度出发:为什么,怎么做。
一、为什么
这里问的是为什么要把自己的算法组件打包成C++动态链接库。
事实上,我不仅需要你作为一名开发,写出来的代码需要打包成一个DLL的动态链接库,而不是直接提供工程文件,或者直接提供 .h文件和.cpp文件?其实主要从以下几个角度出发:
-
代码保护:通过提供动态链接库,您可以隐藏算法的源代码和实现细节,从而更好地保护您的知识产权。其他人只能使用动态链接库提供的接口来调用算法,而无法查看或修改算法的实现。
这个对于大伙来说其实不那么重要,因为作为软件开发我不够关心算法是怎么写的,但是这个世界不好说是不是小人多,也许今天你把算法交给他了,明天他就拿到github上开源说是自己写的了。
-
代码封装:动态链接库允许您将算法封装为一个单独的实体,从而提供一个清晰的接口和功能集。其他开发人员可以直接使用库提供的函数,而无需关心算法的内部实现。
这么说吧,前面的开发并不关心你算法代码是怎么实现的,你这样将一坨代码粗暴的插入到软件中是非常不合适的,因为这会导致测试上的拖沓,试想一下,当程序崩溃时,测试员/程序员如果追到你的代码里面去,这时候你说你的代码在本地实现很好啊,这时候你和软件开发双方该如何面对彼此?是不是非常尴尬?因为错误确实是在你的代码中发生的,但是确实是在他的程序里才会发生这种问题,你自己本地运行就不会发生这种问题,这下你们两个人就扯不清了!会严重拖慢测试进度和开发进度,而这样的问题会在你短暂的职业生涯中疯狂地折磨你的精神,直到永远,因为和算法对接的那个软件开发大概率也不会关心算法是怎么写的,他在乎他自己(悲。
-
版本控制:通过提供动态链接库,您可以更轻松地进行版本控制。如果您对算法进行了更新或修复,只需提供更新的动态链接库即可,而不需要重新编译依赖于该算法的其他代码。
试想一下,你现在手上有一个算法Calculation1,你交到软件A的时候是v1.0.1版本,交的是.h和.cpp文件,你交过去之后软件开发要对你的代码做好一番修改(这几乎是必然的)之后才能顺利插入到软件中去。
时过境迁,多年后,你的算法要被另一款软件使用了,而这个软件B的时候可能你的算法已经提供了非常完备的计算方法,计算的能力也获得了巨大进步,已经是v2.14.10版本了,这个时候你再同样的将.h和.cpp文件插入到软件中。
突然,维护A软件的同志惊奇地发现,原来Calculation1算法从一开始就有巨大的问题,是一直依靠内存溢出或者什么莫名其妙的bug才能正常运行的。你非常惊讶,但想了一下自己应届的水平,确实,写出这种代码是人之常情。于是你潇洒的一批把v2.14.10交给了软件开发。
也许是作为一名算法开发完全不需要遵守开闭原则或者其他设计模式
(虽然我建议每一位算法都去看一下,这坨v2.14.10完全用不了,那边需求又来得很急,最终你和开发争不过只能重写Calculation1,你越看这个代码越生气,自己当年怎么就写出坨这么个东西,看了半天,决定重写。但是甲方的催促已经驾到你的脖子上了,你只能在丧钟一般的微信报警中熬夜通宵重写完这个算法,装上软件一编译,满屏幕的依赖错误,输出的结果不符合预期,输入经常会报错。你扶额看着这一摊究极烂摊子。天亮的时候必须给甲方一个答复,而你的答复是... -
跨语言兼容性:动态链接库可以被多种编程语言调用和使用。通过提供动态链接库,您可以使算法在不同的编程语言和平台上可用和可调用。
事实上,我们希望所有的算法都提供统一C接口的动态链接库。因为我们都知道算法是确定的,而语言是不确定的。什么意思呢?就是这个项目部会经历很多东西,也许他会从C#到Qt,再从Qt到C#,再到GO,再到VB,再到Rust,再到Ruby,甚至到前端,到什么乱七八糟的C++ 114514版本,规范和当年的完全不同了————
但是呢?哪怕是核弹轰炸了东京,你的动态链接库从点云中解算出净空的算法仍然是正确的。如果我们说TSD这个软件是一坨屎,那么点云解算算法就是这坨屎圣代上的神圣樱桃,值得永远传承下去,而不是疯狂地重写迭代。
它就永远存在 懂我的意思吗,就算是公司炸了,公司重建了,公司上市了,公司退市了,世界崩塌了,世界重启了,我死了,我出生了,我怀孕了,我堕胎了,我又出生了,如果你写的是C接口的动态链接库,那么它就永远存在.
所以为了大家的心里更健康一点,请写类C接口,哪怕是COM组件呢?
看完以上四点,想必你已经明白为什么要把代码封装成动态链接库了吧?
这既是为了你好,也是为了那个软件开发好。当然了如果你从入职开始就考虑好什么时候跑路,请联系我
标签:int,TSG,代码,DLL,Test,算法,动态链接库,日志 From: https://www.cnblogs.com/Leventure/p/17556274.html