c# - 从 Validate 函数返回额外信息的最佳实践

标签 c#

我有一个 Employee 类。我希望能够在保存之前对其进行 Validate() 以确保所有字段都已填充有效值。 该类的用户可以在调用 Save() 之前调用 Validate(),或者他们可以直接调用 Save(),然后 Save() 将调用 Validate(),如果验证失败,则可能会抛出异常。

现在,我的(主要)问题是这样的;
如果我的 Validate() 函数返回一个简单的 bool 值,那么我该如何告诉该类的用户出了什么问题,即“电子邮件未填写”、“ID 不唯一”等。为此,我只需要错误字符串传递给人类用户,但如果我想要一个错误代码列表,原理是相同的(除了使位图的使用更合乎逻辑)。

  • 我可以在我的验证函数中使用 Out 参数,但我知道这是不受欢迎的。
  • 我可以从我的函数返回一个字符串数组,然后测试它是否为空(意味着没有错误),而不是返回一个 bool 值 - 但这看起来很乱而且不正确。
  • 我可以创建一个 Struct 只是为了从此方法返回,包括一个 bool 和一个带有错误消息的字符串数组,但看起来很笨重。
  • 我可以返回错误代码的位图而不是 bool 值并查找它,但这似乎太过分了。
  • 我可以在保存错误的对象上创建一个公共(public)属性“ValidationErrors”。但是,这将依赖于我在读取它之前调用 Validate() 或从 Property() 显式调用 Validate,这有点浪费。

我的特定程序是用 C# 编写的,但这看起来像是一个相当通用的“最佳实践”问题,我确信我应该知道答案。非常感谢收到任何建议。

最佳答案

I could create a Struct just to return from this method, including a bool and a string array with error messages, but just seems clunky.

为什么看起来很笨重?创建一个合适的类型来封装信息是完美的。不过,我不一定会使用字符串来编码此类信息。枚举可能更合适。

另一种方法是对返回类型进行子类化,并为每种情况提供一个额外的子类——如果这合适的话。如果可能会发出不止一个故障信号,则可以使用数组。但我也会将其封装在自己的类型中。

一般模式可能是这样的:

class ValidationInfo {
    public bool Valid { get; private set; }
    public IEnumerable<Failure> Failures { get; private set; }
}

关于c# - 从 Validate 函数返回额外信息的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1043579/

相关文章:

c# - CreateGraphics() 方法和 Paint 事件参数

c# - 在日期时间 c# 中格式化字符串以插入 MYSQL 日期时间列

C# 泛型 - 我可以将此类变成泛型吗?

c# - 在控制台应用程序中等待异步操作后,WCF 客户端挂起任何操作

c# - 每个 Asp.net 回发中的 JQuery BlockUI 进度指示器

c# - c#中有没有类似java的@override注解的东西?

c# - 当应用程序是 C# 中的任务栏时,如何监听快捷方式

c# - 我的数据没有保存在我的数据库中 - C# visual studio

c# - 如何在 C# 2012 版中正确清理 Excel 互操作对象

c# - 如何检查 ContentPlaceHolder 是否为空?