【发布时间】:2012-06-14 13:50:49
【问题描述】:
我一直在寻找这个设计问题的简洁答案,但没有成功。我在".NET Framework design guidelines" 和"C# programing guidelines" 都找不到帮助。 我基本上必须将模式公开为 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扩展AbstractDoSomething:
MyFramework.AddDoSomething("DoSomethingIdentifier", new MyDoSomething());
如果是 2 :注册是这样完成的:
MyFramework.AddDoSomething(new DoSomething());
【问题讨论】:
-
用户如何在你的框架中注册 AbstractDoSomethings?
-
@dtb 请看我的编辑(也稍微修改了代码)
标签: c# api design-patterns