Posted on 2005-11-22 17:53
canonical 阅读(303)
评论(0) 编辑 收藏 所属分类:
Witrix开发平台
hibernate等O/R
Mapping软件包中使用javabean来作为数据的载体, 但这些bean一般除了get/set等数据访问方法之外没有什么其它的业务方法。
前一段时间有人认为这是所谓贫血的领域模型(Anemia Domain Model),引发了一场讨论。
其实这些bean的作用仅是表达了领域内的数据关系, 本身并不可能作为完整的领域模型层存在。
在数据层,我们所需要的是数据对外暴露,因为我们无法预知这些数据的使用方式,
就象是实验数据发表出来以后你无法预知别人如何分析一样,这时信息流是开放的,向外的:信息在这里,放马过来吧。
而在业务逻辑层,复杂的逻辑控制交织在一起,我们需要精细的控制信息通道,通过函数封装,我们反转了信息流的方向:取到什么数据是由调用者提供的信息决定
的。
实际上,在ORM软件中使用的bean基本上与一个Map类似,只是它具有java
Class所提供的元数据,而访问数据时又必须通过get/set方法,因而在这些方法中能够根据元数据动态的作出响应。在witrix平台的统一数据访
问框架中主要基于Map等通用数据类型,而不是个性化的bean。为了使得Map具有与bean一样的动态响应能力,只需要加入meta的支持即可。
interface IExMap extends Map{
IMapChecker getChecker();
Map getModifications();
...
}
在get/set之前可以通过IMapChecker来实现动态处理,对Map中数据所作的修改也可以记录下来