NHibernate学习手记(2) - NH的系统架构
Hibernate的名气实在太大,甚至已经成为Java社区的持久层技术的事实标准!作为Hibernate的孪生兄弟,NH从一诞生便是头顶光环,难免会给我们这些NH beginner造成或多或少的心理压力,这也可能是为什么.net项目组迟迟不引入O/R mapping的的原因之一。
本文中并不打算评价O/R Mapping到底有什么好处,因为这个话题实在已经过时了。从Java社区对Hibernate等O/R Mapping框架的应用,可以看出业界已经普遍认同O/R Mapping能够帮助我们以OO的方式进行数据库编程,实现更为高效和优雅的开发方式。随着.net社区的逐渐成熟,NH一定会得到更广泛的应用。
主要内容
1、数据库编程方式的进化
2、NH的系统架构
一、数据库编程方式的进化
在开始介绍NH的系统架构之前,先谈谈我所经历的.net项目组进行数据库编程的方式的变化:
过去:主要是调用存储过程,对于比较简单的数据库操作也可直接编写简单的sql语句。
现在:由于存储过程难以维护,所以建议尽量采取执行sql语句的方式进行数据库操作。同时,为了让大家更加容易的执行sql语句,还总结出了DAAB之类的数据库操作辅助包。
下一步:随着系统的不断增大,之前大量采用sql实现业务逻辑的设计和编码的做法会加大我们项目的维护的难度和成本。而且采取上述方式进行数据库开发的效率非常低,开发人员往往花费大量时间在和数据库打交道,更谈不上thinking in OO。数据库编程转向O/R mapping。
二、NH的系统架构
在继续阅读之前,如果你想先体验一下NH的便利和优雅,可以参考一下我之前发的NHibernate学习手记(1) - 对象的简单CRUD操作。
1、术语解释
1)持久化(persistent)和持久化对象(persitent object):在程序运行时创建的对象,并要求保存到数据库、文件等存储介质中。如订单、人员信息等。
2、NH的持久层功能示意
Application即任何需要持久化服务(即数据存储)的应用程序。NH的持久化功能是以服务形式提供的,实现应用程序代码和数据库操作之间的解偶。当然,为了能够使用NH,我们必须要进行一些配置工作。
3、NH系统架构简图
上图传达了NH进行持久化的简单思想。在应用程序(Application)中创建的临时对象(Transient objects),开始是保存在内存中的;接着应用程序和NH进行对话(Session,事先需要先由SessionFactory创建Session),告知NH需要进行的持久化请求;NH根据配置文件把持久化操作转化为相应的数据库操作,调用相应的ADO.Net API执行数据库操作。
4、NH系统架构全景图
下图揭示了NH更多的技术细节,我将在后续的文章中,继续介绍。