zoukankan      html  css  js  c++  java
  • 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的配置是怎么样的,我们将在下一节讨论。

     

  • 相关阅读:
    7月31号
    7月29号
    性能优化、微服务、并发编程、开源框架、分布式,面试你还缺什么
    Java 异常_2
    Java 异常浅学
    Java IO浅学
    Java File文件的读写
    Java BufferedReader 控制台输入
    Java 内部类
    Java 动静态绑定
  • 原文地址:https://www.cnblogs.com/kukafeiso/p/1763486.html
Copyright © 2011-2022 走看看