私はこのデザインの質問に対するきちんとした答えを探していましたが、成功しませんでした。「.NETFrameworkの設計ガイドライン」にも「C#プログラミングガイドライン」にもヘルプが見つかりませんでした。基本的に、パターンをAPIとして公開して、ユーザーが次のようにアルゴリズムを定義してフレームワークに統合できるようにする必要があります。
1)
// This what I provide
public abstract class AbstractDoSomething{
public abstract SomeThing DoSomething();
}
ユーザーはこの抽象クラスを実装する必要があり、DoSomething
メソッドを実装する必要があります(フレームワーク内から呼び出して使用できます)
2)
これは、デリゲートを使用することでも達成できることがわかりました。
public sealed class DoSomething{
public String Id;
Func<SomeThing> DoSomething;
}
この場合、ユーザーは次のDoSomething
方法でのみクラスを使用できます。
DoSomething do = new DoSomething()
{
Id="ThisIsMyID",
DoSomething = (() => new Something())
}
質問
これらの2つのオプションのどちらが、APIとして公開するのが簡単で、使いやすく、最も重要なこととして理解できるのに最適ですか?
編集
1の場合:登録はこのように行われます(MyDoSomething
拡張すると仮定しますAbstractDoSomething
:
MyFramework.AddDoSomething("DoSomethingIdentifier", new MyDoSomething());
2の場合:登録は次のように行われます。
MyFramework.AddDoSomething(new DoSomething());