现在的位置: 首页 > 综合 > 正文

对工作单元——Unit of Work的理解

2013年10月21日 ⁄ 综合 ⁄ 共 787字 ⁄ 字号 评论关闭

首先了解工作单元(Unit of  Work)的意图:维护受业务影响的对象列表,并且协调变化的写入和解决并发问题。

可以用工作单元来实现事务,工作单元就是记录对象数据变化的对象。只要开始做一些可能对所要记录的对象的数据有影响的操作,就会创建一个工作单元去记录这些变化,所以,每当创建、修改、或删除一个对象的时候,就会通知工作单元。

工作单元的关键就是在commit操作中由它决定要做什么:打开一个系统事务(数据库事务),做并发检查,最后向数据库写入所做的修改。工作单元需要知道它应该记录哪些对象,以及如何记录。有3中方式:

调用者注册;

对象自身注册;

Repository注册。

一般采用Repository注册方式来实现工作单元,这样,业务对象完全不关注数据持久化的机制和数据跟踪策略。

IUnitOfWork接口包括新增、更新、删除的register操作,以及一个commit操作

UnitOfWork类实现了IUnitOfWork接口,实现了该接口的4个方法,同时维持了3个映射数组,分别为addedEntities数组、changedEntities数组和removedEntities数组,数组的元素为:< EntityBase, IUnitOfWorkRepository >,即实体和仓储的映射。

实现的前3个方法实际上就是分别向这3个数组中添加映射元素。

实现Commit()方法,主要是运用事务机制,遍历3个数组。对每个数组中的每个映射元素的操作为:(以删除为例)调用removedEntities[entity].PersistDeletedItem(entity);

找到entity对应的repository,并调用该repository的Delete持久化方法。当对这3个数组内的所有元素执行完持久化操作后,作为一个事务提交,若中间出现差错,则回滚。

这样,一个事务就执行完毕了。

抱歉!评论已关闭.