首页 > 其他分享 >设计模式-工作单元(Unit of Work)

设计模式-工作单元(Unit of Work)

时间:2024-08-12 12:24:00浏览次数:15  
标签:对象 数据库 Work 工作 Unit 注册 设计模式 单元 dirty

工组单元

记录在业务事务过程中对数据库有影响的所有变化。
不合实际的方法:

  • 在每次修改对象模型时对数据库进行相应的修改,但会产生大量小规模的数据库交互,降低性能。
  • 采用一个对整个交互过程都开放的事务,尤其是为避免不一致而跟踪读过的对象

运行机制

维护受业务事务影响的对象列表,并协调变化的写入和并发问题的解决。

使用工作流单元就是为了处理数据库的变化。为此,工作单元需要知道应该记录哪些对象,可以采用:

  • 调用者注册(caller registration)

如果用户改变了某个对象,就必须将它注册到工作单元上,没有注册的对象提交时不会写入数据库。

  • 对象注册(object registration)

调用者不在负责注册,把注册方法置于对象方法中。从数据库中加载的对象会将加载的对象注册为clean,而setting方法会将要设置的对象注册为dirty的。

一般地,工作单元被:放置在一个公共地方;传递给对象;调用(由生成的代码)。

  • 工作单元控制器(unit of work controller)

工作单元控制所有数据库的读操作,一旦读对象,注册为clean,并产生一个拷贝,提交时比较发生的变化。

工作单元的其他用途

  • 当数据库使用引用完整性,而且不能仅仅依靠提交时检查完整性时,用来保证更新顺序,如根据外键决定先写哪张表的细表。
  • 较少死锁的可能性
  • 处理批量更新。批量更新(batch update)的思想是把若干SQL命令作为一个单独的单元发送,这样可以在一次单独的远程调用中得到处理。
  • 用于任何事务资源,调整消息队列和事务监控。
     

使用时机

工作单元解决的基本问题是记录操作过的各种对象,以便知道为了使内存中的数据与数据库同步需要考虑哪些对象。
不用工作单元一些思路:

  • 最简单的方法是,在修改任何一个对象时就显式地保存该对象,
  • 问题:和数据库过多的交互。
  • 可以把对数据库的更新操作放到最后,因此需要记录跟踪。
  • 问题:跟踪变量可以和事务脚本一起工作,但和领域模型很难一起使用
  • 把每个被改变的对象加上dirty标志比变量记录要好,价值体现在对dirty的搜索上
  • 问题:跨越一个更一般的对象网络(如领域模型)比较困难。
     

工作单元示例(java

示例展示了一个工作单元,它能跟踪一个业务事务的所有变化,然后在提交变化时将变化写入数据库。

Step1 创建三个对象列表:new领域对象、dirty领域对象、removed领域对象

Step2 用注册方法维护列表状态,如检查ID的空值,保证一个dirty对象没有注册为new对象

Step3 提交方法为每个对象定位数据映射器,并调用适当的映射方法。

Step4 注册对象。此时,每个领域对象都需要找到服务于当前业务事务的工作单元

Step5 给出抽象领域对象的标记方法,注册领域对象到工作单元。

Step6 具体的领域对象在适当的位置标记自己。

Step7 创建工作单元管理代码。

标签:对象,数据库,Work,工作,Unit,注册,设计模式,单元,dirty
From: https://blog.csdn.net/workflower/article/details/141128018

相关文章

  • 【外观模式】设计模式系列:外观模式的运用与实践(简化复杂子系统)
    文章目录面向对象设计模式之外观模式:简化复杂的子系统引言1.设计模式的概念1.1定义与分类1.2设计模式的目标1.3常见的设计模式1.4面向对象编程原则2.外观模式的定义2.1外观模式的正式定义2.2外观模式的动机2.3外观模式的适用场景3.外观模式的角色和结构3.1......
  • 通过JUnit源码分析学习编程的奇技淫巧
    打开Maven仓库,左边选项栏排在第一的就是测试框架与工具,今天的文章,V哥要来聊一聊程序员必备的测试框架JUnit的源码实现,整理的学习笔记,分享给大家。有人说,不就一个测试框架嘛,有必要去了解它的源码吗?确实,在平时的工作中,我们只要掌握如何使用JUnit框架来帮我们测试代码即可,搞什......
  • 结构开发笔记(二):solidworks软件(一):介绍、下载和安装过程
    前言  部分零件外壳需要结构设计,在proE和solidworks中经过过程对比发现solidworks相对比较符合使用习惯,所以在有proE基础的前提下还是更换了solidworks来进行产品的结构零件设计,其图形直接可以进行3D打印,实现定制化的零件。  本篇介绍solidworks,下载并安装。 Solidwo......
  • 结构开发笔记(三):solidworks软件(二):小试牛刀,绘制一个立方体
    前言  solidworks草图大师,基本的使用过程。  所有的零件基础都是从平面绘制开始,然后凸出来厚度。  本篇绘制一个简单的立方体,熟悉基本操作。 立方体绘制过程  选取一个平面绘制一个立方形,然后拉伸即可。  绘制矩形的方式:    功能所见即所得。  其......
  • 【学习笔记4】论文MAC-SQL: A Multi-Agent Collaborative Framework for Text-to-SQL
    Abstract        最近基于大型语言模型(LLM)的Text-to-SQL方法在处理“庞大”数据库和需要多步推理的复杂用户问题时,通常会遭遇显著的性能下降。此外,大多数现有方法忽视了LLM利用外部工具和模型协作的重要性。为了解决这些挑战,我们提出了MAC-SQL,这是一种新颖的基于......
  • 设计模式 - Singleton pattern 单例模式
    文章目录定义单例模式的实现构成构成UML图单例模式的六种实现懒汉式-线程不安全懒汉式-线程安全饿汉式-线程安全双重校验锁-线程安全静态内部类实现枚举实现总结其他设计模式文章:最后定义单例模式是一种创建型设计模式,它用来保证一个类只有一个实例,并且提供一个......
  • Consider defining a bean of type ‘org.springframework.cloud.client.loadbalancer
    1、bug报错问题:项目启动失败***************************APPLICATIONFAILEDTOSTART***************************Description:Parameter1ofconstructorincom.tianji.learning.controller.InteractionQuestionAdminControllerrequiredabeanoftype'org......
  • java设计模式-桥接模式
     一.概述        桥接模式(BridgePattern)是一种结构型设计模式,用于将抽象部分与其实现部分分离,使它们可以独立地变化。桥接模式主要目的是解决当一个类存在多个继承等级时,由于继承带来的耦合问题,以及扩展性不足的问题。定义:将抽象部分与他的具体实现部分分离,使它们都......
  • Java常见设计模式简介
    设计模式什么是单例,如何实现一个类只能有一个实例,主要用于需要频繁使用的对象避免频繁初始化和销毁来提高性能,或者资源需要相互通信的环境主要实现方式有,饿汉模式,懒汉模式,枚举,静态内部类饿汉模式,是在类加载过程中就将这个单例对象实例化,需要将构造方法私有化,定义一个成员变......
  • Selenium + Python 自动化测试11(unittest组织用例)
            我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。上一篇我们讨论了unittest基本使用方法。        本篇文章我们接着讲。一些概念和一些常用的构造测试集的方法。1、基本概念1)TestCase        一个TestCase的......