我有一个卖出操作对象和两个买入操作对象,我想实现一个卖出操作排出两个买入操作的行为,它看起来像:
sellOperation.Discharge(oneBuyOperation); sellOperation.Discharge(twoBuyOperation);
所以我想问一下我是否应该在Discharge方法中调用存储库函数,或者我最好在Discharge方法之外调用存储库save方法。
像:
opRepository.Save(sellOpertion);
所以任何人都可以给我一些建议,你将在这个场景中实现什么?使用Service类还是更好的方法?
答案 0 :(得分:4)
保存不应该是业务逻辑的一部分 - 它会消除在单个工作单元中包含大量操作的能力。
假设您只需要释放oneBuyOperation,那么也可以释放两个购买操作。如果其中一个失败,您不希望任何一个持久化。
如果每次调用Discharge都会通过Save方法持久保存sellOperation,那么如果第二个失败,您将无法可靠地回滚更改。
using(UnitOfWork.Start())
{
sellOperation.Discharge(oneBuyOperation);
sellOperation.Discharge(twoBuyOperation);
UnitOfWork.CurrentSession.Save(sellOperation);
}
例如。
答案 1 :(得分:0)
在这种情况下应用 Observer Pattern 。
让所有购买对象注册自己来监听Sell对象的Discharge()方法调用。并以这种方式呼叫放电:
sellOperation.Discharge();
http://en.wikipedia.org/wiki/Observer_pattern
http://www.dofactory.com/Patterns/PatternObserver.aspx