誰かがオブジェクトの水和について話すとき、それはどういう意味ですか?
異なる表現(RDMSからOOPS、XML)の間でデータを変換するWeb上でHydrateと呼ばれるJavaプロジェクトを見つけました。これはオブジェクトのハイドレーションの一般的な意味ですか?表現間でデータを変換するには?保存された表現からオブジェクト階層を再構築することを意味するのでしょうか?
誰かがオブジェクトの水和について話すとき、それはどういう意味ですか?
異なる表現(RDMSからOOPS、XML)の間でデータを変換するWeb上でHydrateと呼ばれるJavaプロジェクトを見つけました。これはオブジェクトのハイドレーションの一般的な意味ですか?表現間でデータを変換するには?保存された表現からオブジェクト階層を再構築することを意味するのでしょうか?
回答:
オブジェクトをハイドレートするとは、メモリ内に存在し、まだドメインデータ(「実際の」データ)が含まれていないオブジェクトを取得してから、ドメインデータ(データベース、ネットワーク、ファイルなど)を入力することです。システム)。
この答えに関するエリックロバートソンのコメントから:
逆シリアル化==インスタンス化+ハイドレーション
ブリスターパフォーマンスについて心配する必要がなく、データアクセスAPIの内部にあるパフォーマンス最適化をデバッグしていない場合は、おそらくハイドレーションを明示的に処理する必要はありません。代わりに通常は逆シリアル化を使用して、より少ないコードを記述できるようにします。一部のデータアクセスAPIにはこのオプションがありません。そのような場合は、水和ステップを自分で明示的に呼び出す必要があります。
ハイドレーションの概念についてもう少し詳しくは、この同じ質問に対するErick Robertsonの回答を参照してください。
このフレームワークについて具体的に質問されたので、調査しました。
私の知る限りでは、このプロジェクトで「ハイドレート」という言葉を非常に一般的な意味で使用したことはないと思います。タイトルでの使用は、「シリアル化」のおおよその同義語だと思います。上で説明したように、この使用法は完全に正確ではありません。
参照:http : //en.wikipedia.org/wiki/Serialization
データ構造またはオブジェクトの状態を、[...]保存して同じまたは別のコンピューター環境で後で再構築できる形式に変換する。
彼らの名前の背後にある理由を直接Hydrate FAQで見つけることはできませんが、私は彼らの意図の手がかりを得ました。ライブラリの目的は人気のあるサウンドに似たHibernateフレームワークに似ているため、彼らは「ハイドレート」という名前を選んだと思いますが、これはまったく逆のワークフローを念頭に置いて設計されました。
ほとんどのORM(Hibernateを含む)は、メモリ内のオブジェクトモデル指向のアプローチを採用しており、データベースは2番目の考慮事項を考慮しています。代わりに、Hydrateライブラリーは、データベーススキーマ指向のアプローチを採用し、リレーショナルデータ構造を維持し、プログラムがそれらの上でよりきれいに動作できるようにします。
比喩的に言えば、まだこのライブラリーの名前に関して:水和物は「何かをすぐに使えるようにする」(乾燥食品を再水和するなど)のようなものです。これはHibernateの比喩的な反対であり、「冬のために何かを捨てる」(Animal Hibernationのような)のようなものです。
ライブラリをハイドレートと名付ける決定は、私が知る限り、一般的なコンピュータプログラミング用語「ハイドレート」に関係するものではありませんでした。
一般的なコンピュータープログラミング用語「ハイドレート」を使用する場合、パフォーマンスの最適化は通常、動機(または既存の最適化のデバッグ)です。ライブラリがオブジェクトにデータをいつ、どのように入力するかをきめ細かく制御できる場合でも、タイミングとパフォーマンスは、名前やライブラリの機能の主な動機ではないようです。ライブラリは、エンドツーエンドのマッピングとスキーマの保持を有効にすることに、より関心があるようです。
deserialization == instantiation + hydration
@foo
投稿者に返信する場合は必要ありません。
水和とは、オブジェクトをデータで埋めるプロセスを指します。まだハイドレートされていないオブジェクトがインスタンス化され、データを持つエンティティを表していますが、データはまだオブジェクトにロードされていません。これは、パフォーマンス上の理由で行われるものです。
さらに、ハイドレーションという用語は、データベースまたはその他のデータソースからデータをロードするための計画を説明するときに使用されます。ここではいくつかの例を示します。
一部のフィールドのみをロードし、すべてをロードしていない場合、オブジェクトは部分的にハイドレートされていると言えます。これらの他のフィールドは現在の操作には必要ないため、これを行うことができます。そのため、このデータを使用しないときに、帯域幅とCPUサイクルを浪費して、このデータをロード、転送、および設定する理由はありません。
さらに、DoctrineのようないくつかのORMがあり、それらはインスタンス化されたときにオブジェクトをハイドレートしませんが、そのオブジェクトでデータがアクセスされた場合のみです。これは、使用されないデータを読み込まないようにする1つの方法です。
Merlynが述べたように多少冗長な言葉遣いですが、私の経験では、オブジェクトのインスタンス化/作成ではなく、オブジェクトの塗りつぶし/生成のみを指しているため、正確にする必要がある場合に役立ちます。
deserialization == instantiation + hydration
)の違いを反映するようになります。
これはかなり古い質問ですが、次の用語の意味にはまだ混乱があるようです。うまくいけば、これは明確になります。
水和物
「データを待っているオブジェクトはハイドレートされるのを待っている」などの説明を見ると、混乱して誤解を招きます。オブジェクトは物事を待たず、ハイドレーションはオブジェクトをデータで満たす行為にすぎません。
例としてJavaScriptを使用:
const obj = {}; // empty object
const data = { foo: true, bar: true, baz: true };
// Hydrate "obj" with "data"
Object.assign(obj, data);
console.log(obj.foo); // true
console.log(obj.bar); // true
console.log(obj.baz); // true
値を追加するものobj
は、それを「水和」することです。Object.assign()
この例では単に使用しています。
「シリアライズ」および「デシリアライズ」という用語は他の回答でも言及されたため、これらの概念の意味をハイドレーションから明確にするのに役立つ例を以下に示します。
シリアライズ
console.log(JSON.stringify({ foo: true, bar: true, baz: true }));
逆シリアル化
console.log(JSON.parse('{"foo":true,"bar":true,"baz":true}'));