我的网站的架构采用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