说到AOP编程,可能大部分人是即熟悉又显得陌生。
AOP的作用就是横切关注点,然后将分离后的关注点以面的形式来呈现,这是概念性的说法,举个列子来说明吧。
比如说有个API接口处理场景是提交订单,在我们提交订单的时候,首先客户端要对用户提交的数据进行合法性验证,验证通过后,数据发送到服务端,因客户端一切操作都是不可信的,必然服务端在录入订单信息之前也需要对数据合法性进行验证。
针对上述问题我们可以这样子来编码
首先定义订单表单参数实体对象:
1 /// <summary>
2 /// Post表单参数
3 /// </summary>
4 public class FromOrderInfo
5 {
6 /// <summary>
7 /// 商品名称
8 /// </summary>
9 public string ShopName { get; set; }
10 /// <summary>
11 /// 手机号
12 /// </summary>
13 [ValidateMobile(ErrorMessage = "请输入正确格式的手机号")]//自定义验证规则
14 public string Mobile { get; set; }
15 /// <summary>
16 /// Address
17 /// </summary>
18 [ValidateMaxLength(20,ErrorMessage = "Address字符超过指定长度")]
19 public string Address { get; set; }
20 }
在表单对象FromOrderInfo实体类里面有ValidateMobile和ValidateMaxLength验证类
接下来我们需要编写自定义ValidateMobile和ValidateMaxLength验证类
自定义验证如下:
1 /// <summary> 2 /// 验证字符长度是否超过指定长度 3 /// </summary> 4 public class ValidateMaxLengthAttribute : ValidationAttribute 5 { 6 private readonly int MaxLength; 7 8 public ValidateMaxLengthAttribute(int maxLength) 9 : base("{0}的字符太多了!") 10 { 11 MaxLength = maxLength; 12 } 13 14 protected override ValidationResult IsValid(object value, ValidationContext validationContext) 15 { 16 if (value != null) 17 { 18 string content = value.ToString(); 19 int leng = StringTool.GetStringLength(content); 20 if (leng > MaxLength) 21 { 22 string errorMessage = FormatErrorMessage(validationContext.DisplayName); 23 return new ValidationResult(errorMessage); 24 } 25 } 26 return ValidationResult.Success; 27 } 28 } 29 30 /// <summary> 31 /// 验证手机号 32 /// </summary> 33 public class ValidateMobileAttribute : ValidationAttribute 34 { 35 public ValidateMobileAttribute() 36 : base("{0}应输入11位手机号!") 37 { 38 } 39 protected override ValidationResult IsValid(object value, ValidationContext validationContext) 40 { 41 if (value != null) 42 { 43 string content = value.ToString(); 44 if (!RegexTool.IsMobile(content)) 45 { 46 string errorMessage = FormatErrorMessage(validationContext.DisplayName); 47 return new ValidationResult(errorMessage); 48 } 49 } 50 return ValidationResult.Success; 51 } 52 }