事务封装的界定

功能描述:

添加商品 addProduct<ID,name,desc>,商品有一些基本的信息,比如价格,名称,描述等, 除此之外,商品还可以有图片.图片可以有多张,比如商品有缩略图,清晰图,颜色图,并且在展示商品时,希望在不同的位置显示不同的图片.并且有可能某种类型图片只能为控制为一张,当新上传一张该类型的图片,则原来的图片被替换.


初步的设计:如图


Public Class ProductTransaction
{
private ImgDao imgDao;
private ProductDao productDao;
public void AddProduct(Product product)
{
daoManager.BeginTransaction();
try
{
productDao.AddProduct(product);
imgDao.AddImg(Product.ImgList);
daoManager.CommitTransaction();
}
catch
{
daoManager.RollBackTransaction();
}
}

public void UpdateProduct(Product product)
{
daoManager.BeginTransaction();
try
{
productDao.UpdateProduct(product);
imgDao.Del(Product.ID);//先删
imgDao.AddImg(Product.ImgList);
//在添加
daoManager.CommitTransaction();
}
catch
{
daoManager.RollBackTransaction();
}
}

public Set GetImgList(string ProductID)
{
//根据商品ID获取商品图片
}
public Set GetImgList(string ProductID,string ImgType)
{
//根据商品ID获取商品某类型(imgType)的图片
}
}

因为以后想可以对商品图片单独进行一个维护. 我想抽出一个图片事务"ImgTransaction",那么"ProductTransaction"可以用"ImgTransaction"完成原来的添加图片功能,那么这里就:


public void AddProduct(Product product)
{
daoManager.BeginTransaction();
try
{
productDao.AddProduct(product);
daoManager.CommitTransaction();
}
catch
{
daoManager.RollBackTransaction();
}

imgTransaction.AddImg(Product.ImgList);//添加图片
}

这样做本来一个事务的变成了两个事务,这样有损性能. 后来觉得没必要抽出一个图片事务"ImgTransaction", 但用"ProductTransaction"是否合理?

我对图片类型的处理感觉不妥, 要做到不同位置展示不同图片,只能通过GetImgList(string ProductID,string ImgType)来取, ProductID是商品ID,ImgType是
图片类型.这里应该怎样设计?请高手指教.
[该贴被willem于2008-03-24 11:43修改过]
[该贴被admin于2008-03-29 08:44修改过]

首先 没有必要为事务专门做一个类,ProductTransaction

可以用ProductService这样业务服务来封装。只要你将一个操作封装在一个事务过程中就可以,没有必要再专门搞多个Transaction,问题复杂化,性能急剧降低。

>我对图片类型的处理感觉不妥, 要做到不同位置展示不同图片
那就专门建立一个位置或类型类表达所在位置,注意get之类不要事务,不要将业务建模和具体技术平台事务混合在一起,加剧设计的复杂性。