1.元数据映射
在元数据中保持关系---对象映射的详细信息。
大部分用来处理对象---关系映射的代码都描述了如何把数据库中的域对应到内存对象中的域。
1.运行机制
使用元数据映射最主要的决策是如何根据运行代码来表示元数据中的信息。有2种主要途径:代码生成和反射编程。
使用代码生成时需要写这样一个程序:输入是元数据,输出是映射实现类的源代码。这些类看上去是手写的,但事实上完全是构建流程中生成的,通常恰好在编译前生成。
产生的映射器类用服务器代码来部署。
反射程序可能要求对象有一个名为setName的方法,然后通过传递适当的参数,在setName分发中运行一个调用方法。通过把方法(和域)视为数据,反射程序可以从元数据
文件中读入域和方法的名字,并用它们实现映射。通常不建议用反射,部分原因是它慢,但主要原因是它往往会产生很难调试的代码。虽然这样,但实际上反射十分适用于
数据库映射。
代码生成缺乏动态性,因为任何对映射的修改都需要至少重新编译和重新部署软件的相关部分。对反射而言,只要改变映射数据文件,现在有的类就会使用新的元数据。反射
编程通常会收到速度的困扰。
大部分情况下可以用单独的文件格式保存元数据。当前,xml是一种流行的选择,因为它提供了层次化的结构,同时不必编写自己的语法分析器和其他工具。一个加载步骤会
获得元数据并把它转变成编程语言结构,然后该结构驱动代码生成输出或反射映射。
另外一种方法是在数据库中保存映射信息,这种方法是把映射信息和数据保存在一起。如果数据库方案发生变化,映射信息仍然保存不变。
2.使用时机
元数据映射能大大减少处理数据库映射所需的工作量。
2.查询对象
描述一次数据库查询的对象。查询对象是一个解释器,也就是说,它由多个对象组成的结构,该结构可以自身转化为一个sql查询。你可以通过引用类和域而不是表和列来创建这个查询。
1.运行机制
查询对象是解释器模式在表示sql查询上的应用。它的主要作用是使客户可以构造各种类型的查询,把那个把这些对象结构转换成适当的sql字符串。
3.资源库
协调领域和数据映射层,利用类似于集合的接口来访问领域对象。
具有复杂领域模型的系统常常受益于一个层,比如由数据映射器提供的层,它分离了领域对象和数据库访问代码的细节。