サードパーティのコードとは何ですか?


15

この質問に触発されたサードパーティライブラリの使用-常にラッパーを使用しますか? 人々が実際にサードパーティのライブラリと見なしているものを知りたかった。

PHPの例:
Zendフレームワークを使用してアプリケーションを構築している場合、Zendフレームワークライブラリをサードパーティのコードとして扱う必要がありますか?

C#の例:
デスクトップアプリケーションを構築している場合、すべての.Netクラスをサードパーティのコードとして扱う必要がありますか?

Javaの例:
JDKのすべてのライブラリをサードパーティライブラリとして扱う必要がありますか?

一部の人々は、ライブラリが安定していて頻繁に変更されない場合、それをラップする必要はないと言います。ただし、サードパーティのコードに依存するクラスをラップせずにテストする方法はわかりません。


8
ダウン投票者はその理由を説明できますか?
松o

サードパーティのソフトウェアについて聞いたことがありますが、サードパーティのコードについては聞いていません。ほとんどのサードパーティはソースコードを提供しません。
Tulainsコルドバ

回答:


18

あなたの例はすべてサードパーティのコードですが、それらのラッパーを書くべきではありません。これらは、安定した、よく計画されたAPIを備えた大規模で成熟したプロジェクトです。

ラッパーの必要性は、コードとライブラリの間に抽象レイヤーを提供することです。この抽象化が必要なのは、ライブラリが実行している特定のことに対して優れたAPIを提供していないことを発見したときだけです。次に、ラッパーを作成して独自のコードを簡素化し、API呼び出しが厄介であるという事実を隠すことができます。

依存性注入を使用する場合、コードはテスト可能になります。ユニットテストでは、ライブラリの依存関係をモックオブジェクトと入れ替えることができ、テスト対象のコードを分離できます。


+1は、ラッパーまたはファサードが必要な場合を説明するためのものです。
ジョシュアドレイク

答えてくれましたが、ユニットテストに関する最後の段落については、ライブラリフレームワークに直接依存するクラスをユニットテストしようとしているこの質問をご覧いただけますか?
松o

@Songo:テスト戦略は、テスト対象のオブジェクトにZend_Mail渡すモックを作成することですLogger。PHPはダックタイピングをサポートしていませんか?もしそうなら、モックオブジェクトを作成するのは簡単ではないでしょうか...?私は実際にはPHPを知りませんが、PHPモック作成ライブラリの例を見て、通常どのように行われるかを確認できます。アヒルのタイピングをサポートしていない言語ではZend_Mail、インターフェイスに変更し、インターフェイスを実装し、Zend_Mailすべての呼び出しを継承または委任する薄いラッパーを作成する必要があると思います。
M.ダドリー

@emddudleyもそうですが、アヒルのタイピングをサポートしていない他の言語の問題に対するより一般的な解決策を探していました。実際にZend_Mailは、ラップするソリューションが最初に考えられましたが、編集する前の元の投稿でわかるように、それを実装するインターフェイスとラッパーを使用しました。ただし、ラッパーの唯一の目的は、そのインターフェイスをモックできるようにすることです。それはカモタイピングをサポートしていない言語では一般的ですか?ラッパーを無限に構築するということですか?
松o

@Songo:非常に言語やライブラリ固有のものだと思うので、プラットフォームがサポートするものなら何でもやらなければなりません。時々、ラッパーの作成にこだわる場合があります。依存性注入とオブジェクトのモックはかなり最近の開発(2004年?)であるため、すべての言語とライブラリがそれらを十分にサポートしているわけではありません。探している「一般的なソリューション」は単なる考え方です。疎結合と効果的な単体テストのために、どのようにコードを設計できますか?
M.ダドリー

6

ライブラリをラップする目的は、次のことを可能にするために、そのライブラリに対する独自のコードの依存関係を解消することです。

  • 単体テスト-コードをテストできる必要があります。ライブラリでクラスのモックやテストに必要な応答を強制できない場合は、そのライブラリをラップする必要があります。これは明らかな問題であり、おそらくあなたが疑問に思っているケースではありません。
  • 実装の変更-コードの作成者は、今後の変更の可能性と、変更の可能性と比較した場合の準備にかかる費用を理解する必要があります。.NETからJVMに切り替えることはできますか?それは難しく、ありそうもないことです。ただし、将来的にはUIテクノロジまたはXMLエンジンを変更する可能性が非常に高くなります。

サードパーティのライブラリとフレームワークを分離することは、変更を分離することのほんの一部です。


単体テストに関する非常に良い点。アプリケーションを単体テストできるようにするために常にラップするというわけではありませんが、必要に応じて依存関係を切り離すのに適した戦略です。
セルヒオアコスタ

2

私は標準ライブラリのメンバーをサードパーティのコードとして扱いません。結局、それらは標準であり、使用しているプラ​​ットフォームで利用可能で機能していると合理的に推測できます。

Zendのようなものについては、それをラップしないと思います。別のフレームワークを使用する場合は、おそらくプログラムを書き直す必要があります。正直に言うと、深刻な外部構成依存性ではなかった場合や、その部分をスワップ可能にすることを実際に計画していなかった場合は、あまりラップしません。


2

特定のプログラミング言語によって提供されるライブラリを、その言語の一部と見なします。

よりも、サードパーティ、拡張機能として他のエンティティによって提供されるすべてのライブラリ、またはプログラミング言語自体とは別のツールを検討します。

あなたの例を挙げると、私はZendを第三者と考えています。また、コアビジネスロジックがZendに依存しないようにアプリケーションを構築します。

ウィキペディアでは、サードパーティのコンポーネントを次のように定義しています:

コンピュータプログラミングでは、サードパーティのソフトウェアコンポーネントは、開発プラットフォームの元のベンダー以外のエンティティによって自由に配布または販売されるように開発された再利用可能なソフトウェアコンポーネントです。


1

厳密な意味では、あなたが与えたすべての例はサードパーティのコードです。ただし、すべてのサードパーティコードをラップする必要はありません。すべてのサードパーティのライブラリをラップする必要があります。フレームワークは、コードの一部になっているため、定義上、ラップできません。そのため、ロギングライブラリをラップしますが、.NETフレームワークやZendフレームワークはラップしません。コードを.NETから実際に分離することはできません。それらは絡み合っています。もちろん、優れたフレームワークにはプログラミングの対象となるインターフェースがあり、ある程度問題を回避することができます。

参照:https : //stackoverflow.com/questions/148747/what-is-the-difference-between-a-framework-and-a-library

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.