为了账号安全,请及时绑定邮箱和手机立即绑定

以相同的格式处理错误和成功

以相同的格式处理错误和成功

C#
繁华开满天机 2022-10-23 15:14:20
我正在尝试创建一个更强大的方法,该方法根据结果返回两种不同的对象类型。如果结果为负,则返回 CustomError 对象,但如果结果为正,则返回 Auto 对象。下面的例子来演示。自动服务.cspublic class AutoService {        public async Task<object> Create(NewAuto model)        {            var auto = new Auto {              Type = model.Type,              Year = model.Year,              // other parameters            }            try {            await _autoDb.Create(auto);            }                catch (Exception e) {// return this error object if something broken                return new CustomError { Message = "It is broken" }                }//return the Auto entity if successful                return auto;            }    }自定义错误.cspublic class CustomError {     public string Message {get;set;}}在当前格式中,当调用 Create 方法时,我需要转换结果,这会带来令人头疼的问题(例如,针对 CustomError 或 Auto 类进行转换)。有什么建议我可以如何正确地做到这一点?
查看完整描述

2 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

为什么不创建一个类来表示结果,例如:


class EntityResult<T> {

    public EntityResult(T entity) {

        Success = true;

        Entity = entity;

    }


    public EntityResult(string error) {

        Success = false;

        Error = error;

    }


    bool Success {get; }

    T Entity { get; }

    string Error { get; }

}

用法如下:


public async Task<EntityResult<Auto>> Create(NewAuto model) {

    var auto = new Auto {

        Type = model.Type,

        Year = model.Year,

        // other parameters

    };

    try {

        await _autoDb.Create(auto);

        return new EntityResult(auto);

    } catch (Exception e) {

        // return this error object if something broken

        return new EntityResult<Auto>("Error goes here");

    }

}


查看完整回答
反对 回复 2022-10-23
?
开满天机

TA贡献1786条经验 获得超13个赞

我不会使用返回类型来表示两种不同的结果,例如成功和失败。这将使代码难以理解,并且随着时间的推移,您(可能)会发现返回类型将被滥用并扩展为包含其他(不相关的?/不必要的?)信息。

将 应用于Single Responsibility Principle返回类型:

  • 如果调用成功,则返回正确的对象,即Auto

  • 如果调用失败(即您捕获了异常),则创建一个自定义异常以将该失败传回调用堆栈。您的异常名称将使代码比在通用对象中包含错误更清晰。

此外,如果您使用异常处理而不是具有两个目的的对象,您的调用代码将更加简洁(并且更易于维护)。把事情简单化。


查看完整回答
反对 回复 2022-10-23
  • 2 回答
  • 0 关注
  • 70 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信