代码之家  ›  专栏  ›  技术社区  ›  RKh

优化此验证方法

  •  2
  • RKh  · 技术社区  · 15 年前

    有没有更好和优化的方法来编写这段代码?

        public int ValidateEntries()
        {
            if (this.CompanyName.Length < 6)
            {
                MessageBox.Show("Company name must be of at least six characters.", "Invalid Entry", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return 1;
            }
    
            if (DateTime.Parse(this.FYStarting) > DateTime.Parse(this.FYEnding))
            {
                MessageBox.Show("Invalid financial year period.", "Invalid Entry", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return 1;
            }
            return 0;  //Default error code: 0 : No Error, 1 : Error
        }
    

    我想介绍一下 尝试..抓住 阻止,以防发生任何错误。但这会增加开销。我也想把这些扔掉 如果 s。

    第三,更加优化: 转换.ToDateTime 日期时间.parse ?

    3 回复  |  直到 11 年前
        1
  •  3
  •   Jahan Zinedine    11 年前

    声明性验证是一种最佳方式,使用适合您的验证框架(如 Entlib )

    您必须摆脱当前的解决方案,以更干净、更容易和一致的方式处理交叉问题。

        2
  •  2
  •   The Smallest    15 年前

    更好的方法是划分数据类和UI。使用特殊接口,如 IDataErrorInfo 验证模式将帮助您在将来支持您的代码。

        3
  •  2
  •   CodesInChaos    15 年前

    try 我是。。。 catch 相对便宜。只有在抛出异常时,它才会变得昂贵。

    但我不喜欢你把GUI和逻辑混合在一起的方式。我宁愿提交一个错误列表(在最简单的情况下 List<string> 但可能更复杂),并在每个验证子句中添加错误。最后,您可以检查 errorlist.Count 并显示消息。

    如果您的int始终只代表两个值,那么最好使用bool。

    简化示例:

    public class ErrorList:List<string>
    {
        public bool HasErrors{get{return Count>0;}}
    }
    
    public void ValidateEntries(ErrorList errors)
    {
        if (this.CompanyName.Length < 6)
            errors.Add("Company name must be of at least six characters.");
    
        if (DateTime.Parse(this.FYStarting) > DateTime.Parse(this.FYEnding))
           Errors.Add("Invalid financial year period."
    }
    
    public void CallingFunction()
    {
        var errors=new ErrorList();
        ValidateEntries();
        if(erros.HasErrors)
        {
            ShowMessage(string.Join("\r\n",errors));
            return;
        }
        DoStuff();
    }
    

    根据您的体系结构,您还可以创建一些助手函数或使用更具声明性的设计。但如果不更好地了解你的程序,很难给出更具体的建议。例如,在我的代码中,验证甚至不知道 Form 是和操作 ViewModel 或者更低级的结构。

    例如,ASP.net MVC有它内置的处理验证和错误列表的机制。所以看看你的框架提供了什么。