编程语言
首页 > 编程语言> > c# – 包含返回值错误的设计模式

c# – 包含返回值错误的设计模式

作者:互联网

我正在通过其API编写另一个软件的加载项. API返回的类只能通过本机软件和API进行访问.所以我正在编写自己独立的POCO / DTO对象,这些对象映射到API类.我正在研究一个将在原生文件中读取的功能,并返回这些POCO对象的集合,我可以偷到其他地方.目前我正在使用JSON.NET将这些类序列化为JSON,如果这很重要的话.

例如,我可能有像这样的DTO

public class MyPersonDTO
{
    public string Name {get; set;}
    public string Age {get; set;}
    public string Address {get; set;}       
}

..和这样的方法将本地“人”读入我的DTO对象

public static class MyDocReader
{
    public static IList<MyPersonDTO> GetPersons(NativeDocument doc)
    {
        //Code to read Persons from doc and return MyPersonDTOs
    }
}

我有一个测试文件的单元测试设置,但是当我在其他文件上运行导出时,我一直遇到意外问题.有时原生对象会有意想不到的值,或者API中存在缺陷,当没有理由时会抛出异常.

目前,当发生“特殊”事件时,我只记录异常,导出失败.但我已经决定我宁愿导出我能做的事情,并在某处记录错误.

最简单的选择是只记录并吞下异常并返回我能做的事情,然而我的调用代码无法知道何时出现问题.

我正在考虑的一个选项是将错误字典作为单独的输出参数返回.密钥将标识无法读取的属性,该值将包含异常/错误的详细信息.

public static class MyDocReader
{
    public static IList<MyPersonDTO> persons GetPersons(NativeDocument doc, out IDictionary<string, string> errors)
    {
        //Code to read persons from doc
    }
}

或者,我也在考虑将错误存储在返回对象本身中.这会使我的对象的大小膨胀,但还有一个额外的好处就是直接将错误存储在我的对象中.因此,如果某人的导出产生错误,我不必担心在他们的计算机上追踪正确的日志文件.

public class MyPersonDTO
{
    public string Name {get; set;}
    public string Age {get; set;}
    public string Address {get; set;}

    public IDictionary<string, string> Errors {get; set;}   
}

这通常如何处理?是否有另一种报告错误的选项以及我没有考虑的返回值?

解决方法:

您可以将结果包装在回复或响应消息中,而不是将错误作为实体的一部分返回.然后,错误可能是响应消息的一部分而不是实体.

这样做的好处是实体是干净的

缺点是将错误映射回有问题的实体/属性将更加困难.

在发送批次实体时,这种下行可能是一个大问题.当API更加面向单个实体时,它就没那么重要了.

标签:c,design-patterns,exception-handling,error-logging
来源: https://codeday.me/bug/20190519/1136439.html