我有一个销售操作对象和两个购买操作对象,我要实现一个销售操作执行两个购买操作的行为,如下所示:
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);
}
例如。