zoukankan      html  css  js  c++  java
  • NHibernate实践与模式

     

    NHibernate实践与模式

    NHibernate是一款非常优秀的O/R mapping的开源框架,再还没有.net的时候它已经存在于java环境中。

    下面我们先看一下它的框架



    工作原理

    将数据库表结构映射成实体类(xml-mapping文件,实体类 ,class文件),支持一对多,多对一,多对多的关系,默认生成对这些表的CURD操作,包括多表脊联操作(select,insert,update,delete),也可以通过xml文件的配置作自定义的查询,或是调用存储过程。

    CURD的操作语句可以从源代码看,它是生成的是参数形势的sql脚本并且支持特别的参数,,oracleto_date,to_char等;

    从上图可以看出实现了数据库的无关性,开发人员无须关心底层的数据库类型。也没有比必要再去为对数据库表的操作写任何t-sql脚本,只需要专著业务层面的开发。从而大大减少sql层的bug和开发时间,提高开发效率。

    开发环境

    Vs.net 2005, NHibernate 1.20(正是版),MyGeneration 1.3

    MyGeneration是一款开源代码生成工具,它的模块更新比较快而且相对于一些开源的项目支持的比较多,所以我选它,而没有选择codesmith

    当然还有很多NHibernate的开发框架大家可以在www.codeproject.com,www.codeplex.com上找到。

    开发步骤

    一般我们是在先有数据库表结构的情况下,一层一层往上写,先创建数据库表,然后写数据库访问层的代码(可以通过一些通用的ado.net类库完成如 Enterpriselibrary),接下来开始编写业务曾代码,和UI实现。

    当然也可以反过来。先把业务实体抽象出来,包括需要实现的功能,操作,返回的信息,通过对业务实体。然后再去创建数据库表,和UI的部分;

    我还是按在有数据表的情况下如何用NHibernate作开发

    1.MyGeneration创建实体类和mapping文件选择NHibernate lujan99 1.06这个模 块他提供可以方便实现1-n,n-1,n-nmapping非常方便使用


    2.在项目中加载这些创建好的文件建议加载到一个新的项目比如BusinessModule

    3.接下去网上下载几个通用的类库文件包括配置文件NHibernateSessionManager.cs(用来创建session和管理session, NHibernateSessionModule.cs(session绑定到每个http请求上去), hibernate.cfg.xml(配置信息,包括数据库类型,连接字符窜,加载的实体类程序集)

    4.修改一下web.config文件加载NHibernateSessionModule

    <modules>

    <addname="ScriptModule"preCondition="integratedMode"type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

    </modules>

    5.基本配置完成,下面就是开始写代码了

    代码实践与模式

    下面是我的设计实现。


        定义
    CRUD的接口使用了一个范性,实现这个接口的是我定义的两个IApplicationRepositoryISiteRepository两个接口,这两个只对IRepository的范性作了实现. 另外如果需要对业务逻辑的抽象操作在这里扩展它的方法。



        开发一个
    AbstractRepository实现IRepository这个接口的CRUD操作。SiteAddressRespository基层AbstractRepository实现ISiteAddressRespository里面定义的业务逻辑,作为SiteAddressRespository这个的代码只需要包括实现ISiteAddressRespository定义的接口方法,而无需再去实现CRUD的操作。减少了代码编写工作。



        开发一个抽象工厂类
    (其实这里用一个简单工厂模式也能实现)去创建ISiteRepository,IApplicationRepository,降低代码之间的耦合度。

    总结

    使用O/R mapping确实能够提高开发效率,减少了开发过程中产生的低级bug,对新手很容易上手,对整个项目的层次更加明显,耦合度降低。方便扩展,很好的隔离变化。

  • 相关阅读:
    Linux文件系统之INode
    手写Netty之多路复用Select小案例
    多路复用器Select、Poll、Epoll区别梳理
    NAT模式、路由模式、桥接模式的区别
    Netty编解码器(理论部分)
    Netty之Unpooled_Bytebuf
    为什么 TCP 协议有粘包问题
    IDEA_2019.1版本中Protobuf的使用
    Netty服务端Server代码说明
    Netty之ChannelHandler
  • 原文地址:https://www.cnblogs.com/neozhu/p/1015299.html
Copyright © 2011-2022 走看看