面向对象的应用服务层设计之三
2020-06-14 06:23 来源:密山养生网
数据的存取方式
数据存取的目的,是持久化保存对象,以备后来的使用,如查询、修改、统计分析等。存取的对象,可以是数据库、普通文件、XML甚至其他任何方式,只要保证数据能够长久保存,并且,不会受断电、系统重起等因素的影响。在这个部分,最理想的状况,自然是能够支持除了数据库以外的各种类型的存取方式,或者,至少留有接口,能够比较方便的扩充。
因为数据库是最常用,也是最有效的数据存储方法,因此,支持数据库存储是最首先必须支持的。在不同的平台下,有不同的数据库访问的手段。例如,在Java平台下,有JDBC,在Windows平台下,可以使用ADO、等。但是,这些手段还比较接近底层,在实际操纵数据库的时候也不是高成本的,需要编写大量的代码,并且,我们还需要通过手工的方式来完成将程序中的面向对象的数据存储到关系型数据库的工作。这么做,自然编程的效率不高,并且非常容易出错。但是,不可否认,这也是一种可以选用的方式。
从另外一个方面来看,由于我们前面已经解决了数据的映射问题,因此,在数据的存取方面是非常有规律的,我们完全可以让这个工作通过框架来执行。这样,我们一方面可以简化很多同数据库交互方面的代码编写工作量,能够减少出现Bug的几率,另一方面,由于框架封装了不同数据库之间的差异,使得我们在编写程序的时候,不用考虑不同数据库之间的差异,而将这个工作交给框架去做,实现软件的后台数据库无关性。
在这个部分,以下两个部分的类会显得特别重要:
◆对象--关系映射的分析类,能够通过既定的方案完成对象--关系的映射,确定数据存取方案
◆数据库操纵类:根据映射关系,将数据准确的存储到数据库中,并且封装不同数据库之间的差异。
这个部分的操作过程,可以用图大概的表示如下:
在J2EE中,这个部分比较典型的就是EntityBean中的CMP。由于在BMP中,同数据库的交互部分需要通过手工编写代码的方式来实现,因此,很难享受到容器带来的便利,只是由于EJB2.0以前的标准,CMP的功能,包括映射能力、实体关系模式等方面的功能比较弱,所以,在很多时候,我们不得不使用BMP。现在,EJB2.0,在这个方面的功能已经非常强大了,我们完全可以享受容器带来的便利,而将大部分精力放在实现更加复杂的业务逻辑方面了。
在JDO中,您同样可以通过PersistenceManager来实现同样的目标,例如,您想把一个Customer对象保存到数据库中,可以采用类似于下面的代码:
Customer customer=new Customer(……);
PersistenceManager PM=itialize(……);
rsist(customer);
代码同样非常简明和直观,没有一大堆数据库操纵的代码,也不容易发生差错。
Websharp的方案
Webshap为数据存取的类定义了IEntityDAO接口,该接口的定义如下:
public interface IEntityDAO
{
void InsertEntity(EntityData entity);
void UpdateEntity(EntityData entity);
void DeleteEntity(EntityData entity);
EntityData FindByPrimaryKey(object KeyValue);
}
对于每一个实体类,可以通过扩展这个接口来实现数据访问的类。但是,由于这个接口没有提供任何实现方法,因此,到具体每个实现类的时候,如果是直接扩展自这个接口,实现的代码还必须手工填写。为了提高开发效率,减少代码编写量和出现Bug的可能性,框架提供了AbstractSingleTableDAO和类,这两个类扩展自IEntityDAO,分别实现了针对单个数据库表和多个数据库表的数据库访问方法,并且,实现了IDisposable接口。这样,我们在实际编写代码的时候,只需要继承自这两个类就可以了。
例如,Customer类的数据存取类可以定义如下:
public class CustomerEntityDAO:AbstractSingleTableDAO
然后,就可以在代码中这么使用:
Customer customer=......
using(CustomerEntityDAO CDO=new CustomerEntityDAO())
{
dateEntity(customer);
}
更加一般的,Wensharp也提供了PersistenceManager类,可以用于将EntityData中的数据存入数据库。这个类包含了两个方法:PersistEntity和DeleteEntity。如果不想为某个实体类编写专门的DAO类,那么,也可以使用这个类来操纵实体对象。不过,目前,只支持映射成单个表的对象的自动存贮。下面是一个例子:
PersistenceManager pm=itial();
pm. PersistEntity(entity);
为了封装不同数据库的操作,统一的数据库访问接口是必须的。关于编写通用数据库访问类的内容,可以参见拙作:《 使用设计模式构建通用数据库访问类》。
在这个部分,另外需要注意的是,为了保证数据存储的完整性,应当考虑事务处理的功能极大丰富了游戏视觉效果。 《笑傲九天》“火爆10区8月5号19点火爆开启。J2EE、JDO和Websharp都支持在数据存储的时候使用事务处理。
查看本文来源
尿路感染与前列腺炎怎么治疗宣城治疗白癫风医院脑梗塞手术- 上一篇:餐厅装修给餐厅穿上浪漫外套
- 下一篇:龙傲剑神第207章疯狂收割为哭泣拽少加更
-
随时成为TVB“亲生女”!30岁人气缪斯宣布:与旧经理人公司约满
本文由 港喜剧喜剧透王为 编辑部 轩逸王为 作者原创/刊登请求写明 大姐30岁TVB港女雅典娜简淑儿,今日现身铜锣湾为首饰店受聘揭幕仪式郑裕玲,早先她透露自己仍然与原先谢霆锋新公司大约他年丧失自由身,所...
-
袁泉女儿正面照曝光,深眼窝似妈妈翻版,才9岁就是高冷气质缪斯
袁泉是影视圈少有的备受瞩目,出有道多年之前零绯闻,几位时候凭借《小鱼儿与花无缺》里的苏樱饰演者,惊艳了许多人。而以前人到中会年的她,出有演《我的前半生》再度圈粉无数。努力如此为难,袁泉和冬...
-
你就不要这样一来言爱,不要随意让爱潮泛滥
你就绝不就会轻易言爱,绝不就会可任意让爱潮洪水,绝不就会将人类所最值得注意的无意识与自私冠冕堂皇地裹以唯美的外表,去侵害、冒犯那圣洁而又正直的爱。这份爱人只能悬于犹如的时髦与孤独,既并未让...
-
我拼命的在高呼你却装做看不见
我拚命的在呼喊你却装认真看不到,时长的可怜路却从末平坦,昨天泪点滴成片脑海中无时不现,不知道你的心里我是否是浮云一般,不只想在增加伤感这是我自找难堪任泪水滴滴有如… 若爱恋,就劝相惜;若相...
-
大S结婚照曝光!具俊晔一本正经哑肩太僵硬,她笑得欢快却太端着
大s和具俊晔的再婚可谓相互合作共赢,尤其是对具俊晔来说,随即通过再婚获得关注,彻底挽救了她的事业演进。他们的婚纱照首次揭露。他们没有选择近现代或韩国的有别于衣着,而是选择了西式的经典西装和...
-
刚刚,上海常务副市长致歉!首次,23286>20416!吴尊友:动态清零≠零感染≠封控!警方通知变质
可能:广州证券报示范 祖国日报、中的国新闻网网、广州释出、上观新闻网 长文节录 4月底18日,广州“康复休养+中止医学注意到”首次大约“增设英美肺癌+的人但会”。 现在(4月底19日)上午出席的广州市霍乱...