私のライブラリには、インターフェイス (カメラを表す) といくつかの派生クラスが含まれています。
各派生クラスは特定のハードウェアに実装されるため、各派生クラスは外部ベンダー ライブラリに依存します。
各派生クラスは静的ライブラリであり、そのライブラリの依存関係をリンクします
Factory
メソッドが 1つある という名前のクラスを 1 つだけ提供します。
ICamera* create(const std::string& type)
ファクトリはすべての派生クラスを #include してリンクし、ライブラリ ユーザーは派生 impl を認識しません。
create()
素朴に実装されています:if (type == "a") return new CameraA();
if (type == "b") return new CameraB();
...
基本的に、必要なすべての依存関係を含む肥大化した Factory.lib が 1 つあり、ライブラリ ユーザーは Factory.lib にリンクするだけで任意のカメラ impl を作成できます。
質問
- Factory.lib にリンクすると、アプリケーションの実行時にすべてのベンダーのすべての dll が必要になります。理想的には、使用している特定のカメラの dll のみが必要になることを望みます。これを達成する方法はありますか?
- それぞれの派生物を lib ではなく dll としてコンパイルすることを検討しています。現在、Factory.lib は肥大化しておらず、すべてのカメラ固有の依存関係は派生した各 dll にあります。#1 を解決しない場合
li
、これはあまり役に立ちません。Factory.lib とベンダーの dll に加えて、すべての派生 dll が必要になるからです。 - Creator クラス (またはメソッド) を実装するより良い方法はありますか? 私の派生クラスは 5 ~ 6 と限られており、頻繁に成長することはありません。
- 依存関係を最小限に抑え、設計を改善するためのその他のヒントは大歓迎です