My answer to this question will be no. But my colleagues do not agree.
We restore our product and make many critical decisions that need to be made in the short term.
While doing some of my own work, I noticed that we have some internal C ++ classes for abstracting some of the POSIX APIs (threads, mutexes, semaphores, and rw locks) and other utility classes. Please note that these classes are basic and have not been ported from Linux (portability is a factor in rebuilding.) We also use POCO C ++ libraries.
I brought this to the attention of my colleagues and suggested that we cut back on our internal activities in favor of their POCO equivalents. I want to make full use of the library that we already use. They suggested that we implement our own classes using POCO and, if necessary, additional abstract POCO classes so as not to depend on any particular C ++ library (referring to future unknowns - what if we want to use another lib / framework library, for example QT or boost, what if the one we choose turns out to be bad, or the development becomes inactive, etc.)
They also do not want to reorganize obsolete code, and abstracting parts of POCO with our own classes, we can implement additional functionality (classic OOP.) I can appreciate both of these arguments. However, I argue that if we do the transcoding, we must go big or go home. Now the time has come for refactoring, and it really should not be so bad, especially given the similarities between our classes and those in POCO (threads, etc.). I don’t know what to say on the second question - should I use only extended classes where functionality is needed?
My colleagues also don't want to clutter the POCO namespace everywhere. I maintain that we must choose a library / framework / toolkit and stick to it. Make full use of its capabilities. Is this not a typical practice? The only project I've seen that abstracts the whole structure is Freeswitch (which provides its own interface for APR.)
One of the suggestions is that the API that we provide to each other and potential customers should be free of POCO, but it will be present in the implementation (which makes sense.)
None of us really have experience in such design decisions, and it shows in the current product. When I was young, I have some kind of intuition that brought me here, but also no practical experience. I really want to avoid bad solutions to problems that have already been resolved.
I think my question boils down to the following: when creating a product, we must: a) choose the dominant structure on which most of our code is based, and b) expect the structure to be closely related to the product? Isn't that the point of the frame? (Are frameworks or libraries more suitable for POCO?)