【发布时间】:2015-09-18 12:11:50
【问题描述】:
在下面的类图中,您可以看到我当前的插件/扩展系统方法。我想为通用/全局事物提供扩展 API。但是公开的 API 应该只包含被引用对象的实际功能的一个子集。我的第一个想法是使用接口。这样做的问题是,一个邪恶的插件可能会将接口向下转换为内部类并把事情搞砸。 (我应该关心吗?)第二个想法是使用代理模式。目前我同时使用它们。我想这不是真的必要。但是考虑到二进制兼容性如何降低这里的复杂性?
【问题讨论】:
-
顺便说一句,你用什么程序来制作 UML?
-
这是针对开源项目,还是针对仅以二进制形式分发插件的闭源、仅二进制项目?如果是后者,那么“邪恶插件”需要进行一些严格的逆向工程,以便能够向下转换您传递给插件的对象指针。如果它是一个开源项目,那么你真的无能为力。 :)
-
@PaoloM UMLet。这是开源的。
-
与您的代码在同一内存空间中运行的恶意代码可以做任何事情,C++ 中没有针对它的保护。使用不需要的代理(恶意代码仍然可以获取指向真实对象的指针)只会使您的设计复杂化并使其更加脆弱。
标签: c++ qt api plugins proxy-pattern