gpt4 book ai didi

model-view-controller - 如何处理业务逻辑错误和警告,应该/应该在 ASP.NET MVC 的当前 View 中修复?

转载 作者:行者123 更新时间:2023-12-03 07:43:18 25 4
gpt4 key购买 nike

我正在开发一个可以很好地分离所有内容的应用程序。正在实现 MVC 和 MVVM。

我想知道的是处理业务逻辑错误和警告的简洁方法。特别是那些可以由当前 View 处理的。我们正在使用数据注释来验证 ViewModel,但这并没有涵盖所有内容,只是 ViewModel 的正确性。不应在 ViewModel 中验证业务规则,这些由业务层应用。 (例如检查重复名称)。

我们应该如何将业务/服务层的业务逻辑错误和警告传递给 Controller ​​?

如果我们使用异常 (icw HandleErrorAttribute),我们将不得不在 Controller 中实现我们并不真正想要的部分业务逻辑。如: Controller 需要“了解”业务规则。除此之外,此属性还希望将我们重定向到另一个 View 。

我正在考虑 BusinessResult 类,但这是正确的方法吗?

类似于:

    class BusinessResult<T>
{
public T Result { get; }
public bool HasErrors { get; }
public bool HasWarnings { get; }
...
}

最佳答案

简短回答:我不会那样做。

长答案:

我的假设是,由于 BusinessResult 是通用的,您的每个服务(或业务方法,但这无关紧要)都将返回 BusinessResult 但它将被关闭,即 BusinessResult<SomeType> .

  1. 这并不理想。我宁愿查看服务或方法并知道它具体返回给我的是什么,而无需阅读 API 文档。例如,

    public Customer GetCustomer(int customerId);

  2. 您将面临的另一个问题是您的调用代码将始终必须检查 HasErrors 以确定服务调用是否成功。您将有很多类似的代码:

    var customer = GetCustomer(customerId);
    if (customer.HasErrors)
    {
    // Do something here...
    }
    else
    {
    // Proceed normally...
    }

  3. 此外,如果上述代码不检查错误,那么在以某种奇怪的错误形式向最终用户弹出之前,它可能不会被注意到。

  4. 错误,因为它不是异常,所以不会在调用链中冒泡。如果调用者有一些代码可以处理所有未处理的异常,则它不会到达它们的日志记录或其他目的。

  5. 如果你在 web 前端使用一些库,比如 jQuery,如果服务返回 HasError 为 true,它仍然会成功

    $.ajax({
    url: url,
    data: data,
    success: success,
    dataType: dataType
    });

    在上面的成功中,您需要检查 HasError 并且...您知道这是怎么回事。

如果您查看 .NET 框架,他们会竭尽全力避免这种设计。例如,此代码不会返回 true 或 false(类似于您的 HasErrors 标志):

var intValue = int.Parse("123");

如果成功则返回解析后的值,否则抛出异常。他们故意这样做是为了强制调用者处理错误,否则它就会冒泡。他们走得更远,使用了如下所示的尝试模式:

int number;
bool result = Int32.TryParse(value, out number);
if (result)
{
Console.WriteLine("Converted '{0}' to {1}.", value, number);
}

在某种程度上,他们强制调用者用 out 变量玩所有这些体操,所以他们的意图非常明确:我不会调用抛出异常的方法,而是尝试这个,因为我会检查方法是否返回一个假的并处理它。现在编写此调用代码的开发人员不能犯忘记检查成功或失败的无辜错误;如果开发人员编写了所有那些花哨的(如果我可以的话)代码,就不会。

总而言之,我会遵循最佳实践:尽量返回你所 promise 的,如果有异常情况,则返回异常。如果您正在构建 RESTful 服务,请遵循其返回 HTTP 错误代码的准则:您的客户将期望这些错误代码并且他们熟悉它们。如果您正在构建 WCF 而不是遵循 RESTful,则抛出错误异常:您的 SOAP 客户端将熟悉这一点。这不会是一个小 secret ,即“每次调用我的 API 时检查 HasErrors 标志”。

关于model-view-controller - 如何处理业务逻辑错误和警告,应该/应该在 ASP.NET MVC 的当前 View 中修复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40418189/

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