NHibernate in action翻译——第二章 2.2节 理解NHibernate的结构

2.2 理解NHibernate的结构

程序的接口是你最先要学习的。API设计的目的是越少越好,但是ORMAPI并不是那么的小。不过不要担心,你不必一次性全部理解所有的NHibernate接口。

Figure2.1说明了NHibernate最重要的接口的角色在业务逻辑层和持久化层。把business层在持久化层的上面是因为业务逻辑是持久化层的一个使用者。

Figure2.1中的NHibernate接口可以大概分类如下:

1、 接口被程序调用去展示基本的操作(增删查改)。这些是NHibernate的主要接口。它们包括ISessionITracsactionIQueryICriteria

2、 接口用来配置NHibernate。最重要的是Configuration类。

3、 回调接口,使程序对事件器作用。例如IInterceptorILifecycleIValidatable

4、 接口允许扩展NHibernate的映射功能。例如IUserTypeICompositeUserTypeIIdentifierGenerator

    NHibernate使用.NETAPI,包括ADO.NETITransactionAPIADO.NET提供了最基础的与数据库发生交互,而且使用ADO.NET可以几乎跟所有的数据库打交道。

    在这一节,我们不必覆盖NHibernate API的所有细节,只要知道每一个主要接口的角色就好。我们会逐渐的讨论API方法在下一章。你可以找到NHibernate接口的详细说明在NHibernate的参考文档。让我们主要看一下每一个接口把。

 

2.2.1 接口的核心

     有五个核心的接口我们要讨论,这五个接口会应用在每一个NHibernate应用程序中。使用这些接口,你可以存储、检索持久化类和控制事务。

     ISESSION INTERFACE

     ISession接口主要被NHibernate应用程序调用。它提供了查找、保存、更新和删除对象的方法。ISession的实例是轻量的,创建和销毁它是不昂贵的。这是非常重要的,因为在你的程序中,你需要经常去创建和销毁session,或许每个ASP.NET页面都要这样做。NHibernatesession不是线程安全的,因此每次只可以有一个线程使用。这个将在后面的章节详细的讨论。

     NHibernate可以发现持久化类的改变。我们有时叫ISession为持久化管理器,因为它是持久化对象的操作接口,例如存储、检索对象。NHibernatesessionASP.NETsession是完全不同的。当我们使用session在这本书时,是指NHibernatesession

     我们将会讨论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事务或其他类型的事务。

     我们会在整本书中使用ITransactionAPI。我们将会在第五章讨论TransactionITransaction接口。

     IQUERY AND ICRITERIA INTERFACES

     IQuery接口给了你一种非常有效的方法去对数据库进行查询。Query是用HQL或者数据库的自然语言SQL来书写。一个IQury实例是轻量级的,我们不可以在ISession之外使用它,因为IQuery是由ISession创建的。它用来绑定查询的参数,控制返回结果的数量和执行查询语句。

     ICriteria接口类似;它云系你创建和执行面向对象的查询。

     我们将在第七章讨论IQuery接口的特性。现在我已经向你介绍了NHibernate的主要API。下一节,我将介绍一些高级的特性。之后我会介绍怎么配置NHibernate和怎样才能看到NHibernate在后台是怎样执行的。

 

2.2.2 Callback接口

     Callback接口允许程序当对象发生一些事情的时候,程序会收到一个通知。例如,当一个对象加载、保存或者删除时,程序会收到一个通知,然后程序会作出一些反应(用户自定义)。NHibernate应用程序不必应用这些回调函数,但是在一些特定情况下,它们是非常有用的。

     ILifecycleIValidatable接口允许持久化对象对自身的的一些生命周期的事件发生反应。持久化对象的生命周期包括创建、检索、更新和删除。

     IInterceptor接口可以让对象发生回调而不用让持久化类继承特定的API,只需要把IInterceptor作为参数传到持久化类的实例即可。我们将在第八章讨论。

 

2.2.3 类型

     NHibernate中的类型是非常值得关注的。一个NHibernate的类型匹配一个.NET类型到一个数据库类型。NHibernate的设计非常的灵活,因为每一个数据库的类型对应.NET中的类型都是不一样的,但是NHibernate做到了。

     NHibernate包括丰富的内置类型,包括所有.NET的基础类型和很多CLR类,包括System.DateTimeSystem.Enumbyte[]Serializable等等。

     而且,NHibernate支持用户自定义类型。IUserTypeICompositeUserTypeIParameterizedType提供了让你创建自定义的类型。你也可以使用IUserCollectionType来创建自己的集合类型。自定义类型被认为是NHibernate的中心特性。

     我们将在6.1节介绍NHibernate的类型和用户自定义类型。我们现在继续讨论底层接口,你可能不需要使用或明白所有的接口,但是知道他们的存在可以让你在设计的时候更加灵活。

 

2.2.4 Extesion接口

    大部分的功能都是NHibernate定义好的了。但是当你发现内置的功能不能满足你的时候,你可以使用Extesion来扩展NHibernateExtesion接口包括以下几点:

1、 主键生成(IIdentifierGenerator接口)

2、 支持SQL方言(Dialect抽象类)

3、 缓存策略(ICacheICacheProvider接口)

4、 ADO.NET连接管理(IConnectionProvider接口)

5、 事务管理(ITransactionFactoryITransaction接口)

6、 ORM策略(IClassPersister接口)

7、 属性访问策略(IPropertyAccessor接口)

8、 代理(IProxyFactory接口)

      你不必知道所有的API和接口。我们不需要所有的。例如一个简单的应用程序,你可能只需要ConfigurationISession接口,如“Hello World”例子那样。但是在你开始使用NHibernate之前,你应该要明白NHibernate的配置是怎么样的,我们将在下一节讨论。

 

posted on 2010-06-23 12:15  谭英智  阅读(1852)  评论(2编辑  收藏  举报

导航