随笔-82  评论-920  文章-0  trackbacks-56

NHibernate文档翻译 第1章 体系结构

第1章 体系结构
总览

对NHibernate体系结构的非常高层的概览:

这幅图展示了NHibernate使用数据库和配置文件数据来为应用程序提供持久化服务(和持久化的对象)。

我们试图显示更多NHibernate运行时体系结构的细节。 但挺不幸的,NHibernate是比较灵活的并且提供了好几种不同的运行方式。我们展示一下两种极端情况。轻型体系中,应用程序自己提供ADO.NET连接,并且自行管理事务。这种方式使用了NHibernate API的一个最小子集。

全面解决体系中,对于应用程序来说,所有的底层ADO.NET API都被抽象了,NHibernate会替你照管所有的细节。

下面是图中一些对象的定义:

SessionFactory (NHibernate.ISessionFactory)

对属于单一数据库的编译过的映射文件的一个线程安全的,不可变的缓存快照。它是Session的工厂,是ConnectionProvider的客户。可以持有一个可选的(第二级)数据缓存,可以在进程级别或集群级别保存可以在事物中重用的数据。

会话,Session (NHibernate.ISession)

单线程,生命期短促的对象,代表应用程序和持久化层之间的一次对话。封装了一个ADO.NET连接。也是Transaction的工厂。保存有必需的(第一级)持久化对象的缓存,用于遍历对象图,或者通过标识符查找对象。

持久化对象(Persistent)及其集合(Collections)

生命期短促的单线程的对象,包含了持久化状态和商业功能。它们可能是普通的对象,唯一特别的是他们现在从属于且仅从属于一个Session。一旦Session被关闭,他们都将从Session中取消联系,可以在任何程序层自由使用(比如,直接作为传送到表现层的DTO,数据传输对象)。

临时对象(Transient Object)及其集合(Collection)

目前没有从属于一个Session的持久化类的实例。他们可能是刚刚被程序实例化,还没有来得及被持久化,或者是被一个已经关闭的Session所实例化的。

事务Transaction (NHibernate.ITransaction)

(可选) 单线程,生命期短促的对象,应用程序用它来表示一批工作的原子操作。是底层的ADO.NET事务的抽象。一个Session某些情况下可能跨越多个Transaction 事务。

ConnectionProvider (NHibernate.Connection.ConnectionProvider)

(可选)ADO.NET连接的工厂。从底层的IDbConnection抽象而来。对应用程序不可见,但可以被开发者扩展/实现。

TransactionFactory (net.sf.hibernate.TransactionFactory)

(可选)事务实例的工厂。对应用程序不可见,但可以被开发者扩展/实现。

在上面的轻型结构中,程序没有使用Transaction / TransactionFactory 或者ConnectionProvider API,直接和ADO.NET对话了。

0
0
(请您对文章做出评价)
« 上一篇:NHibernate文档翻译进度&问题收集(持续更新)
» 下一篇:NHibernate文档翻译 第2章 ISessionFactory配置
posted on 2005-11-09 10:18 DDL 阅读(4986) 评论(11)  编辑 收藏 所属分类: NHibernate

评论:
#1楼 2005-11-09 10:34 | 听棠.NET      
确实不错,很希望能看到具体的使用实例讲解,因为NH功能太多,学起来确实有点困难。我一直不太了解NH具体要如何应用,我的SPL就相对简单了许多,而且非常容易理解,因为我抛弃了Relation功能,不过也有SPL特有功能。http://www.cnblogs.com/tintown/
  回复  引用  查看    
#2楼 2005-11-09 10:39 | Yok      
NH和SPL没有可比性, 一个是o/r mapping, 一个是table gateway
  回复  引用  查看    
#3楼 2005-11-09 11:51 | ww      
根据我用NHB的经历,感觉也就是小项目里随便玩玩而已
在对性能有较高要求的项目里,还是老老实实用最原始的方法吧

  回复  引用  查看    
#4楼 2005-11-09 12:24 | 萧远山      
我也正在研究中,但我不同意上面WW的说法,NHB目前的确还不是很成熟,不过它带来的开发上的优势还是很明显的,特别是能通过类的设计模型构建业务实体,这样我们就能通过类图推出实体类及关系,自己写个小工具就能从UML生成实体类及MAPPING文档。
  回复  引用  查看    
#5楼 2005-11-09 13:47 | henry      
NH的开发速的确很快可惜过于复杂,对于效率来说单表的映射操作上效率并不低.对于关系可以通过多个单表映射操作来实现(如果获取1000个记录的,如果存在关系自然会把相应的父读出来,如果更多效率上是成问题).
由于NH比交复杂所以自己写了这个一个东西(代码量也是几千行),除了实现NH的大部份功能还直接对ADO.NET和DATASET支持
http://www.cnblogs.com/Files/henryfan/Example.rar,BLOG上暂没有文章有兴趣多多交流.

  回复  引用  查看    
#6楼 2005-11-09 13:49 | Riancy[未注册用户]
不错,终于有人开始翻译了~~哈哈,正在学呢
  回复  引用    
#7楼[楼主] 2005-11-09 14:15 | DDL      
NH已经实现了Hibernate2.1的绝大部分功能,Hibernate2已经有了很多大型应用,我觉得完全有理由相信NH的性能。

  回复  引用  查看    
#8楼 2005-11-09 18:58 | mzl[未注册用户]
it's cool!
  回复  引用    
#9楼 2005-12-12 13:49 | 玉开      
study nh
  回复  引用  查看    
#10楼 2006-10-08 13:50 | 张豪[匿名][未注册用户]
为什么,到处都是类似的文章,全都是将理论,几乎没有人能把整个 Nhibernate的实例应用从前到后,图形化的讲解一边,要不新手真的很难入门,
  回复  引用    
#11楼 2007-03-27 15:23 | 茄子[未注册用户]
@ww
NHibernate性能还是不错的,
据本人所知,
很多银行证券都用了这个工具

  回复  引用