You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用异常阻止系统函数执行是否合理?

业务类校验与异常处理方案

我会先在客户端做校验,但这类业务类可能会被服务器端调用,没法保证客户端的校验一定靠谱,所以我会在业务类里始终执行校验,如果数据无效就直接抛出异常。我觉得异常的使用没什么明确禁忌,而且很普遍,毕竟最后可以在软件的最上层统一捕获处理。

以下是我的实现示例:

public abstract class Worker<TArgument, TResult>
{
    protected abstract Task Validation(TArgument argument);
    public async Task<TResult> Execute(TArgument argument)
    {
        await Validation(argument);
        try
        {
            var result = await MasterExecute(argument);
            await Log(argument, result, null);
            return result;
        }
        catch (Exception e)
        {
            await Log(argument, default, e);
            throw;
        }
    }
    protected abstract Task<TResult> MasterExecute(TArgument argument);
    protected Task Log(TArgument argument, TResult? result, Exception? error)
    {
        /*save log events*/
        return Task.CompletedTask;
    }
}

public record Person(string Name, string LastName, DateTime Birthday);
public class PersonAgeDaysCalculate : Worker<Person, double>
{
    protected override Task<double> MasterExecute(Person argument)
    {
        var result = DateTime.Now - argument.Birthday;
        return Task.FromResult(result.TotalDays);
    }
    protected override Task Validation(Person argument)
    {
        if (argument.Birthday == default)
            throw new InvalidDataException("Birthday can not be empty");
        if (argument.Birthday > DateTime.Now)
            throw new InvalidDataException("Birthday can not more of now date");
        return Task.CompletedTask;
    }
}

内容的提问来源于stack exchange,提问作者BQF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 02:42:07