继承自生成的Protocol Buffer类

时间:2012-06-28 10:33:46

标签: protocol-buffers

协议缓冲区文档警告......

  

您永远不应该通过继承向生成的类添加行为   从他们。这将打破内部机制,并不好   无论如何,面向对象的实践。

源:Protocol Buffer Basics

我的两个问题是:

  1. 这会破坏哪些内部机制?
  2. 无论如何,这不是一个好的OO练习?

1 个答案:

答案 0 :(得分:3)

  1. “出了什么问题”将是非常具体的实施。如果您引用了特定实现,则可能会回答,但在更一般意义上:这不是受支持的方案,并且如果您进行子类化,则实现不需要正常工作或根本不需要。这是一个未定义的行为,所有这些暗示。此外,协议缓冲区不支持继承,因为并非所有目标平台都支持它。关键思想:

    • 可能存在根据预期类型列表检查传入对象的代码 - 如果您的类型不存在,则可能会失败
    • 它不会处理您添加的任何字段等
    • 串行器的整个想法是强有力地回馈你序列化的东西;如果序列化SomeDerivedClass,则序列化程序无法再将其提供给您
    • 像这样的图书馆的全部意义是隐藏血腥的实施细节;你不应该搞乱任何实现(多态必须设计)
  2. 作为OO关注的问题;这不是你的类型;它是一个旨在服务于特定目的的DTO。常见的用法可能是从DTO到/来自您的域模型的 map ,这可能更复杂,或者可能封装 DTO(如果有用的话)(可能是外观)。