有两种方法可以绕过这里,选择哪一种取决于您的软件的行为方式。
一种方法是插件 路径,人们可以在其中将新代码安装到应用程序中,修改相关方面。这条路线要求您的应用程序是可安装的,而不仅仅是作为服务提供(或者您安装和审查第三方发送的代码,这是一场噩梦)。
另一种方法是提供一个API,它可以由相关方调用,并使应用程序将控制权转移到位于其他地方的代码(例如 Facebook 应用程序),或者使应用程序按照 API 命令使开发人员能够执行的操作(例如 Google地图)。
即使机制不同并且如何实际实现它们也不同,无论如何,您必须定义
- 我会让用户有什么自由?
- 我将为程序员提供哪些服务来定制应用程序?
最重要的是:
- 如何在我的代码中启用此功能,同时保持安全和健壮。这通常是通过对代码进行沙箱处理、验证输入并可能为用户提供有限的功能来完成的。
在这种情况下,钩子是代码中调用所有已注册插件的钩子函数的预定义位置,如果已定义,则会修改应用程序的标准行为。例如,如果你有一个渲染背景的函数,你可以拥有
function renderBackground() {
foreach (Plugin p in getRegisteredPlugins()) {
if (p.rendersBackground) p.renderBackground();
}
//Standard background code if nothing got executed (or it still runs,
//according to needs)
}
在这种情况下,您拥有插件可以实现以更改背景的“renderBackground”挂钩。
以 API 方式,用户应用程序将调用您的服务来渲染背景
//other code
Background b = Salesforce2.AjaxRequest('getBackground',RGB(255,10,0));
//the app now has the result of calling you
这也都与好莱坞原则有关,适用是好事,但有时就是不切实际。