OO设计用于业务逻辑

时间:2010-04-30 05:17:33

标签: c# oop

我有一个卖出操作对象和两个买入操作对象,我想实现一个卖出操作排出两个买入操作的行为,它看起来像:

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


所以我想问一下我是否应该在Discharge方法中调用存储库函数,或者我最好在Discharge方法之外调用存储库save方法。 像:

opRepository.Save(sellOpertion);

所以任何人都可以给我一些建议,你将在这个场景中实现什么?使用Service类还是更好的方法?

2 个答案:

答案 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