你的通用验证界面的第一个水平,这给提供这两种结果的类型和模式的灵活性需要被验证:
public interface IValidate<T, R>
where T : class
where R : class // where T is any custom result and R is your custom model
{
T Validate(R model);
}
比方说,我需要验证这将通过不同的处理公司政策用上干脆:
public interface IValidateCompanyPolicies : IValidate<ValidationResult1, Company>
{
ValidationResult1 Validate(Company model);
}
同样,我也需要检查公司货币帐户,税收,审计等:
public interface IValidateCompanyAccounts : IValidate<ValidationResult2, Company>
{
ValidationResult2 Validate(Company model);
bool HasAuditPassed(Company model);
}
Resp。类处理这两种IValidate接口
public class ValidateCompanyPolicies : IValidateCompanyPolicies
{
ValidationResult1 Validate(Company model)
{
// Hit stored procedure corresponding to company policies validation
}
}
public class ValidateCompanyAccounts : IValidateCompanyAccounts
{
ValidationResult2 Validate(Company model)
{
// Hit stored procedure corresponding to company's monetary accounts validation
}
bool HasAuditPassed(Company model)
{
// Hit stored procedure corresponding to get company audit results
}
}
我的最终类,它需要进行确认后执行所有业务集约化经营:
public class XYZCompany
{
private IValidateCompanyPolicies companyPoliciesValidation;
private IValidateCompanyAccounts companyAccountsValidation;
public XYZCompany(
IValidateCompanyPolicies companyPoliciesValidation,
IValidateCompanyAccounts companyAccountsValidation)
{
// Perform DI
}
public bool UpdateCompany(Company model)
{
var checkPolicies = this.companyPoliciesValidation.Validate(model);
if (checkPolicies.Success)
{
var checkAccounts = this.companyAccountsValidation.Validate(model);
var auditSuccess = this.companyAccountsValidation.HasAuditPassed(model);
if (checkAccounts.Success && auditSuccess)
{
// Perform DB save
}
}
}
}
来源
2017-02-14 15:29:42
RRM
请原谅我的无知,但究竟什么是SP? – CKing
@Cing存储过程 –
因此,对于每个规则,您必须执行一个存储过程? – ATC