包装器和框架之间有什么区别?

时间:2011-05-01 03:23:08

标签: winapi directx class-design

Win32或DirectX包装器与Win32或DirectX框架之间有什么区别?

2 个答案:

答案 0 :(得分:0)

包装器通常是一系列函数,它们以某种抽象的方式向最终用户包含对win32,DirectX等库或API的函数调用。很多时候它们是自定义的,因此您在包装器中调用的函数与原始API不完全相同,或者已经设置了一些默认参数,以便您更轻松地使用API​​。此外,在语言包装器的特定实例中,该功能已嵌入到语言的运行时API中,然后暴露给最终用户。例如,可以通过使用win32 API调用为python创建一个C库插件,然后创建一个可能具有调用win32函数的自定义python函数的python库,从而将win32调用暴露给Python用户。 C库插件。在这种情况下,Python库“包装”本机基于C的win32库。

框架就像一个包装器,但在它最常用的定义中,它有点不同,它通过创建某种类型的运行时环境来创建回调来插入,所以当框架 - 工作想要做一些任务,你已经编写了一个为该任务调用的函数。这被称为编程的“好莱坞校长”,基本上说,“不要打电话给我们,我们会打电话给你”。因此,在使用此模型时,您可以创建函数,使用框架函数注册它们,并在框架工作需要调用它时调用函数,框架将其自己的内部参数作为函数参数传递。一个很好的例子是GUI框架,您可以在其中为按钮和其他事件创建回调,GUI框架在处理运行时事件循环时调用这些函数。

所以我想一种方法来考虑两者之间的主要区别是包装器往往是静态的(即使用自定义函数调用公开库和函数,或者为您填充默认值或将它们转换为其他语言),而框架往往是动态的(即它是一个运行时系统,你为它创建回调,并在框架中注册它,然后在运行时事件循环或内核等的某些时候调用它,就像GUI工具包一样)。

答案 1 :(得分:0)

Wrappers倾向于使访问复杂系统,复杂代码或来自多个类的调用组合等(通常更容易)成为可能。例如,您可以使用C#或Java创建一个Facebook包装器,以便与从Facebook API获取用户数据进行交互,后者具有许多返回JSON的基于REST的函数。框架是一组相关的对象,函数等,以提供特定功能或增强特定功能,因此您不会使用 包装框架。通常,您将使用两者,使用包装器来访问框架。遗留系统尤其如此:)