在业务逻辑层中使用Castle Facility Automatic Transaction Management

洪浩
2023-12-01
               

我的网站的架构采用Castle+Ibatis+Asp.net,业务逻辑层的事务处理采用Castle Facility:Automatic Transaction Management ,这是AOP事务方面的一个应用吧,下面介绍一下如何在业务逻辑层中使用这个Facility.这个Faciity作用就是管理事务,依赖于是否抛出异常的结果进行Commit还是rollback.

网站架构中同时用到了iBatis.Net facility ,iBatis.Net facility 实继承接口ITransactionManager,注意主要继承与ITransactionManager接口的facility都可以同Automatic Transaction Management Facility协同工作。目前在Castle的Facility中有NHibernate facility, iBatis.Net facility and db4o facility都是实现了ITransactionManager借口的,也就是说它可以同这几个Facility协同工作,当然你自己也可以实现更多的Facility来使用。

下面介绍一下它的用法:

1、在IOC容器WindsorContainer中注册这个Facility

WindsorContainer container = new WindsorContainer(store);
container.AddFacility( "auto.transaction", new TransactionFacility() );

2、业务逻辑类中使用Transactional attribute 和每一个希望使用事务的方法,例子如下(这是我的网站留言本的业务逻辑类):

using System;
using System.Collections;

using Castle.Services.Transaction;
using Castle.Facilities.IBatisNetIntegration;

using FrameWork.Domain;
using FrameWork.DAO;
using FrameWork.DAO.IDAO;

namespace FrameWork.Service
{
 /// <summary>
 /// LiuyanService 的摘要说明。
 /// </summary>
 [Transactional]
 [UsesAutomaticSessionCreation]
 public class LiuyanService
 {
  private ILiuyanDao _liuyanDao;
  private ISequenceDao _sequenceDao;

  public LiuyanService(ILiuyanDao liuyanDao,ISequenceDao sequenceDao)
  {
   this._sequenceDao = sequenceDao;
   this._liuyanDao = liuyanDao;
  }

  public IList GetLiuyanList()
  {
   return this._liuyanDao.GetLiuyanList();
  }

  [Transaction(TransactionMode.Requires)]
  public virtual  void AddLiuyan(Liuyan liuyan)
  {
   this._liuyanDao.AddLiuyan(liuyan);
  }

  [Transaction(TransactionMode.Requires)]
  public virtual void ModifyLiuyan(Liuyan liuyan)
  {
   this._liuyanDao.ModifyLiuyan(liuyan);
  }

  [Transaction(TransactionMode.Requires)]
  public virtual void DeleteLiuyan(int id)
  {
   this._liuyanDao.DeleteLiuyan(id);
  }

  public Liuyan GetLiuyanInfo(int id)
  {
   return this._liuyanDao.GetLiuyanInfo(id);
  }
 }
}
这里要注意的是,如果你没有定义业务逻辑的接口,则必须将使用事务的方法声明为virtual ,这主要是由于他们的基础是DynamicProxy

备注:

后台数据库可以使任何数据库,充分体现Data Mapping(ORM工具)以及IOC容器的用法,目前由于SQL空间的费用比较高,网站用数据库Access,大家可以测试一下

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

 类似资料: