这里以一个三层实例来说明服务组件在业务逻辑中的应用。
业务操作:删除产品,并删除产品的报价。
先来看数据层的声明:
[Transaction(TransactionOption.Supported)]
public DbObject : ServicedComponent {
}
public DbObject : ServicedComponent {
}
public Products() : DbObject {
public void Delete( int productId ) {
//...
}
}
public Prices() : DbObject {
public void DeleteByProductId( int productId ) {
//...
}
}
DbObject是数据对象的基类,从ServicedComponent继承,数据对象只支持事务,这样做的目的是将事务的控制权放在业务层,从而更好的控制业务逻辑。同时,不需要事务支持的操作也可以访问数据对象。
再来看业务层的声明:
[Transaction(TransactionOption.Required)]
public ProductCO : ServicedComponent {
public void Delete( int productId ) {
try {
(new Product()).Delete( productId );
(new Prices()).DeleteByProductId( productId );
ContextUtil.SetComplete();
}
catch ( Exception e ) {
ContextUtil.SetAbort();
throw e;
}
}
}
public ProductCO : ServicedComponent {
public void Delete( int productId ) {
try {
(new Product()).Delete( productId );
(new Prices()).DeleteByProductId( productId );
ContextUtil.SetComplete();
}
catch ( Exception e ) {
ContextUtil.SetAbort();
throw e;
}
}
}
ProductCO为产品控制对象,也从ServicedComponented继承,它请求一个事务。
当操作成功时提交事务,出现异常时回滚事务。
博客以三层实例说明服务组件在业务逻辑中的应用,业务操作是删除产品及其报价。介绍了数据层声明,数据对象基类从ServicedComponent继承,事务控制权在业务层。还说明了业务层声明,产品控制对象请求事务,操作成功提交,出现异常回滚。





