私は Ocean のシリアライゼーションにあまり「流暢」ではありません。Petrel プロパティ全体 (プロパティ、グリッド、またはその他の Petrel/Ocean オブジェクト) をカスタム DataSource にシリアル化できますか? ロードバックできますか?それを行うための良い習慣/パターンはありますか? いくつかのコードサンプルは大歓迎です!
1 に答える
確立された DataSource は既にありますか? DataSource で使用される永続バックエンド (SQL? XML?) は、データの格納方法を決定します。DataSource を通じて保持するデータはすべて、バックエンドの形式に変換する必要があります。
DataSource には「Ocean シリアライゼーション」のようなものはないことに注意してください。あなた (そしてあなただけ) が DataSource を完全に制御できます。通常、実際にはサービスとして Ocean に提供しているため、Droid を指定すると、オブジェクトの 1 つを解決できます(カスタム ドメイン オブジェクト、workstep 引数パッケージ、地震属性引数パッケージなど)。
さて、あなたの質問から、あなたが言及した Petrel データのディープ コピーを保存しようとしているように思えます。これは本当にそうですか?もしそうなら、Ocean の API を介して読み取ることができるものをミラーリングして、このデータを表す独自のデータ構造を作成する必要があると思います。
本当に保存したいものがPetrel データへの弱参照(IIdentifiable の実装) である場合は、各オブジェクトの Droid の内容を永続化する必要があります。これははるかに簡単な作業です。
次に、永続化されたデータが DataSource から解決されたら、Droid を再構築します。Droid は (他の DataSource を使用して独自に) 解決できるため、オブジェクトへの通常の強力な .NET 参照が生成されます。もちろん、このデータが現在ロードされているプロジェクトに存在すると仮定します。
Ocean SDK の SimpleDataSourceExample は、BinaryFormatter を使用して .dat ファイルに基づく単純な DataSource を示しています。これを他のバックエンドに変更するのは比較的簡単です。BinaryFormatter よりも XML を強くお勧めしますが、大量のバルク データを格納する場合は、データベースを検討する必要があります。Blueback Reservoir では、XML が私たちのニーズに非常によく応えてくれました。
ちょっとした注意点: DataSource に格納するオブジェクトが IDisposable (および IIdentifiable) を実装して、DataSource のリソースを解放するようにしてください。