6

问题:
我正在构建一个接受文件、翻译执行文件的框架。该框架应该能够处理任何类型的文件,为此我提供了一种上传 DLL 的方法,该 DLL 包含用于翻译执行文件的类和方法。我正在寻找的是定义插件界面的最佳方式

解决方案 A:
定义一组公开可用的接口。插件应该实现这些接口。

解决方案 B:
定义一些公开可用的抽象类。插件应该继承和覆盖这些类的抽象方法。

解决方案 C: rcravens
在代码内部传递接口,创建一个公开可用的抽象类以允许插件扩展。选择
这个解决方案是在接口之前选择的,只是因为它支持基本实现(在这种情况下很方便)。之所以在抽象类之前选择它,只是因为它可以在代码中进行模拟。组合框架非常好,但是对于像这个只需要有限可扩展性的应用程序这样轻量级的东西来说有点过头了。

解决方案 D: JayChris Shain
实现一个组合框架(例如Managed Extensibility Framework(MEF))并围绕它进行构建

如果出现任何新的解决方案,我会将它们添加到此列表中。答案将交给最能证明其解决方案合理性的人(可能具有优势和局限性)

在此先感谢,
技术测试伙计

4

3 回答 3

4

您正在编写的内容听起来很像托管可扩展性框架支持的内容:http: //mef.codeplex.com/。也许只是使用它并避免重新发明轮子?

于 2011-08-16T00:57:07.347 回答
3

在最低级别,我相信您需要接口。这允许大多数模拟框架轻松提供假货。在您的代码周围,您应该传递接口。如果您需要一些可以重构为抽象基类的基本实现,那就去做吧。抽象基类和接口不是相互排斥的概念。有时两者兼而有之是有意义的。

于 2011-08-16T00:43:21.603 回答
3

我认为接口或抽象类之间没有更好的解决方案,这实际上取决于您的需求。但就个人而言,我可能会选择抽象类,因为它提供了更大的灵活性。

您可以提供一些abstract定义插件特定行为所必需的方法,而virtual方法提供了一种可选地覆盖默认行为的方法。

抽象类还可以提供一些对插件作者有用的实用方法。

基本上,抽象类可以提供接口提供的所有功能,甚至更多。所以它可能对未来的扩展更好。

于 2011-08-16T00:44:48.297 回答