c# - 验证是否应该更改数据?

标签 c# .net validation

<分区>

我有一些用于验证的服务。它们既包含简单的数据验证,也包含一些更复杂的业务逻辑。其中一些验证调用还会“清理”数据,使其符合我们的标准。这似乎应该在其他地方完成(单一职责)。

我对验证数据的理解是,它只是回答是/否问题(是否有效)并可能返回一些验证消息。因此它将返回一个 bool 值或某种类型的验证错误。

如果我们想在保存或处理之前格式化数据,我们应该有另一层代码来清理数据格式。

看看下面的例子。我们有两种方法都可以检查字符串的长度。如果长度正确,第二个还会将其转换为上层。因此,它会在其过程中更改字符串。

问题:我的核心问题是,在谈论验证时,我们是否应该关注清理/格式化数据?换句话说,验证是否应该改变数据?

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;
    }
}

最佳答案

正如您“闻到”的那样,这应该是单独的关注点。

  1. 验证问题
  2. 操纵/规范化问题

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

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

关于c# - 验证是否应该更改数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57674814/

相关文章:

.net - 为什么对象一旦超出范围就不会被清理?

.net - Excel VBA 网页抓取 - 自动化错误/未指定错误

.net - .Net Identity 在哪里存储我的用户数据

javascript - Jquery 表单验证

php - Validator EmailAddress 可以验证电子邮件数组

jquery - 正则表达式中的限制器 {} 错误

javascript - 按下按键后立即填充结果

c# - 使用不同随机数生成器的分布式计算

c# - 如何防止用户共享同一帐户? (ASP.NET MVC)

C# UWP 应用程序调用了为不同线程编码的接口(interface)