现在的位置: 主页 > 在线留言 > 文章正文

.NET业务实体类验证组件Fluent Validation

作者:成都渝祥金属丝网制品有限公司 来源:www.cdyuxiang.com 未知发布时间:2017-09-11 14:05:51
.NET业务实体类验证组件Fluent Validation 认识Fluent Vaidation.

  看到NopCommerce项目中用到这个组建是如此的简单,将数据验证从业务实体类中分离出来,真是一个天才的想法,后来才知道这个东西是一个开源的轻量级验证组建。

  Fluent Validation 翻译为:流畅验证

  开源Codeplex其主页简介:该组件是一个轻量级的.NET类库,使用流畅的接口定义和lambda表达式为构建一个业务类的验证规则(A small validation library for .NET that uses a fluent interface and lambda expression for building validation rules for you business objects.)

  这个类库不仅仅可以使用的asp.net mvc项目中,普通的类库中也可以使用,当然在asp.net form项目中也支持。

怎么使用:  

  是不是好用,还要看使用时是否真的像其官网建议描述一样。我比较喜欢其官网上的例子,一眼就能看出用法上的感觉,绝对是如其名,流畅,这个也一种解释型语言常见的的一种用法,无限的对一个类型支持无限度个属性扩展。

业务实体类:

复制代码

1 public class Person

2 {

3 public string NameField;

4 public int Id { get; set; }

5 public string Surname { get; set; }

6 public string Forename { get; set; }

7

8 public List<Person> Children { get; set; }

9 public string[] NickNames { get; set; }

10

11 public DateTime DateOfBirth { get; set; }

12

13 public int? NullableInt { get; set; }

14

15 public Person()

16 {

17 Children = new List<Person>();

18 Orders = new List<Order>();

19 }

20

21 public int CalculateSalary()

22 {

23 return 20;

24 }

25

26 public Address Address { get; set; }

27 public IList<Order> Orders { get; set; }

28

29 public string Email { get; set; }

30 public decimal Discount { get; set; }

31 public double Age { get; set; }

32 public int AnotherInt { get; set; }

33

34 public string CreditCard { get; set; }

35

36 public int? OtherNullableInt { get; set; }

37 }

38

39 public interface IAddress

40 {

41 string Line1 { get; set; }

42 string Line2 { get; set; }

43 string Town { get; set; }

44 string County { get; set; }

45 string Postcode { get; set; }

46 Country Country { get; set; }

47 }

48

49 public class Address : IAddress

50 {

51 public string Line1 { get; set; }

52 public string Line2 { get; set; }

53 public string Town { get; set; }

54 public string County { get; set; }

55 public string Postcode { get; set; }

56 public Country Country { get; set; }

57 public int Id { get; set; }

58 }

59

60 public class Country

61 {

62 public string Name { get; set; }

63 }

64

65 public interface IOrder

66 {

67 decimal Amount { get; }

68 }

69

70 public class Order : IOrder

71 {

72 public string ProductName { get; set; }

73 public decimal Amount { get; set; }

74 }

复制代码

  对Person的指定验证规则:  

复制代码

1 using FluentValidation;

2

3 public class CustomerValidator: AbstractValidator<Customer>

4 {

5 public CustomerValidator()

6 {

7 RuleFor(customer => customer.Surname).NotEmpty();

8 RuleFor(customer => customer.Forename).NotEmpty().WithMessage("Please specify a first name");

9 RuleFor(customer => customer.Discount).NotEqual(0).When(customer => customer.HasDiscount);

10 RuleFor(customer => customer.Address).Length(20, 250);

11 RuleFor(customer => customer.Postcode).Must(BeAValidPostcode).WithMessage("Please specify a valid postcode");

12 }

13

14 private bool BeAValidPostcode(string postcode)

15 {

16 // custom postcode validating logic goes here

17 }

18 }

19

20 // 手动验证规则

21 Customer customer = new Customer();

22 CustomerValidator validator = new CustomerValidator();

23 ValidationResult results = validator.Validate(customer);

24

25 bool validationSucceeded = results.IsValid;

26 IList<ValidationFailure> failures = results.Errors;

复制代码

Flent validation怎么与asp.net mvc验证库整合?

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:仙桃SEO http://xiantao.raoyu.net

上一篇:PHP关于文件与目录(1) 写入文件 文件权限 三、锁定 下一篇:最后一页