NHibernate 架构浅析

简介:

先看一张非常高层次的、抽象的 NHibernate 架构视图。从这张图可以看出, NHibernate 使用数据库和配置数据为应用程序提供持久化服务(以及持久化对象)。

NHibernate 高级架构视图

我们可能更希望看到它的更加详细的运行时架构,然而由于 NHibernate 是很灵活的,它支持不同的用法,所以这个运行时架构视图也有不同的版本,下面展示两个极端的 NHibernate 运行时架构。

轻量级的架构可以让应用程序提供自己的 ADO.NET 连接并管理事务, 这种用法仅使用了 NHibernate API 的最小子集,如下图所示。

"Lite" Architecture of NHibernate

全功能架构使应用程序与底层的 ADO.NET API 抽象隔离, 而让 NHibernate 关注具体实现。

 “Full cream” Architecture of NHIbernate

该架构视图中几个对象的定义:

  • ISessionFactory  (NHibernate.ISessionFactory) 
    经过编译的单个数据库的映射的缓存, 是线程安全的且不可变的, 是 ISession 的工厂,  IConnectionProvider 的客户端, 可能保存用于跨事务的二级缓存数据, 是进程级别或者群集级别的对象。
  • ISession (NHibernate.ISession) 
    单线程,生命周期短的对象,表示应用程序和持久化存储之间的一个对话, 封装一个 ADO.NET 连接。 它是 ITransaction 的工厂,保存持久化对象的一级缓存, 在对象图中导航或者按照标识查找对象时使用。
  • Persistent Objects and Collections 
    持久化对象与集合,包含持久化状态和业务功能的单线程、短周期对象, 通常可以是一般对象 (POCO), 唯一的特殊性是与一个且只有一个 ISession 相关联, 一旦 Session 被关闭, 他们将会与 Session 分离, 从而可以在应用程序任意层使用(例如直接被用作进出表示层的数据传输对象)。
  • Transient Objects and Collections 
    没有与 ISession 关联的持久化类的实例。他们可能由应用程序初始化且不做持久化,也可能是被一个已经关闭的 ISession 初始化。
  • ITransaction (NHibernate.ITransAction) 
    抽象事务,一个单线程的短周期对象,被应用程序用来表示原子单位的工作, 使应用程序和底层的 ADO.NET 事务相隔离,在某些情况下,一个 ISession 需要跨越多个事务。(这是一个可选对象)
  • IConnectionProvider (NHibernate.Connection.IConnectionProvider) 
    ADO.NET 连接和命令的工厂, 将应用程序与特定数据库实现的 IDbConnection 和 IDbCommand , 不向应用程序暴露,但是可以被开发人员扩展或实现。(这是一个可选对象)
  • IDriver (NHibernate.Driver.IDriver) 
    封装不同的 ADO.NET 之间的差异的接口, 比如参数命名转换、受支持的 ADO.NET 特性等。(这是一个可选对象)
  • ITransactionFactory (NHibernate.Transaction.ITransactionFactory) 
    ITransaction 的工厂, 不向应用程序暴露,但是可以被开发人员扩展或实现。(这是一个可选对象)

在轻量级架构中,应用程序绕开 ITransaction/ITransactionFactory 和 /IConnectionProvider ,直接使用 ADO.Net 事务。

张志敏所有文章遵循创作共用版权协议,要求署名、非商业 、保持一致。在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处。

本博客已经迁移到 GitHub , 围观地址: http://beginor.github.io/

本文转自张志敏博客园博客,原文链接:http://www.cnblogs.com/beginor/archive/2011/02/11/1951400.html ,如需转载请自行联系原作者
相关文章
|
27天前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
2月前
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
44 3
|
2月前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
26天前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
150 68
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
28天前
|
设计模式 负载均衡 监控
探索微服务架构下的API网关设计
在微服务的大潮中,API网关如同一座桥梁,连接着服务的提供者与消费者。本文将深入探讨API网关的核心功能、设计原则及实现策略,旨在为读者揭示如何构建一个高效、可靠的API网关。通过分析API网关在微服务架构中的作用和挑战,我们将了解到,一个优秀的API网关不仅要处理服务路由、负载均衡、认证授权等基础问题,还需考虑如何提升系统的可扩展性、安全性和可维护性。文章最后将提供实用的代码示例,帮助读者更好地理解和应用API网关的设计概念。
62 8
|
2月前
|
Dubbo Java 应用服务中间件
服务架构的演进:从单体到微服务的探索之旅
随着企业业务的不断拓展和复杂度的提升,对软件系统架构的要求也日益严苛。传统的架构模式在应对现代业务场景时逐渐暴露出诸多局限性,于是服务架构开启了持续演变之路。从单体架构的简易便捷,到分布式架构的模块化解耦,再到微服务架构的精细化管理,企业对技术的选择变得至关重要,尤其是 Spring Cloud 和 Dubbo 等微服务技术的对比和应用,直接影响着项目的成败。 本篇文章会从服务架构的演进开始分析,探索从单体项目到微服务项目的演变过程。然后也会对目前常见的微服务技术进行对比,找到目前市面上所常用的技术给大家进行讲解。
59 1
服务架构的演进:从单体到微服务的探索之旅
|
2月前
|
负载均衡 Java 持续交付
深入解析微服务架构中的服务发现与负载均衡
深入解析微服务架构中的服务发现与负载均衡
76 7
|
2月前
|
消息中间件 运维 Kubernetes
后端架构演进:从单体到微服务####
本文将探讨后端架构的演变过程,重点分析从传统的单体架构向现代微服务架构的转变。通过实际案例和理论解析,揭示这一转变背后的技术驱动力、挑战及最佳实践。文章还将讨论在采用微服务架构时需考虑的关键因素,包括服务划分、通信机制、数据管理以及部署策略,旨在为读者提供一个全面的架构转型视角。 ####
37 1
|
2月前
|
弹性计算 运维 开发者
后端架构优化:微服务与容器化的协同进化
在现代软件开发中,后端架构的优化是提高系统性能和可维护性的关键。本文探讨了微服务架构与容器化技术如何相辅相成,共同推动后端系统的高效运行。通过分析两者的优势和挑战,我们提出了一系列最佳实践策略,旨在帮助开发者构建更加灵活、可扩展的后端服务。
|
2月前
|
消息中间件 运维 Cloud Native
云原生架构下的微服务优化策略####
本文深入探讨了云原生环境下微服务架构的优化路径,针对服务拆分、通信效率、资源管理及自动化运维等核心环节提出了具体的优化策略。通过案例分析与最佳实践分享,旨在为开发者提供一套系统性的解决方案,以应对日益复杂的业务需求和快速变化的技术挑战,助力企业在云端实现更高效、更稳定的服务部署与运营。 ####

热门文章

最新文章