你的通用驗證界面的第一個水平,這給提供這兩種結果的類型和模式的靈活性需要被驗證:
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