C# 如何避免重复的if-else系列代码气味
学习C#4.5。我的吼叫语法太多,如果其他系列它似乎代码气味,想要一种方法来避免这种气味。任何类型的帮助都是可以接受的。多谢各位C# 如何避免重复的if-else系列代码气味,c#,code-cleanup,C#,Code Cleanup,学习C#4.5。我的吼叫语法太多,如果其他系列它似乎代码气味,想要一种方法来避免这种气味。任何类型的帮助都是可以接受的。多谢各位 public bool CheckValidCustomer() { return _checkManager.IsCustomerPersonal(_customer) ? IsValidPersonalCustomer() : IsValidCompanyCustomer(); } private bool IsValidCompanyCustomer(
public bool CheckValidCustomer()
{
return _checkManager.IsCustomerPersonal(_customer) ? IsValidPersonalCustomer() : IsValidCompanyCustomer();
}
private bool IsValidCompanyCustomer()
{
if (_checkManager.IsValidFinancialInfo(_customer) == false)
{
ProcessMessage = "Please Check Financial Info.";
return false;
}
if (_checkManager.IsValidCompanyInfo(_customer) == false)
{
ProcessMessage = "Please Check Company Info.";
return false;
}
if (_checkManager.IsValidStakeHolderInfo(_customer) == false)
{
ProcessMessage = "Please Check Stake Holder Info.";
return false;
}
if (_checkManager.IsValidResponsiblePersonInfo(_customer) == false)
{
ProcessMessage = "Please Check Responsible person Info.";
return false;
}
if (_checkManager.IsValidScreeningInfo(_customer) == false)
{
ProcessMessage = "Please Check Screening Info .";
return false;
}
if (_checkManager.IsValidMyNumberUpload(_customer) == false)
{
ProcessMessage = "Please Check My Number Upload Info.";
return false;
}
if (_checkManager.IsValidIdUpload(_customer) == false)
{
ProcessMessage = "Please Check Id Upload Status.";
return false;
}
if (_checkManager.IsValidCustomerStatus(_customer) == false)
{
ProcessMessage = "Please Check Customer Status.";
return false;
}
return true;
}
private bool IsValidPersonalCustomer()
{
if (_checkManager.IsValidPersonalInfo(_customer)==false)
{
ProcessMessage = "Please Check Personal Info.";
return false;
}
if (_checkManager.IsValidFinancialInfo(_customer)==false)
{
ProcessMessage = "Please Check Financial Info.";
return false;
}
if (_checkManager.IsValidCompanyInfo(_customer)==false)
{
ProcessMessage = "Please Check Company Info.";
return false;
}
return true;
}
您可以使用验证规则模式。 创建一组验证规则。然后一个接一个地把它们都看一遍。如果任何一条验证规则失败,则完整验证将失败(取决于业务规则)
您还可以参考(数据验证->验证过程部分),了解设计自己的验证规则引擎的想法。我的个人建议:
你可以这样做
private bool IsValidCompanyCustomer()
{
var companyValidationRules = new Dictionary<string, Func<Customer, bool>>
{
{ "Please Check Financial Info.", _checkManager.IsValidFinancialInfo},
{ "Please Check Company Info.", _checkManager.IsValidCompanyInfo},
{ "Please Check Stake Holder Info.", _checkManager.IsValidStakeHolderInfo},
{ "Please Check Responsible person Info.", _checkManager.IsValidResponsiblePersonInfo},
{ "Please Check Screening Info.", _checkManager.IsValidScreeningInfo},
{ "Please Check My Number Upload Info.", _checkManager.IsValidMyNumberUpload},
{ "Please Check Id Upload Status.", _checkManager.IsValidIdUpload},
{ "Please Check Customer Status.", _checkManager.IsValidCustomerStatus},
};
var failedRule = companyValidationRules.Where(d => !d.Value(_customer))
.Select(d => d.Key)
.FirstOrDefault();
if (!string.IsNullOrWhiteSpace(failedRule))
{
this.ProcessMessage = failedRule;
return false;
}
return true;
}
private bool IsValidPersonalCustomer()
{
var companyValidationRules = new Dictionary<string, Func<Customer, bool>>
{
{ "Please Check Personal Info.", _checkManager.IsValidPersonalInfo},
{ "Please Check Financial Info.", _checkManager.IsValidFinancialInfo},
{ "Please Check Company Info.", _checkManager.IsValidCompanyInfo},
};
var failedRule = companyValidationRules.Where(d => !d.Value(_customer))
.Select(d => d.Key)
.FirstOrDefault();
if (!string.IsNullOrWhiteSpace(failedRule))
{
this.ProcessMessage = failedRule;
return false;
}
return true;
}
private bool IsValidCompanyCustomer()
{
var companyValidationRules=新字典
{
{“请检查财务信息”。_checkManager.IsValidFinancialInfo},
{“请检查公司信息”。\u checkManager.IsValidCompanyInfo},
{“请检查股东信息。”,_checkManager.isvalidMakeHolderInfo},
{“请检查负责人信息”。\u checkManager.IsValidResponsiblePersonInfo},
{“请检查筛选信息。”,_checkManager.IsValidScreeningInfo},
{“请检查我的号码上载信息。”,_checkManager.IsValidMyNumberUpload},
{“请检查Id上载状态。”,_checkManager.isvalidUpload},
{“请检查客户状态”。_checkManager.IsValidCustomerStatus},
};
var failedRule=companyValidationRules.Where(d=>!d.Value(\u客户))
.选择(d=>d.Key)
.FirstOrDefault();
如果(!string.IsNullOrWhiteSpace(failedRule))
{
this.ProcessMessage=failedRule;
返回false;
}
返回true;
}
private bool IsValidPersonalCustomer()
{
var companyValidationRules=新字典
{
{“请检查个人信息。”,_checkManager.IsValidPersonalInfo},
{“请检查财务信息”。_checkManager.IsValidFinancialInfo},
{“请检查公司信息”。\u checkManager.IsValidCompanyInfo},
};
var failedRule=companyValidationRules.Where(d=>!d.Value(\u客户))
.选择(d=>d.Key)
.FirstOrDefault();
如果(!string.IsNullOrWhiteSpace(failedRule))
{
this.ProcessMessage=failedRule;
返回false;
}
返回true;
}
}在Check manager中实现某种类型的“ValidateCompanyCustomer”。将每个“IsValidCompanyInfo”作为验证器“策略”实施。每个验证器策略都可以实现一个“检查”方法。然后,检查管理器将有一个IEnumerable的验证器策略来运行它。然后,您还可以单独测试每个验证器策略,而不是if/else语句。因为这是一段工作代码,StackOverflow不是发布这个问题的合适地方。这属于:你可能想去图书馆看看。