幾年來,我已經寫了一些驗證類,並一直在想,人們認爲是處理它們的最佳方式。驗證結果實踐。布爾還是計數?
我已經看到並完成了以下每一項,並且很好奇你的見解和原因。
場景1中,消息計數
class ValidationClass1
{
public List<string> ValidationMessage { get; set; }
public void Validate(x)
{
// pseudo-code
if (!rule_logic1)
{
ValidationMessage.Add("Error in logic 1");
}
if (!rule_logic2)
{
ValidationMessage.Add("Error in logic 2");
}
}
}
方案2,返回一個對象或元組
class ValidationClass
{
public Tuple<bool, List<string>> Validate(x)
{
List<string> ValidationMessage = new List<string>();
bool passed = true;
// pseudo-code
if (!rule_logic1)
{
ValidationMessage.Add("Error in logic 1");
passed = false;
}
if (!rule_logic2)
{
ValidationMessage.Add("Error in logic 2");
passed = false;
}
return new Tuple<bool, List<string>>(passed, ValidationMessage);
}
}
在情形1中,ValidationMessage列表可以是返回類型爲好。無論如何,調用代碼將不得不檢查列表的count屬性以查看數據是否通過。如果它只是一個單獨的規則,則返回的字符串長度需要通過string.IsNullOrEmpty(x)來檢查。
在場景2中,自定義對象或元組將是返回類型,以便調用代碼必須知道返回的代碼並評估布爾屬性以查看它是否通過,然後驗證消息。
所以,在你看來,你喜歡哪種方式,或者如果你有不同的偏好,我也很好奇。
感謝
我以某種方式使用了驗證模式。對於這樣的事情來說,這是一個很好的模式,因爲它將通知方面與邏輯分開。你認爲這與場景2類似嗎?類似的意圖的對象從Validate方法傳回,或者你覺得這有什麼不同嗎?如果不同,怎麼樣? – JamesEggers 2009-12-15 04:13:11
就我所知,場景2並沒有太大的區別,除了Fowler的方法涉及更多的獨立類以提高重用性和增加可測性。情景2可能難以實現,但這一切都取決於您的需求。 – 2009-12-15 04:29:57