2017-09-15 46 views
0

我有一个场景,我通常检索一个对象,我们称之为UserRights。 如果一切正常,则填充对象。 但如果出现问题,我想知道出了什么问题,为什么。通常我会抛出异常,但由于各种原因,我不能抛出异常。在不抛出异常的情况下拉对象时返回错误数据?

我想添加两个字段到返回对象,ErrorCode(int)和ErrorReason(字符串)。 如果Errorcode == 0,那么一切都很好,对象被填充。但如果它不是0,那么出现了问题,我需要查看ErrorReason以查明原因。

我能看到的最大问题就是我必须更新每一个对象,并且要调用这些额外的字段。

有没有其他可能的方式更好地返回错误数据呢?

+0

“我能看到的最大问题是,我必须更新每一个对象,并且这是为了迎合这些额外的领域。” - 你会付出多少努力?为什么? – Fildor

回答

0

我不知道你的应用程序架构,所以很难说肯定,但你有一些选择;

选项1

定义一个基类,然后所有的其他类可以从这个继承;

public class MyBase { 
    public int ErrorCode { get; set; } 
    public string ErrorMessage { get; set; } 

    public MyBase() 
    { 
     ErrorCode = 0; 
     ErrorMessage = null; // or ""; 
    } 
} 

然后,您将努力限制为只需要更新这些如果您有错误。

但是您必须更新所有其他类以从中继承。 (一个痛苦,如果你有很多,那么你可以使用下面的选项2)

选项2

如果你只在你返回你的结果几个地方,那么你就可以在你面前修改您回应发送。

定义与上面相同的类,但包含用于响应的额外属性。如此;

public object MyResponse { get; set; } 

然后,当你返回你的结果时创建这个类的一个实例。如果您有错误更新它们并将MyResponse保留为空。 否则,将您的正常响应对象放在MyResponse中并将其返回。

选项3

定义同一个班以上,但不继承它。 更改您的响应,以便返回一个通用对象。

当你返回你的对象时,返回正确的对象或者在出错的情况下只返回Error对象。

然后你的接收函数需要确定返回的类的类型并处理它。

选项4

你可能有单独的错误报告。
当你有错误时,你只需要一个参考号码,并在其他地方记录你的错误。

接收器获取该参考号而不是结果,然后查找以确定实际的错误是什么。

+1

选项1听起来不错。由于我仍然必须创建这些具有默认“成功”选项的类,实际上可以缩短我的开发时间,所以我只需要解决问题。 – KizilKar

相关问题