Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 面向对象的业务逻辑设计_C#_Oop - Fatal编程技术网

C# 面向对象的业务逻辑设计

C# 面向对象的业务逻辑设计,c#,oop,C#,Oop,我有一个卖出操作对象和两个买入操作对象,我想实现这样的行为,一个卖出操作解除了两个买入操作,如下所示: 销售操作。出院(OneBuy操作); 手术。出院(双倍手术); 因此,我想问一下,我是应该在Discharge方法中调用repository函数,还是最好在Discharge方法之外调用repository save方法。 比如: 保存(销售操作); 所以,任何人都可以给我一些建议,在这个场景中,您将实现什么?使用服务类或其他更好的方法?保存不应成为业务逻辑的一部分-它会消除在单个工作单元

我有一个卖出操作对象和两个买入操作对象,我想实现这样的行为,一个卖出操作解除了两个买入操作,如下所示:

销售操作。出院(OneBuy操作); 手术。出院(双倍手术);
因此,我想问一下,我是应该在Discharge方法中调用repository函数,还是最好在Discharge方法之外调用repository save方法。 比如:

保存(销售操作);
所以,任何人都可以给我一些建议,在这个场景中,您将实现什么?使用服务类或其他更好的方法?

保存不应成为业务逻辑的一部分-它会消除在单个工作单元中封装大量操作的能力

假设如果twoBuyOperation也可以被解除,那么您只希望解除oneBuyOperation。如果其中一个失败,您不希望任何一个被持久化

如果每次调用Discharge时,它都通过Save方法持久化sellOperation,那么如果第二次更改失败,您将无法可靠地回滚更改

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

    UnitOfWork.CurrentSession.Save(sellOperation);
}
例如。

在这种情况下应用

让所有buy对象注册自己以侦听Sell对象的Discharge()方法调用。并以这种方式称为出院:

sellOperation.Discharge();


你的其他问题正在等待你的答案。如果你认为这个答案对你的问题有帮助或是“答案”,请随意投票和/或接受。
using(UnitOfWork.Start())
{
    sellOperation.Discharge(oneBuyOperation);
    sellOperation.Discharge(twoBuyOperation);  

    UnitOfWork.CurrentSession.Save(sellOperation);
}
sellOperation.Discharge();