これは非常に簡単で一般的なシナリオです。参照GoFパターンアダプタ、抽象ファクトリおよびプロキシ
[EDIT:ソリューションを説明するのを助けるために多くのコードを追加しました]
あなたがあなた自身のAPI(または抽象インタフェース)を定義する必要があります任意のサードパーティのAPIをアプリケーションに提供する必要がある機能を表しています。
IPancakeMaker
{
Pancake MakePancake(decimal radius);
}
そして、そのインターフェイスを実装し、現在のサードパーティのAPIに依存プロバイダを書く...
WalmartPancakeMaker : IPancakeMaker
{
Walmart3rdPartyAPI _w3paPancakeMaker = new Walmart3rdPartyAPI(string apiKey);
// ... set 3rd party settings, defaults, etc
// Implement IPancakeMaker
public Pancake MakePankcake(decimal radius)
{
Walmart3rdPartyPancakeEntity thirdPartyPancake = _w3paPancakeMaker.BakeMeACakeJustAsFastAsYouCan(radius);
return this.ConvertToPancakeInMyDomain(thirdPartyPancake);
}
}
は、プロバイダとの相互作用を制御するために、サービスクラス(またはいくつかの他のオーケストレーション)を作成し、
public class MakePancakesService
{
IPancakeMaker _pancakeMaker = null;
// Constructor takes the concrete Provider of IPancakeMaker
// Your calling code is not aware of the actual underlying API
public MakePancakesService(IPancakeMaker pancakeMaker)
{
_pancakeMaker = pancakeMaker;
}
}
は、UnityまたはのStructureMapとして人気のDIフレームワークを使用して...プロバイダへの密結合を避けるために、依存性の注入を使用しています。
http://unity.codeplex.com/
http://structuremap.net/structuremap/
あなたが今使っている方法を提供し、抽象的にしたいか、これは抽象的に試みをisalreadyましたか? – sll