ノードとアークのグラフを管理するアプリケーションがあります。ノードには少数のプロパティがあります。ここで、データを保存する必要があり、シリアライゼーション形式を選択する必要があります。ここにいくつかの明白なもののリストがありますが、私が考慮していないものもあるかもしれません.
- Java シリアライゼーション
- XML
- JSON
- ヤムル
- Google プロトコル バッファ
Java シリアライゼーションは、さまざまな理由から初心者向けではありません。Java の世界でも、相互運用性、スキーマの移行、および使いやすさの理由から、XML およびその他のシリアライゼーション形式が好まれています。
Scala の XML サポートは当然の選択のように思えます。ただし、個人的には、XML リテラルをソース コードに埋め込むという考えは好ましくないと思います (この言語の作成者でさえ、この決定を後悔していることを認めています)。この機能は、マークアップされたテキストを生成するときにおそらくより理にかなっていますが、オブジェクトをシリアル化するときは、シリアル化の構文を理解するコードから、内部データ構造を理解するコードを可能な限り分離する、より高いレベルの API が本当に必要です。 format - つまり、理想的には、ソース コードに実際に XML が表示されないようにする必要があります。また、Google の Web 検索では、Scala の XML DOM には多くのいぼがあり、使いにくいと主張するブログ投稿が多数見つかります。(状況を改善すると主張するライブラリも多数ありますが、どれを選択するかが問題になります。)
JSON と Yaml も機能します。ここでの問題は、最も一般的なシリアル化ライブラリが Java にあるため、適切な Scala ラッパー クラスを選択または作成する必要があることです。また、これらのライブラリの多くは Bean リフレクションに依存しています。これは可能ですが、Scala では動作させるために追加のアノテーションが必要になるため、やや厄介です。
最後に、他の多くのシリアライゼーション タスクに Google protobufs を使用しました。良い点は、protoc コンパイラーがターゲット言語のイディオムに一致する洗練された API を生成できることです。ただし、この場合、エンコードされたデータ ストリームのサイズが小さいという protobufs の強みの 1 つは重要ではありません。