我遇到了一篇在 NHibernate 中提到 Tuplizer 的帖子,任何人都可以为 Tuplizer 提供一个好的定义或参考吗?
3 回答
A tuplizer defines the contract for things which know how to manage a particular representation of a piece of data, given that representation's EntityMode (the entity-mode essentially defining which representation).
If that given piece of data is thought of as a data structure, then a tuplizer is the thing which knows how to:
- create such a data structure appropriately
- extract values from and inject values into such a data structure
For example, a given piece of data might be represented as a POCO class. Here, it's representation and entity-mode is POCO. Well a tuplizer for POCO entity-modes would know how to:
- create the data structure by calling the POCO's constructor
- extract and inject values through getters/setter, or by direct field access, etc
同一条数据也可以表示为 DOM 结构,使用与 XML 实体模式关联的元组器,它将生成 XmlElement 的实例作为数据结构,并知道如何以嵌套的 XmlElements 或 XmlAttributes 的形式访问值。
用 Fabio Maulo的话来说:
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
而且当然!
org.hibernate.tuple.Tuplizer及其子接口负责管理给定表示的org.hibernate.EntityMode的数据的特定表示 。如果给定的数据被认为是一种数据结构,那么元组器就是知道如何创建这种数据结构以及如何从这种数据结构中提取值并将值注入到这种数据结构中的东西。例如,对于 POJO 实体模式,对应的 tuplizer 通过其构造函数知道如何创建 POJO。它还知道如何使用定义的属性访问器访问 POJO 属性。Tuplizer 有两种高级类型,分别由 org.hibernate.tuple.entity.EntityTuplizer和 org.hibernate.tuple.component.ComponentTuplizer表示接口。EntityTuplizers 负责管理上面提到的关于实体的合约,而 ComponentTuplizers 对组件做同样的事情。