この質問に対する私の答えは「いいえ」です。しかし、私の同僚は同意しません。
私たちは製品を再構築しており、近いうちに多くの重要な決定を下す必要があります。
私自身の作業のいくつかを行っているときに、POSIX API (スレッド、ミューテックス、セマフォ、および rw ロック) およびその他のユーティリティ クラスの一部を抽象化するために、いくつかの社内 C++ クラスがあることに気付きました。これらのクラスは基本的なものであり、Linux から移植されていないことに注意してください (移植性は再構築の要因です)。POCO C++ ライブラリも使用しています。
私はこれを同僚に知らせ、POCO に相当するクラスを優先して社内クラスを捨てることを提案しました。すでに使用しているライブラリを最大限に活用したい。彼らは、特定の C++ ライブラリに依存しないように、POCO を使用して社内クラスを実装し、必要に応じて追加の POCO クラスをさらに抽象化する必要があることを提案しました (将来の未知数を引用して、次のような別のライブラリ/フレームワークを使用したい場合はどうでしょうか)。 QTかBoostか、選んだものがダメだったり開発が不活発になったりしたらどうしよう…)
また、レガシー コードのリファクタリングも望んでおらず、独自のクラスで POCO の一部を抽象化することで、追加機能 (従来の OOP) を実装できます。これらの議論はどちらも高く評価できます。ただし、再コード化を行う場合は、大きくするか、家に帰る必要があると私は主張します。今がリファクタリングの時であり、特に私たちのクラスと POCO のクラス (スレッドなど) との類似性を考えると、それほど悪くはないはずです。機能が必要な拡張クラス?
私の同僚も、POCO 名前空間をいたるところに散らかしたくありません。ライブラリ/フレームワーク/ツールキットを選択し、それに固執する必要があると私は主張します。その機能を十分に活用してください。これは典型的なやり方ではないでしょうか?フレームワーク全体を抽象化する唯一のプロジェクトは、Freeswitch (APR への独自のインターフェイスを提供します) です。
1 つの提案は、私たちがお互いに公開する API、および潜在的な顧客に POCO を含めないようにすることですが、実装には存在します (これは理にかなっています)。
私たちの誰も、この種の設計上の決定を実際に経験したことはなく、それが現在の製品に現れています。幼い頃からこの仕事に携わってきたので、ここまで来るに至った直感はありますが、実践的な経験もありません。すでに解決された問題の貧弱な解決策は本当に避けたいです。
私の質問は次のようなものだと思います: 製品を構築するとき、a) ほとんどのコードのベースとなる主要なフレームワークを選択し、b) そのフレームワークが製品と密接に結合されていることを期待する必要がありますか? それがフレームワークのポイントではないでしょうか。(フレームワークとライブラリのどちらが POCO に適していますか?)