NHibernate in action翻译——第二章 2.2节 理解NHibernate的结构
by 苦-咖啡
at 2010-06-23 12:15:00
original http://www.cnblogs.com/kukafeiso/archive/2010/06/23/1763486.html
作者: 苦-咖啡 发表于 2010-06-23 12:15 原文链接 阅读: 828 评论: 1
2.2 理解NHibernate的结构
程序的接口是你最先要学习的。API设计的目的是越少越好,但是ORM的API并不是那么的小。不过不要担心,你不必一次性全部理解所有的NHibernate接口。
Figure2.1说明了NHibernate最重要的接口的角色在业务逻辑层和持久化层。把business层在持久化层的上面是因为业务逻辑是持久化层的一个使用者。
在Figure2.1中的NHibernate接口可以大概分类如下:
1、 接口被程序调用去展示基本的操作(增删查改)。这些是NHibernate的主要接口。它们包括ISession、ITracsaction、IQuery和ICriteria。
2、 接口用来配置NHibernate。最重要的是Configuration类。
3、 回调接口,使程序对事件器作用。例如IInterceptor、ILifecycle和IValidatable。
4、 接口允许扩展NHibernate的映射功能。例如IUserType、ICompositeUserType和IIdentifierGenerator。
NHibernate使用.NET的API,包括ADO.NET和ITransactionAPI。ADO.NET提供了最基础的与数据库发生交互,而且使用ADO.NET可以几乎跟所有的数据库打交道。
在这一节,我们不必覆盖NHibernate API的所有细节,只要知道每一个主要接口的角色就好。我们会逐渐的讨论API方法在下一章。你可以找到NHibernate接口的详细说明在NHibernate的参考文档。让我们主要看一下每一个接口把。
2.2.1 接口的核心
有五个核心的接口我们要讨论,这五个接口会应用在每一个NHibernate应用程序中。使用这些接口,你可以存储、检索持久化类和控制事务。
ISESSION INTERFACE
ISession接口主要被NHibernate应用程序调用。它提供了查找、保存、更新和删除对象的方法。ISession的实例是轻量的,创建和销毁它是不昂贵的。这是非常重要的,因为在你的程序中,你需要经常去创建和销毁session,或许每个ASP.NET页面都要这样做。NHibernate的session不是线程安全的,因此每次只可以有一个线程使用。这个将在后面的章节详细的讨论。
NHibernate可以发现持久化类的改变。我们有时叫ISession为持久化管理器,因为它是持久化对象的操作接口,例如存储、检索对象。NHibernate的session各ASP.NET的session是完全不同的。当我们使用session在这本书时,是指NHibernate的session。
我们将会讨论ISession接口在4.2节。
ISESSIONFACTORY INTERFACE
ISession接口来自于ISessionFactory。对比起ISession接口,这个接口会没有那么激动人心。
ISessionFactory不是轻量级的。它是用来在很多的程序线程中共享的。一般整个应用程序只有一个ISessionFactory的实例——在程序初始化时创建。但是如果你的程序要访问多个数据库,那么你就需要为每一个数据库添加一个SessionFactory了。
SessionFactory可以生成SQL和其他NHibernate在运行时使用的元元素。它同样可以缓存一些数据以便复用。
CONFIGURATION INTERFACE
Configuration对象是用来配置NHibernate的。应用程序使用一个Configuration实例来指定映射文件的位置,和在创建ISessionFactory之前去设置NHibernate的指定属性。
即使Configuration接口在NHibernate应用程序中只是作用的范围很少,但是当你使用NHibernate时,它是你首先要接触的对象。
ITRANSACTION INTERFACE
在Figure2.1中,ITransaction接口就在ISession接口的旁边。ITransaction接口是可选的。NHibernate程序可以选择不使用这个接口,而使用一些底层的代码来管理事务。ITransaction接口是从底层的事务继承而来的——例如ADO.NET事务或其他类型的事务。
我们会在整本书中使用ITransaction的API。我们将会在第五章讨论Transaction和ITransaction接口。
IQUERY AND ICRITERIA INTERFACES
IQuery接口给了你一种非常有效的方法去对数据库进行查询。Query是用HQL或者数据库的自然语言SQL来书写。一个IQury实例是轻量级的,我们不可以在ISession之外使用它,因为IQuery是由ISession创建的。它用来绑定查询的参数,控制返回结果的数量和执行查询语句。
ICriteria接口类似;它云系你创建和执行面向对象的查询。
我们将在第七章讨论IQuery接口的特性。现在我已经向你介绍了NHibernate的主要API。下一节,我将介绍一些高级的特性。之后我会介绍怎么配置NHibernate和怎样才能看到NHibernate在后台是怎样执行的。
2.2.2 Callback接口
Callback接口允许程序当对象发生一些事情的时候,程序会收到一个通知。例如,当一个对象加载、保存或者删除时,程序会收到一个通知,然后程序会作出一些反应(用户自定义)。NHibernate应用程序不必应用这些回调函数,但是在一些特定情况下,它们是非常有用的。
ILifecycle和IValidatable接口允许持久化对象对自身的的一些生命周期的事件发生反应。持久化对象的生命周期包括创建、检索、更新和删除。
IInterceptor接口可以让对象发生回调而不用让持久化类继承特定的API,只需要把IInterceptor作为参数传到持久化类的实例即可。我们将在第八章讨论。
2.2.3 类型
NHibernate中的类型是非常值得关注的。一个NHibernate的类型匹配一个.NET类型到一个数据库类型。NHibernate的设计非常的灵活,因为每一个数据库的类型对应.NET中的类型都是不一样的,但是NHibernate做到了。
NHibernate包括丰富的内置类型,包括所有.NET的基础类型和很多CLR类,包括System.DateTime、System.Enum、byte[]、Serializable等等。
而且,NHibernate支持用户自定义类型。IUserType、ICompositeUserType和IParameterizedType提供了让你创建自定义的类型。你也可以使用IUserCollectionType来创建自己的集合类型。自定义类型被认为是NHibernate的中心特性。
我们将在6.1节介绍NHibernate的类型和用户自定义类型。我们现在继续讨论底层接口,你可能不需要使用或明白所有的接口,但是知道他们的存在可以让你在设计的时候更加灵活。
2.2.4 Extesion接口
大部分的功能都是NHibernate定义好的了。但是当你发现内置的功能不能满足你的时候,你可以使用Extesion来扩展NHibernate。Extesion接口包括以下几点:
1、 主键生成(IIdentifierGenerator接口)
2、 支持SQL方言(Dialect抽象类)
3、 缓存策略(ICache和ICacheProvider接口)
4、 ADO.NET连接管理(IConnectionProvider接口)
5、 事务管理(ITransactionFactory和ITransaction接口)
6、 ORM策略(IClassPersister接口)
7、 属性访问策略(IPropertyAccessor接口)
8、 代理(IProxyFactory接口)
你不必知道所有的API和接口。我们不需要所有的。例如一个简单的应用程序,你可能只需要Configuration和ISession接口,如“Hello World”例子那样。但是在你开始使用NHibernate之前,你应该要明白NHibernate的配置是怎么样的,我们将在下一节讨论。
最新新闻:
· Google Music 云音乐服务细节出炉(2010-06-23 22:15)
· eBay前CEO入选全球最富有白手起家女性(2010-06-23 21:40)
· App Store对苹果毛利润贡献仅为1%(2010-06-23 21:32)
· IE9 Platform Preview 3今天发布 提供HTML5视频支持(2010-06-23 20:21)
· 谁是MySQL的新主人(2010-06-23 20:19)
编辑推荐:苹果编程语言和 API 的未来