3

APIを提供しているサードパーティ製品を使用しています。このAPIは、基本クラスの実装を作成し、app.configで使用する実装を示すことで機能します。

これに伴う問題は、このサードパーティアプリケーションに複数のプロジェクトが含まれる可能性があることです。私がやりたいのは、基本クラスを実装するラッパークラスを作成することです。これにより、パラメーターが調べられ、構成が調べられて、使用されているプロジェクトに応じて、処理を渡す他のクラスが決定されます。このようにして、既存のコードを変更せずに、将来のプロジェクトをシステムに追加できます。

public class MyImplementation : ThirdPartyBaseClass
{
    public override OnLoad(ThirdPartyType data)
    {
        //do stuff
    }

    public override Process(ThirdPartyType data)
    {
        //do stuff
    }
}

オーバーライドできるメソッドは約15あります。メソッドをオーバーライドしないと何も起こらないため、基本クラスのメソッドは空のように見えます。したがって、このプロジェクトで使用する必要のあるタイプが一部またはすべてを実装しない可能性がある状況を処理できるように、ラッパーが必要になります。メソッド。

この状況に適したデザインパターンを知っている人はいますか?

4

3 に答える 3

2

Robertがコメントで述べたように、AbstractFactoryはこれに適しているようです。これに関する詳細については、このwikiリンクとこのdofactoryリンクを確認してください。

より具体的な対応については、いくつか疑問があります。サードパーティのAPIから取得した基本クラスのオブジェクトがあります。さて、このツールで複数のプロジェクトを持つことが可能であると言うとき、私はあなたが定義した複数の「プロジェクト」クラスを作成するためにこの基本クラスを使用する必要があることを意味すると思いますか?

次に、ラッパークラスはインターフェイスのオブジェクトタイプを持つことができますIProject。これには、とのようなすべての定義が含まれている必要がOnLoadありProcessます。各タイプのプロジェクトには具体的なクラスがあり、プロジェクトのタイプに応じて最終的な実装が行われます。

これがあなたに方向性を与えるのに役立つことを願っています!

于 2012-09-06T11:34:56.857 に答える
0

これは、優れたDIコンテナ(Autofacなど)または貧乏人のDIを使用して実装するのはかなり簡単だと思います。選択した基準に基づいて実行時に提供するサービスを選択し、コンストラクターインジェクションを介してサードパーティAPIクラスを実装するための具体的な実装として提供できます。

于 2012-09-06T00:43:38.303 に答える
0

デコレータパターンは、 AbstractFactoryパターンとともにここで役立つ場合があります。app.config(現在の構成に応じて)具象ファクトリを使用してデコレータのを取得するデコレータ(で構成する実装)をお勧めしますinner

一度に複数の実装を使用したい場合は、複合パターンを使用して、呼び出しを1つ以上に委任することも考えられますinner

于 2012-09-06T13:34:39.123 に答える