5

Protocol Buffer のドキュメントでは、次のように警告されています...

生成されたクラスから継承して動作を追加しないでください。これは内部メカニズムを破壊するので、オブジェクト指向の実践としては適切ではありません。

出典:プロトコルバッファの基本

私の2つの部分の質問は次のとおりです。

  1. これにより、どのような内部メカニズムが壊れる可能性がありますか?
  2. とにかく、これは良い OO プラクティスではありませんか?
4

1 に答える 1

4
  1. 「何がうまくいかないのか」は、実装固有のものになります。特定の実装を引用した場合、答えられる可能性がありますが、より一般的な意味では、これはサポートされているシナリオではなく、サブクラス化する場合、実装が正しく機能する必要がないか、まったく機能しません。これは未定義の動作であり、すべての意味があります。さらに、すべてのターゲット プラットフォームが継承をサポートできるわけではないため、プロトコル バッファは継承をサポートしません。主な考え:

    • 受信オブジェクトを予想されるタイプのリストと照合するコードが存在する可能性があります - あなたのものがない場合、失敗する可能性があります
    • 追加したフィールドなどは処理されません
    • シリアライザーの全体的な考え方は、シリアライズしたものを確実に返すことです。をシリアライズするSomeDerivedClassと、シリアライザがそれを返す方法はありません
    • このようなライブラリの要点は、面倒な実装の詳細を隠すことです。実装を台無しにすることは期待されていません (ポリモーフィズムは のために設計する必要があります)
  2. オブジェクト指向の問題として; これはあなたのタイプではありません。これは、特定の目的を果たすように設計された DTO です。一般的な使用法は、DTO からドメイン モデルへの/からのマッピングであり、より複雑になる可能性があります。または、DTO が有用な場合は (おそらくファサードとして) DTOをカプセル化することもできます。

于 2012-06-28T10:41:26.690 に答える