我一直在寻找这个设计问题的简洁答案,但没有成功。我在“.NET Framework 设计指南”和“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())
}
问题
这两个选项中的哪一个最适合作为 API 公开的简单、可用且最重要的是可理解的?
编辑
如果是1:注册是以这种方式完成的(假设MyDoSomething
extends AbstractDoSomething
:
MyFramework.AddDoSomething("DoSomethingIdentifier", new MyDoSomething());
如果是2:注册是这样完成的:
MyFramework.AddDoSomething(new DoSomething());