亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

驗證是否應該更改數據?

驗證是否應該更改數據?

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 關注
  • 173 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號