この質問に触発されました サードパーティライブラリを使用する-常にラッパーを使用しますか? 人々がサードパーティライブラリとして実際に何を検討しているのか知りたいと思いました。
PHPの例:
Zendフレームワークを使用してアプリケーションを構築している場合、Zendフレームワークライブラリをサードパーティのコードとして扱う必要がありますか?
C#の例:
デスクトップアプリケーションを構築している場合、すべての.Netクラスをサードパーティのコードとして扱う必要がありますか?
Javaの例:
JDKのすべてのライブラリをサードパーティのライブラリとして扱うべきですか?
ライブラリが安定していて頻繁に変更されない場合は、ラップする必要がないと言う人もいます。ただし、ラップせずにサードパーティのコードに依存するクラスをテストする方法を確認できません。
あなたの例はすべてサードパーティのコードですが、それらのラッパーを書くべきではありません。それらは、安定した十分に計画されたAPIを備えた大規模で成熟したプロジェクトです。
ラッパーの必要性は、コードとライブラリーの間の抽象化レイヤーを提供することです。この抽象化が必要になるのは、ライブラリが特定の作業に適したAPIを提供していないことがわかった場合だけです。次に、ラッパーを作成して独自のコードを簡略化し、API呼び出しが厄介であることを隠すことができます。
依存性注入を使用すると、コードをテストできます。単体テストでは、ライブラリの依存関係をモックオブジェクトと入れ替えることができるため、テスト対象のコードを分離できます。
ライブラリをラップする目的は、次のことを可能にするために、ライブラリへの独自のコードの依存関係を壊すことです。
サードパーティのライブラリとフレームワークを分離することは、変更を分離することのほんの一部です。
私は標準ライブラリのメンバーをサードパーティのコードとして扱いません-それらは結局のところ標準であり、使用しているプラットフォームで利用可能で機能していると合理的に推測できます。
Zendのようなものについては、ラップしないと思います-別のフレームワークを採用した場合は、おそらくプログラムを書き直す必要があります。正直なところ、重大な外部構成の依存関係ではなかったもの、またはその部分をスワップ可能にすることを実際に計画していない場合は、あまりラップしません。
特定のプログラミング言語によって提供されるライブラリは、言語の一部にすぎないと考えます。
それよりも、他のエンティティが提供するすべてのライブラリを、拡張機能またはプログラミング言語自体とは別のツールとして、サードパーティと見なします。
あなたの例を挙げれば、私はZendをサードパーティと考えます。また、コアビジネスロジックがZendに依存しないようにアプリケーションを構築します。
ウィキペディアは サードパーティコンポーネント を次のように定義しています:
コンピュータプログラミングでは、サードパーティソフトウェアコンポーネントは、開発プラットフォームの元のベンダー以外のエンティティによって自由に配布または販売されるように開発された再利用可能なソフトウェアコンポーネントです。
厳密に言えば、あなたが与えたすべての例はサードパーティのコードです。ただし、すべてのサードパーティコードをラップする必要はありません。すべてのサードパーティライブラリをラップする必要があります。フレームワークは、コードの一部となるため、定義によりラップできません。そのため、.NETフレームワークやZendフレームワークではなく、ロギングライブラリをラップします。コードを.NETから実際に分離することはできません。それらは絡み合っています。もちろん、優れたフレームワークにはプログラミング対象のインターフェースがあり、問題をある程度回避することができます。
参照: https://stackoverflow.com/questions/148747/what-is-the-difference-between-a-framework-and-a-library