我注意到许多关于 COM 的书籍等都指出,在 COM 聚合中实现一个可用作内部对象的对象相对容易。但是,除非我遗漏了什么,否则聚合似乎只能在极其有限的场景中成功,因此只有在明确识别出这种场景时才应提供对它的支持。
困扰我的部分如下。COM 聚合将内部对象的身份与外部对象的身份相结合。外部对象的实现者选择内部对象接口的子集,并将这些接口的请求转发给内部对象。内部对象将所有接口请求转发给外部对象。现在假设内部对象,作为其实现的一部分,构造子 COM 对象。大概一个接口指针被传递给该 COM 对象,以便它可以与其父对象通信。内部对象对它实现的接口有一些想法。然而,外部对象可能选择不转发其中一些接口。实际上,文档指出外部对象不应盲目转发接口。这似乎意味着内部对象通常不能将接口指针传递给其他 COM 对象,除非特别要求外部对象将所有这些接口转发给内部对象。这不限于子对象方案。实际上,内部对象实现传递接口指针的任何地方似乎都可能受到影响。
因此,聚合似乎不是通用目的,因为在内部对象必须与其他 COM 对象通信的情况下,它对外部对象提出了严格的要求,即必须最少转发哪些接口,并且不能添加更多接口。此列表在内部对象的未来版本中不会破坏与不转发这些接口的现有外部对象的兼容性。
这是对事物实际情况的正确(并且很少记录)描述还是故事还有更多内容?