技术开发 频道

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


【IT168技术文档】

  我的网站的架构采用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,大家可以测试一下
0
相关文章