NHibernateのTuplizerについて言及している投稿に出くわしましたが、Tuplizerの適切な定義やリファレンスを提供できる人はいますか?
3 に答える
tuplizer は、その表現の EntityMode (本質的にどの表現を定義するエンティティ モード) が与えられた場合、データの特定の表現を管理する方法を知っているもののコントラクトを定義します。
そのデータの特定の部分がデータ構造と考えられる場合、タプリザーは次の方法を知っているものです。
- そのようなデータ構造を適切に作成する
- そのようなデータ構造から値を抽出し、値を注入する
たとえば、特定のデータが POCO クラスとして表現される場合があります。ここでは、それは表現であり、エンティティ モードは POCO です。POCO エンティティ モードの tuplizer は、次の方法を知っています。
- POCO のコンストラクターを呼び出してデータ構造を作成する
- ゲッター/セッターを介して、またはフィールドへの直接アクセスなどによって、値を抽出および注入します。
XML エンティティ モードに関連付けられた tuplizer を使用して、同じデータの一部を DOM 構造として表すこともできます。これにより、XmlElement のインスタンスがデータ構造として生成され、ネストされた XmlElement または XmlAttribute として値にアクセスする方法がわかります。
ファビオ・マウロの言葉:
tuplizer は、Property-Value を永続的な表現に変換する方法と、Column-Value をメモリ内表現に変換する方法を定義します。EntityMode は、どの tuplizer を使用するかを定義します。
カスタム tuplizer でできること:
- リモート遅延読み込み(この記事では Java Hibernate を使用していますが、一般的な概念は NHibernate にも適用されます)
- POCO の代わりにインターフェイスをシームレスにマッピング/永続化する
- F# レコードのマッピング/永続化( FunctionalNHibernate プロジェクトから)
まず、タプルが何であるかを理解することが役立つ場合があります。
http://en.wikipedia.org/wiki/Tuple
Pythonは、タプルのファーストクラスのサポートがあることで最も注目に値しますが、他のいくつかの言語も同様にサポートしています(F#)
http://diveintopython3.ep.io/native-datatypes.html#tuples
そしてもちろん!