gpt4 book ai didi

c# - 用 Action 包围一个函数

转载 作者:太空宇宙 更新时间:2023-11-03 23:06:39 25 4
gpt4 key购买 nike

我正在开发一个 Asp.net MVC 应用程序,我已经创建了一个错误处理系统,它强制我在我的 BLL 中为每个函数创建以下代码。

try
{
...
_unitOfWork.Save(nameof(Function));
}
catch
{
if (rollbackTo != null)
{
_unitOfWork.RollbackToSave(rollbackTo);
}
else
{
_unitOfWork.Rollback();
}
throw;
}

这基本上允许我管理每个请求的事务,并管理事务的错误处理,而我的 Controller 不知道这样做的实际方式——它只允许它决定事务是否继续(rollbackTo参数)

我想知道的是,有没有办法让我不必一遍又一遍地编写这段代码?我考虑过只抛出一个异常,然后在我的管道中处理它——但是因为我需要向用户返回一个有值(value)的响应,而不仅仅是一个 500 代码——这不是一个真正的选择。我想过也许创建一个调用和抽象方法的基类——并按函数实现它——但这也行不通,因为参数可以改变。有什么想法吗?

最佳答案

是的,这是相当标准的。

例如在基类中

public void DoSomethingAndRollbackThenThrow(Action<IUnitOfWork> action)
{
try
{
...
action(_unitOfWork);
}
catch
{
if (rollbackTo != null)
{
_unitOfWork.RollbackToSave(rollbackTo);
}
else
{
_unitOfWork.Rollback();
}
throw;
}
}

然后你可以像这样从派生类中调用它

public void DoSomethingSpecific()
{
base.DoSomethingAndRollbackThenThrow(unitOfWork => {
_unitOfWork.Save(nameof(Function));
});
}

关于c# - 用 Action 包围一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40970824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com