前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NHibernate实践与模式

NHibernate实践与模式

作者头像
阿新
发布2018-04-12 19:06:32
7900
发布2018-04-12 19:06:32
举报
文章被收录于专栏:c#开发者c#开发者c#开发者

NHibernate实践与模式

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

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

工作原理

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

CURD的操作语句可以从源代码看,它是生成的是参数形势的sql脚本并且支持特别的参数,如,oracle的to_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-n的mapping非常方便使用

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的接口使用了一个范性,实现这个接口的是我定义的两个IApplicationRepository,ISiteRepository两个接口,这两个只对IRepository的范性作了实现. 另外如果需要对业务逻辑的抽象操作在这里扩展它的方法。

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

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

总结

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2007-12-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 工作原理
  • 开发环境
  • 开发步骤
  • 代码实践与模式
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档