我对这个问题的回答是“不”。但我的同事不同意。
我们正在重建我们的产品,并在短期内做出许多关键决定。
在做我自己的一些工作时,我注意到我们有一些内部 C++ 类来抽象一些 POSIX API(线程、互斥体、信号量和 rw 锁)和其他实用程序类。请注意,这些类是基本类,尚未从 Linux 移植(可移植性是重建的一个因素。)我们也在使用 POCO C++ 库。
我提请我的同事注意这一点,并建议我们放弃我们的内部课程,转而使用他们的 POCO 同等课程。我想充分利用我们已经在使用的库。他们建议我们应该使用 POCO 实现我们的内部类,并根据需要进一步抽象额外的 POCO 类,以免依赖于任何特定的 C++ 库(引用未来的未知数——如果我们想使用不同的库/框架,比如QT 或 boost,如果我们选择的那个结果不好或开发变得不活跃,等等)
他们也不想重构遗留代码,通过使用我们自己的类抽象 POCO 的部分,我们可以实现额外的功能(经典 OOP)。这两个论点我都可以理解。但是,我认为如果我们要重新编码,我们应该做大,或者回家。现在是重构的时候了,它真的不应该那么糟糕,特别是考虑到我们的类和 POCO 中的类(线程等)之间的相似性。关于第二点我不知道该说什么 - 我们应该只使用需要功能的扩展类?
我的同事也不想到处乱扔 POCO 命名空间。我认为我们应该选择一个库/框架/工具包,并坚持下去。充分利用其功能。这不是典型的做法吗?我见过的唯一一个抽象整个框架的项目是 Freeswitch(它提供了自己的 APR 接口。)
一个建议是,我们向彼此和潜在客户公开的 API 应该没有 POCO,但它会出现在实现中(这是有道理的。)
我们没有人真正有过此类设计决策的经验,这在当前产品中有所体现。从小就在这方面,我有一些直觉把我带到这里,但也没有实践经验。我真的想避免对已经解决的问题的糟糕解决方案。
我想我的问题归结为:在构建产品时,我们是否应该 a) 选择一个占主导地位的框架作为我们大部分代码的基础,并且 b) 期望该框架与产品紧密耦合?这不是框架的重点吗?(框架或库更适合 POCO 吗?)