BEA的
"SDO简介"中讨论了SDO设计的动机并从动态数据API、数据类型自检API、数据跟踪变化API三个角度展开。
动态数据API主要是因为Java是静态(强类型)语言,不能在运行时将额外的字段或者方法添加到对象的实例中。
==============
针对这个问题其提出DataObject概念 DataObject do = new DataObjectImp(); do.set("name","tester"); do.get("name"); 这个实际上可以对应成Map的功能;
Java的动态数据API包括ResultSet、DOM等API,其对取的值应该具备类型自检的功能
==============
这个功能在JDK5.0中已经具备,自动解箱功能(待确定),而且Spring中已运用的得心应手,因为Java本身提供了java.beans包。
数据跟踪变化
==============
这点在Hibernate模型中已经有实现,通过新对象和原有的快照的对比
怀着这些疑问,继续查阅了相关资料和规范,其中在DeveloperWorks的“
服务数据对象简介”给出了解释,虽然文章属早期系列
为什么要使用 SDO?
对
于服务数据对象(SDO),大多数开发人员要问的第一个问题就是为什么要使用 SDO。难道 J2EE
本身还不够庞大、不够复杂(而且难以掌握)吗?Java 环境中不是已经有其他支持 XML
的框架了吗?所幸的是,该问题的答案能够让我们多数人感到满意:SDO 是作为简化 J2EE 数据编程模型的方法出现的,它能够让 J2EE
开发人员把更多的时间用于应用程序的业务逻辑。
服务数据对象框架为数据应用程序开发提供了统一的框架。通过
SDO,您不需要熟悉特定于技术的 API,就能访问和利用数据。您只需要知道一种 API,即 SDO
API,它允许您处理来自多种数据源的数据,其中包括关系数据库、实体 EJB 组件、XML 页面、Web 服务、Java Connector
Architecture、JavaServer Pages 页面等。
并展开了各种技术在"拨开SDO(Service Data Object)唬人的光环"中各种技术的对照.这个文章可谓是非常及时和有力的.
其中提到的DMS(数据中介服务)、Data Graph(数据图)、DataObject(数据对象)等概念对于前边提到的Hibernate也有很大的规范指导作用。DMS从DataSource(数据源)获得到数据,将数据以Data Graph(数据图)的形式存在,即是数据对象树,SDO客户端遍历Data Graph获得Data Object使用.DMS直接屏蔽了数据来源,所以SDO客户端看到的数据可能来自多个数据源(这点从语义上和Hibernate对应部分好像没有什么大的区别)。SDO客户端从DMS取数据,也可以把修改体现在DMS中,并通过DMS进行保存,具体保存的形式也被DMS屏蔽,也就是数据源的形式,可以是DBMS、XML等。