5

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

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

来源:协议缓冲区基础

我的两部分问题是:

  1. 这会破坏哪些内部机制?
  2. 无论如何,这在什么方面不是一个好的 OO 实践?
4

1 回答 1

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

    • 可能有代码根据预期类型列表检查传入对象 - 如果你的不在那里,它可能会失败
    • 它不会处理您添加的任何字段等
    • 序列化程序的整个想法是稳健地返回您序列化的内容;如果您序列化 a SomeDerivedClass,则序列化程序无法将其返回给您
    • 像这样的库的全部意义在于隐藏血腥的实现细节;你不应该弄乱任何实现(多态性必须设计用于
  2. 作为面向对象的关注;这不是你的类型;它是一个为特定目的而设计的 DTO。常见的用法可能是从 DTO映射到您的域模型/从您的域模型映射,这可能更复杂,或者如果有用的话可能封装DTO(可能作为外观)。

于 2012-06-28T10:41:26.690 回答