我是一名大多数自学成才的程序员,我从未真正理解的一个方面是如何返回数据(松散使用的术语)和方法中的状态消息。
例如,假设我有一个采用搜索词并返回查询结果的方法。如果调用者返回一个空数据集,它将如何知道它是否为空,因为没有匹配项或为空,因为与数据库的连接存在错误。
我使用了使用out或ref参数的API,但似乎不太理想。也许这是例外的全部要点。如果它无法连接到数据库,该方法将抛出异常,因此调用者将知道它是否收到没有结果而没有异常,然后根本就没有结果。我是否会创建自己的对象,其中包含数据和状态消息?
也许我正在思考这个问题,或者错过了OOP的一些基本观点。
我希望了解从方法返回状态或错误消息和数据的最佳方法。
我不确定这是属于程序员还是StackOverflow,因为它可能被认为是主观的,如果Stack是错误的地方,那就很抱歉。
答案 0 :(得分:2)
这是例外情况的一部分。
在他的书Clean Code中,作者谈到了如何引起混淆,开始没有参与,或者返回那些本来是无效方法的价值。
通过阅读来理解代码变得更加困难。
例如people.Find(“John”)应返回Johns列表,或单个John或抛出异常。
这里需要注意的是异常可能很昂贵,因此您不希望将它们用于控制流程。
因此,对于搜索,如果没有结果无关紧要,那么只返回null(或空列表。)
答案 1 :(得分:1)
我个人更喜欢使用out
来返回方法中的状态和值
该方法应返回状态enum
,结果作为输出参数。
ResultTypeEnum MyMethod(in param1, blah param2, out MyType returnValue);
如果您需要返回多个参数,我建议您创建一个包含所有结果的结构或类:
struct MyType {
int blah;
Myblah hello;
}
这样您就没有多个out
参数,也不会因为参数混乱而重载您的方法。
抛出异常应该留作最后的手段。只有在方法中存在需要立即引起注意的严重错误时,才应该抛出异常。如果您只想返回方法的状态,则应使用枚举。
答案 2 :(得分:0)
您不希望对“正常程序流”使用例外。现在谈到用户输入时,我通常认为错误很正常,但问题是无法连接到数据库是否“正常”。 - 我也发现自己想知道“查找”功能是否应该像连接数据库一样。
我建议您单独调用数据库连接。也许你传递给find方法的DatabaseConnection
对象,或者具有find方法的类也有一个isConnected方法,所以调用者可以检查这种方式。