Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop “包装中的设计问题”;";将API转换为OO包装器_Oop_Design Patterns_Architecture - Fatal编程技术网

Oop “包装中的设计问题”;";将API转换为OO包装器

Oop “包装中的设计问题”;";将API转换为OO包装器,oop,design-patterns,architecture,Oop,Design Patterns,Architecture,我正在尝试构建一个面向对象的包装器,它将包装API规范;这包括许多结构、事件和API。 本API规范将每年进行修订,并通过发布新规范进行修订;这些更新可能具有更新的结构、事件和API。更新还将包括 对现有结构、事件和API的更新,API本身不会改变,但它们将各种结构作为参数,最终会进行更新 挑战 API规范只不过是下层的SDK, 我试图构建的也是一个SDK,但将是一个对象 将包装器定向到此SDK上 要求是用户 想要对象和方法,不要像“C”一样的结构和API 频繁的版本更改不应该对高级版本有任何影

我正在尝试构建一个面向对象的包装器,它将包装API规范;这包括许多结构、事件和API。 本API规范将每年进行修订,并通过发布新规范进行修订;这些更新可能具有更新的结构、事件和API。更新还将包括 对现有结构、事件和API的更新,API本身不会改变,但它们将各种结构作为参数,最终会进行更新

挑战

  • API规范只不过是下层的SDK, 我试图构建的也是一个SDK,但将是一个对象 将包装器定向到此SDK上
  • 要求是用户 想要对象和方法,不要像“C”一样的结构和API
  • 频繁的版本更改不应该对高级版本有任何影响 应用程序,并应与任何底层API无缝协作 版本
  • 较旧的应用程序应该在较新的API上工作
  • 较新的应用程序应该在较旧的API上工作
  • 最后一个是一个棘手的问题,我的意思是,当新的应用程序看到它是旧版本的SDK时,它应该以某种方式将自己转换为旧版本的API

    是否有任何设计模式可以帮助我完成这项任务,并将频繁的内部数据更改与向后兼容性和向前兼容性联系起来

    操作系统:Windows
    DEV环境:VisualC++ + < P> > P>您的问题太高,无法由设计模式来回答。 您要求的是架构原则

    您应该基于您有充分依据的设计决策(“API使用版本控制是向后兼容的,因为…”),而这反过来又基于您的需求(例如,“较旧的应用程序应该在较新的API上工作”)

    看看这个(Joshua Bloch关于API设计的演讲基调):


    您的问题太高,设计模式无法解决。 您要求的是架构原则

    您应该基于您有充分依据的设计决策(“API使用版本控制是向后兼容的,因为…”),而这反过来又基于您的需求(例如,“较旧的应用程序应该在较新的API上工作”)

    看看这个(Joshua Bloch关于API设计的演讲基调):

    1)如果sdk API涉及手动资源分配,那么此时想到的所有内容:

    RAII,或ctor,数据或资源管理:

    2-5)确定您正在构建的API的函数分解,该函数分解可以用SDK API的每个版本层表示。关于半形式函数分解的一些细节(见下):

    然后,如果有必要,您可以获取生成的函数组合,并使其成为可构造的对象。不要担心最终的对象模型,直到您对所涉及的函数组合有了工作上的理解。一开始这很难,但相信我,它比遍历几个可能的对象模型设计要强大得多

    对于C++,您可能需要针对每个上游SDK API执行版本定义的预处理,除非SDK在某个文件中对其版本进行编码,这样您就可以代替DLL加载(在这种情况下,这可能是工厂设计模式),但是我怀疑您已经知道了。

    1)如果sdk API涉及手动资源分配,那么现在想到的就是:

    RAII,或ctor,数据或资源管理:

    2-5)确定您正在构建的API的函数分解,该函数分解可以用SDK API的每个版本层表示。关于半形式函数分解的一些细节(见下):

    然后,如果有必要,您可以获取生成的函数组合,并使其成为可构造的对象。不要担心最终的对象模型,直到您对所涉及的函数组合有了工作上的理解。一开始这很难,但相信我,它比遍历几个可能的对象模型设计要强大得多


    对于C++,您可能需要针对每个上游SDK API执行版本定义的预处理,除非SDK在某个文件中对其版本进行编码,这样您就可以代替DLL加载(在这种情况下,这可能是工厂设计模式),但是我想你已经知道了。

    你的文章太复杂了,我看不懂。.谢谢你研究这个函数的复杂性是什么?您每天都使用它们:)。如果你对这篇文章有什么特别的问题,请告诉我,我很乐意回答。你的文章太复杂了,我无法理解。谢谢你研究这篇文章。函数的复杂性是什么?您每天都使用它们:)。如果你有关于这篇文章的具体问题,请告诉我,我很乐意回答。