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 ,如需转载请自行联系原作者
相关文章
|
16天前
|
Kubernetes Cloud Native Docker
云原生之旅:从容器到微服务的架构演变
【8月更文挑战第29天】在数字化时代的浪潮下,云原生技术以其灵活性、可扩展性和弹性管理成为企业数字化转型的关键。本文将通过浅显易懂的语言和生动的比喻,带领读者了解云原生的基本概念,探索容器化技术的奥秘,并深入微服务架构的世界。我们将一起见证代码如何转化为现实中的服务,实现快速迭代和高效部署。无论你是初学者还是有经验的开发者,这篇文章都会为你打开一扇通往云原生世界的大门。
|
1天前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
9 3
|
5天前
|
监控 负载均衡 应用服务中间件
探索微服务架构下的API网关设计与实践
在数字化浪潮中,微服务架构以其灵活性和可扩展性成为企业IT架构的宠儿。本文将深入浅出地介绍微服务架构下API网关的关键作用,探讨其设计原则与实践要点,旨在帮助读者更好地理解和应用API网关,优化微服务间的通信效率和安全性,实现服务的高可用性和伸缩性。
24 3
|
9天前
|
存储 Java Maven
从零到微服务专家:用Micronaut框架轻松构建未来架构
【9月更文挑战第5天】在现代软件开发中,微服务架构因提升应用的可伸缩性和灵活性而广受欢迎。Micronaut 是一个轻量级的 Java 框架,适合构建微服务。本文介绍如何从零开始使用 Micronaut 搭建微服务架构,包括设置开发环境、创建 Maven 项目并添加 Micronaut 依赖,编写主类启动应用,以及添加控制器处理 HTTP 请求。通过示例代码展示如何实现简单的 “Hello, World!” 功能,并介绍如何通过添加更多依赖来扩展应用功能,如数据访问、验证和安全性等。Micronaut 的强大和灵活性使你能够快速构建复杂的微服务系统。
32 5
|
17天前
|
消息中间件 Java 网络架构
AMQP与微服务架构的集成策略
【8月更文第28天】在微服务架构中,各个服务通常通过HTTP/REST、gRPC等协议进行交互。虽然这些方法在很多场景下工作得很好,但在需要高并发、低延迟或需要处理大量消息的情况下,传统的同步调用方式可能无法满足需求。此时,AMQP作为异步通信的一种标准协议,可以提供一种更为灵活和高效的消息传递机制。
20 1
|
24天前
|
Java Docker 微服务
微服务架构的概念、特点以及如何在Java Web开发中实现微服务。
微服务架构的概念、特点以及如何在Java Web开发中实现微服务。
50 1
|
28天前
|
监控 负载均衡 API
从单体到微服务:架构转型之道
【8月更文挑战第17天】从单体架构到微服务架构的转型是一项复杂而系统的工程,需要综合考虑技术、团队、文化等多个方面的因素。通过合理的规划和实施策略,可以克服转型过程中的挑战,实现系统架构的升级和优化。微服务架构以其高度的模块化、可扩展性和灵活性,为业务的持续发展和创新提供了坚实的技术保障。
|
1月前
|
Cloud Native 云计算 微服务
云原生时代:企业分布式应用架构的惊人蜕变,从SOA到微服务的大逃亡!
【8月更文挑战第8天】在云计算与容器技术推动下,企业分布式应用架构正经历从SOA到微服务再到云原生的深刻变革。SOA强调服务重用与组合,通过标准化接口实现服务解耦;微服务以细粒度划分服务,增强系统灵活性;云原生架构借助容器化与自动化技术简化部署与管理。每一步演进都为企业带来新的技术挑战与机遇。
80 6
|
1月前
|
设计模式 监控 API
探索微服务架构中的API网关模式
在微服务的宇宙里,API网关是连接星辰的桥梁。它不仅管理着服务间的通信流量,还肩负着保护、增强和监控微服务集群的重任。本文将带你走进API网关的世界,了解其如何成为微服务架构中不可或缺的一环,以及它在实际应用中扮演的角色和面临的挑战。
|
14天前
|
负载均衡 监控 JavaScript
探索微服务架构下的API网关模式
【8月更文挑战第31天】在微服务的大潮中,API网关不仅是流量的守门人,更是服务间通信的桥梁。本文将带你深入理解API网关的核心概念、设计要点及其在微服务架构中的重要作用,同时通过代码示例揭示如何利用API网关提升系统的灵活性与扩展性。