NHibernate持久化类与领域模型详解

需积分: 0 1 下载量 194 浏览量 更新于2024-07-20 收藏 2.31MB DOC 举报
"NHibernate之旅系列,介绍如何使用NHibernate进行对象关系映射和领域模型设计。" 在这次的NHibernate之旅中,我们将深入探讨如何利用这个强大的ORM框架进行软件开发。NHibernate是一个流行且功能丰富的.NET框架,它使得在.NET应用中管理数据库对象变得简单而高效,将对象模型与关系型数据库进行无缝对接。 首先,我们来看一下项目的结构。项目分为几个关键部分: 1. Domain(领域模型):这部分是应用程序的核心,包含了业务逻辑和数据实体。这里的类对应于数据库中的表,通过O/R Mapping(对象关系映射)与数据库交互。持久化类定义了业务对象的属性,如`Customer`类,它有`Id`、`FirstName`和`LastName`等属性。 2. Data(DataAccessLayer数据访问层):这个层负责处理数据库的CRUD(创建、读取、更新、删除)操作。它封装了与数据库交互的具体细节,使得业务逻辑层可以专注于业务规则,而不是数据库操作。 3. Data.Test(数据访问层测试):使用单元测试框架如NUnit,对数据访问层的功能进行验证,确保代码的正确性。 4. Web:这一层是用户界面,通常包括ASP.NET或其他Web技术实现的页面。在这个系列中,Web部分未被详细讨论,但通常会包含控制器、视图和模型等组件。 在项目引用方面,每个层都依赖于必要的库和组件: - Domain层引用了Iesi.Collections.dll,提供了Set集合类型,以及Castle动态代理,用于实现懒加载和其他特性。 - Data层不仅引用了NHibernate.dll作为主要的ORM框架,还引用了Iesi.Collections.dll,以及与动态代理相关的程序集。同时,它也依赖于Domain层,以便操作业务对象。 - Data.Test层则需要NHibernate和Iesi.Collections.dll用于测试,以及Nunit.framework.dll进行单元测试,并且依赖于Domain和Data层。 在设计Domain时,遵循以下规则很重要: - **持久化类**:这些类应尽可能地保持POCO(Plain Old CLR Objects)状态,即简单的.NET对象,不带有任何特定框架的标记。例如,`Customer`类就是一个简单的POCO,其属性通过getter和setter访问。 - **属性访问权限**:属性可以是public、internal、protected、protectedinternal或private,NHibernate通过getter和setter访问数据。 - **虚拟属性**:由于NHibernate利用动态代理来实现懒加载和其他优化,所以持久化类的公共方法、属性和事件需要声明为virtual。否则,可能会导致`NHibernate.InvalidProxyTypeException`异常。 总结起来,这个系列的NHibernate之旅将带领我们逐步了解如何构建基于NHibernate的.NET应用,从设计领域模型到实现数据访问层,再到测试和优化。通过学习,我们可以掌握如何有效地利用ORM框架,提高开发效率,减少与数据库交互的复杂性。