您的位置:首页 > 其它

ssh框架及MVC开发模式的学习

2012-07-06 14:44 190 查看
1.什么是持久层

持久层
持久,英文即persistence.

就是把数据保存到可掉电式存储设备中供之后使用.大多数情况下特别是企业级应用,数据持久化往往也就以为着将内存中的数据保存到磁盘上加以固化,而持久化的实现过程则大多通过各种关系数据库来完成.

那么持久层呢?

延续思路,所谓"持久层",也就是在系统逻辑曾面上,专著于实现数据持久化的一个相对独立的领域(Domain).

不过这里有一个字需要特别强调,也就是所谓的"层".

对于应用系统而言,数据持久功能大多是必不可少的组成部分.那不就是说,我们的系统中,已经天然的具备了"持久层"概念?

也许是,但也许实际情况并非如此.

之所以要独立出一个"持久层"的概念,而不是"持久模块","持久单元",也就意味着,我们的系统架构中,应该有一个相对独立的逻辑层面,专著于数据持久化逻辑的实现.与系统其他部分相对而言,这个层面应该具有一个较为清晰和严格的逻辑边界.


2.什么是ORM?为什么要使用ORM?


原文地址:http://www.cn-web.com/shtml/article/webqt/js/2009/02/05/877.shtml

了解orm,先了解以下概念:

什么是“持久化”
持久(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。
什么是“持久层”
持久层(PersistenceLayer),即专注于实现数据持久化应用领域的某个特定系统的一个逻辑层面,将数据使用者和数据实体相关联。

什么是ORM
即Object-RelationlMapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的SQL语句打交道,只要像平时操作对象一样操作它就可以了。

为什么要做持久化和ORM设计(重要)

在目前的企业应用系统设计中,MVC,即Model(模型)-View(视图)-Control(控制)为主要的系统架构模式。MVC中的Model包含了复杂的业务逻辑和数据逻辑,以及数据存取机制(如JDBC的连接、SQL生成和Statement创建、还有ResultSet结果集的读取等)等。将这些复杂的业务逻辑和数据逻辑分离,以将系统的紧耦合关系转化为松耦合关系(即解耦合),是降低系统耦合度迫切要做的,也是持久化要做的工作。MVC模式实现了架构上将表现层(即View)和数据处理层(即Model)分离的解耦合,而持久化的设计则实现了数据处理层内部的业务逻辑和数据逻辑分离的解耦合。而ORM作为持久化设计中的最重要也最复杂的技术,也是目前业界热点技术。

简单来说,按通常的系统设计,使用JDBC操作数据库,业务处理逻辑和数据存取逻辑是混杂在一起的。
一般基本都是如下几个步骤:
1、建立数据库连接,获得Connection对象。
2、根据用户的输入组装查询SQL语句。
3、根据SQL语句建立Statement对象或者PreparedStatement对象。
4、用Connection对象执行SQL语句,获得结果集ResultSet对象。
5、然后一条一条读取结果集ResultSet对象中的数据。
6、根据读取到的数据,按特定的业务逻辑进行计算。
7、根据计算得到的结果再组装更新SQL语句。
8、再使用Connection对象执行更新SQL语句,以更新数据库中的数据。
7、最后依次关闭各个Statement对象和Connection对象。

由上可看出代码逻辑非常复杂,这还不包括某条语句执行失败的处理逻辑。其中的业务处理逻辑和数据存取逻辑完全混杂在一块。而一个完整的系统要包含成千上万个这样重复的而又混杂的处理过程,假如要对其中某些业务逻辑或者一些相关联的业务流程做修改,要改动的代码量将不可想象。另一方面,假如要换数据库产品或者运行环境也可能是个不可能完成的任务。而用户的运行环境和要求却千差万别,我们不可能为每一个用户每一种运行环境设计一套一样的系统。
所以就要将一样的处理代码即业务逻辑和可能不一样的处理即数据存取逻辑分离开来,另一方面,关系型数据库中的数据基本都是以一行行的数据进行存取的,而程序运行却是一个个对象进行处理,而目前大部分数据库驱动技术(如ADO.NET、JDBC、ODBC等等)均是以行集的结果集一条条进行处理的。所以为解决这一困难,就出现ORM这一个对象和数据之间映射技术。

举例来说,比如要完成一个购物打折促销的程序,用ORM思想将如下实现(引自《深入浅出Hibernate》):
业务逻辑如下:
publicDoublecalcAmount(Stringcustomerid,doubleamount)
{
//根据客户ID获得客户记录
Customercustomer=CustomerManager.getCustomer(custmerid);
//根据客户等级获得打折规则
Promotionpromotion=PromotionManager.getPromotion(customer.getLevel());
//累积客户总消费额,并保存累计结果
customer.setSumAmount(customer.getSumAmount().add(amount);
CustomerManager.save(customer);
//返回打折后的金额
returnamount.multiply(protomtion.getRatio());
}
这样代码就非常清晰了,而且与数据存取逻辑完全分离。设计业务逻辑代码的时候完全不需要考虑数据库JDBC的那些千篇一律的操作,而将它交给CustomerManager和PromotionManager两个类去完成。这就是一个简单的ORM设计,实际的ORM实现框架比这个要复杂的多。


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: