我有一个类(class)的员工。我希望能够在保存之前对其进行Validate(),以确保所有字段均已填充有有效值。
该类的用户可以在调用Save()之前调用Validate(),也可以直接调用Save(),然后Save()随后将调用Validate(),并且如果验证失败,则可能引发Exception。

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

  • 我可以在我的Validate函数中使用Out参数,但是我知道这是不合时宜的。
  • 除了返回 bool 值,我还可以从函数中返回一个字符串数组,然后测试它是否为空(表示没有错误)-但这看起来很困惑,不正确。
  • 我可以创建一个Struct只是为了从该方法返回,包括 bool 和带有错误消息的字符串数组,但是看起来很笨拙。
  • 我可以返回错误代码的位图,而不是 bool 值,然后查找它,但这似乎相当过多。
  • 我可以在保存错误的对象上创建一个公共(public)属性“ValidationErrors”。但是,这将取决于我在读取它之前调用Validate()还是从Property()中显式调用Validate,这有点浪费。

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

    最佳答案

    我可能会选择位图选项。简单地

    [Flags]
    public enum ValidationError {
        None = 0,
        SomeError = 1,
        OtherError = 2,
        ThirdError = 4
    }
    

    ...以及在调用代码中,只需:
    ValidationError errCode = employee.Validate();
    if(errCode != ValidationError.None) {
        // Do something
    }
    

    对我来说似乎不错而紧凑。

    关于c# - 从验证功能中回馈额外信息的最佳实践,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1043579/

    10-12 06:44