数据映射器(Data mapper)
在保持对象和数据库彼此独立的情况下,在二者之间移动数据的一个映射器层
数据映射器是分离内存对象域数据库的一个软件层。其职责是在内存对象与数据库之间传递数据并保持它们彼此独立。
运行机制
分离领域和数据源是数据映射的主要功能
一个应用可以有一个或者多个数据映射器。
- 若映射器是硬编码的,最好为每个领域类或领域层次的根使用一个数据映射器
- 若正在使用元数据映射,一个映射器就足够,但是查找方法太多。
处理查找方法:领域对象也可能调用查找方法,可以用延迟加载
避免领域对象和数据映射器之间的依赖。
把数据映射到领域对象的域,若映射器需要访问领域对象中的域(属性),如何处理?
- 可以采用一些公共(Public)方法,支持领域逻辑不需要的映射器,但需要状态域保护,当这些方法使用超出数据库加载的上下文时抛出异常。
- 把数据映射器和领域对象打包在一起会降低映射器的可见性,但导致更加复杂的依赖关系。
基于元数据的映射?
把元数据作为数据存储在类或单独的完文件中。优点:映射器的变化通过数据处理,无需更多源代码和代码生成或反射程序。
使用时机
- 数据库方案和对象模型需要彼此独立演变,通常和领域模型一起使用。
- 业务逻辑复杂时
示例
建立类,及和类同构的表结构
查找操作
分离查找方法。为了允许领域对象调用查找方法,可用分离接口把查找方法的接口从映射器中分离出来,放到领域层可见的单独包中。用于查找的接口置于领域包中。
加载对象的两种方法。
- 构造函数。见前面的处理过程。
- 空对象。先创建一个空对象,然后设置方法来加载数据