使用异常阻止系统函数执行是否合理?
业务类校验与异常处理方案
我会先在客户端做校验,但这类业务类可能会被服务器端调用,没法保证客户端的校验一定靠谱,所以我会在业务类里始终执行校验,如果数据无效就直接抛出异常。我觉得异常的使用没什么明确禁忌,而且很普遍,毕竟最后可以在软件的最上层统一捕获处理。
以下是我的实现示例:
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
相关产品推荐
相关产品推荐

