为了账号安全,请及时绑定邮箱和手机立即绑定

验证是否应该更改数据?

验证是否应该更改数据?

C#
烙印99 2023-09-24 16:08:50
我有一些用于验证的服务。它们包含简单的数据验证和一些更复杂的业务逻辑的组合。其中一些验证调用还会“清理”数据,使其符合我们的标准。这似乎应该在其他地方完成(单一责任)。我对验证数据的理解是,它只是回答是/否问题(是否有效)并可能返回一些验证消息。因此它将返回一个布尔值或某种类型的验证错误。如果我们想在保存或处理之前格式化数据,我们应该有另一层代码来清理数据格式。看看下面的例子。我们有两种方法来检查字符串的长度。如果长度正确,第二个还会将其转换为上部。因此,它会在其过程中更改字符串。问题:我的核心问题是,在谈论验证时,我们是否应该关心清理/格式化数据?换句话说,验证是否应该改变数据?public class ValidationService{    public bool ValidateText(string text)    {        bool rtn = false;        if (IsStringCorrectLength(text))        {            rtn = true;        }        return rtn;    }    public bool ValidateTextAndFormat(string text)    {        bool rtn = false;        if (IsStringCorrectLength(text))        {            text = text.ToUpper();            rtn = true;        }        return rtn;    }    private bool IsStringCorrectLength(string text)    {        bool rtn = false;        if (text.Length < 11)        {            rtn = true;        }        return rtn;    }}
查看完整描述

2 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

当你“闻到”这应该是单独的问题。

  1. 验证问题

  2. 操纵/标准化问题

这将防止调用验证时的复杂性和“奇怪”的副作用(更改数据),并且它确保验证只关心检查验证而不关心“如何”格式化数据。

如果您将它们连接在一起,那么您将无法“重用”这些组件,甚至无法干净地测试它们。它还会鼓励您在验证中添加更多操作和业务逻辑,并慢慢地削弱您的开发。


查看完整回答
反对 回复 2023-09-24
?
慕容3067478

TA贡献1773条经验 获得超3个赞

也许这就是您想要采取的方法:


public class ValidationService

{

    private const int MaximumStringLength = 11;


    public bool IsStringValid(string text)

    {

        return IsStringLengthCorrect(text) && IsStringUpper(text);

    }


    public bool IsStringLengthCorrect(string text)

    {

        return text.Length < MaximumStringLength;

    }


    public bool IsStringUpper(string text)

    {

        return text.All(x => char.IsUpper(x));

    }


    public string ValidateStringLength(string text)

    {

        if (IsStringLengthCorrect(text))

        {

            return text;

        }

        else

        {

            return text.Substring(0, MaximumStringLength);

        }

    }


    public string ValidateStringUpper(string text)

    {

        if (IsStringUpper(text))

        {

            return text;

        }

        else

        {

            return text.ToUpper();

        }

    }

}

在我看来,验证类应该只检查并返回文本是否有效。


无论如何,通过良好的命名、顺序和方法,您可以提供返回有效输入的方法。


查看完整回答
反对 回复 2023-09-24
  • 2 回答
  • 0 关注
  • 127 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信