我有一个销售操作对象和两个购买操作对象,我要实现一个销售操作执行两个购买操作的行为,如下所示:


sellOperation.Discharge(oneBuyOperation);
sellOperation.Discharge(twoBuyOperation);



所以我想问我是否应该在Discharge方法中调用存储库函数,还是最好在Discharge方法之外调用存储库save方法。
喜欢:

opRepository.Save(sellOpertion);


因此,任何人都可以给我一些建议,在这种情况下您将实现什么?使用服务类或其他更好的方法?

最佳答案

保存不应成为业务逻辑的一部分-它消除了将多个操作包装在单个工作单元中的能力。

假设您也希望同时释放两个BuyOperation,则希望一个OneBuyOperation被解除。如果任何一个失败,您都不希望被持久化。

如果每次调用Discharge都会通过Save方法保持一次sellOperation,则如果第二个失败,您将无法可靠地回滚更改。

using(UnitOfWork.Start())
{
    sellOperation.Discharge(oneBuyOperation);
    sellOperation.Discharge(twoBuyOperation);

    UnitOfWork.CurrentSession.Save(sellOperation);
}


例如。

07-24 19:59