gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:13:41 26 4
gpt4 key购买 nike

我正在通过其 API 为另一款软件编写插件。 API 返回的类只能通过 native 软件和 API 访问。所以我正在编写自己的独立 POCO/DTO 对象,这些对象映射到 API 类。我正在研究一项功能,该功能将读取 native 文件,并返回我可以从其他地方窃取的这些 POCO 对象的集合。如果需要的话,目前我正在使用 JSON.NET 将这些类序列化为 JSON。

例如我可能有这样一个 DTO

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

..还有像这样的方法将本地“Persons”读入我的 DTO 对象

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

我使用测试文件设置了单元测试,但是在对其他文件运行导出时,我总是遇到意想不到的问题。有时 native 对象会有意想不到的值,或者 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# - 包含错误和返回值的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33354083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com