如何让这个验证逻辑更好?
How to make this validation logic better?
我的验证层中有一段代码,如 ----
if (string.IsNullOrEmpty(model.CreditCard) && string.IsNullOrEmpty(model.Billing))
{
failures.Add(new FailedValidation(
"Billing",
"Billing definition incorrect."));
}
if (!string.IsNullOrEmpty(model.CreditCard) && !string.IsNullOrEmpty(model.Billing))
{
failures.Add(new FailedValidation(
"Billing",
"Billing definition incorrect."));
}
至少应提供 model.Billing
或 model.CreditCard
之一的要求。两者都不能提供。
现在,我要验证第三个新属性 - model.DebitCard
- 验证逻辑变得更加混乱,因为我必须提供组合。
至少应提供一项,且仅应提供其中一项,否则验证失败。
如何以可扩展且高效的方式编写此逻辑,以便如果明天有第四个属性也可以轻松地考虑在内?
您可以将这些字段组合在一起并检查它们以确保只有一个是非空的。
也许这对你有用:
var fields = new List<string> { model.CreditCard, model.Billing };
if (fields.Count(x => !string.IsNullOrEmpty(x)) != 1)
failures.Add(new FailedValidation("Billing", "Billing definition incorrect."));
你考虑过异或状态吗?
bool isValid = !string.IsNullOrEmpty(model.CreditCard) ^ !string.IsNullOrEmpty(model.Billing);
if (!isValid)
{
failures.Add(new FailedValidation(
"Billing",
"Billing definition incorrect."));
}
我的验证层中有一段代码,如 ----
if (string.IsNullOrEmpty(model.CreditCard) && string.IsNullOrEmpty(model.Billing))
{
failures.Add(new FailedValidation(
"Billing",
"Billing definition incorrect."));
}
if (!string.IsNullOrEmpty(model.CreditCard) && !string.IsNullOrEmpty(model.Billing))
{
failures.Add(new FailedValidation(
"Billing",
"Billing definition incorrect."));
}
至少应提供 model.Billing
或 model.CreditCard
之一的要求。两者都不能提供。
现在,我要验证第三个新属性 - model.DebitCard
- 验证逻辑变得更加混乱,因为我必须提供组合。
至少应提供一项,且仅应提供其中一项,否则验证失败。
如何以可扩展且高效的方式编写此逻辑,以便如果明天有第四个属性也可以轻松地考虑在内?
您可以将这些字段组合在一起并检查它们以确保只有一个是非空的。
也许这对你有用:
var fields = new List<string> { model.CreditCard, model.Billing };
if (fields.Count(x => !string.IsNullOrEmpty(x)) != 1)
failures.Add(new FailedValidation("Billing", "Billing definition incorrect."));
你考虑过异或状态吗?
bool isValid = !string.IsNullOrEmpty(model.CreditCard) ^ !string.IsNullOrEmpty(model.Billing);
if (!isValid)
{
failures.Add(new FailedValidation(
"Billing",
"Billing definition incorrect."));
}