Maison >développement back-end >Tutoriel C#.Net >Architecture EF – utilisation réelle de FluentValidation
Retour au répertoire
Dans les environnements MVC, EF et LINQ, nous utilisons souvent DataModel (DO) et ViewModel (VO). Nous pouvons utiliser des caractéristiques pour vérifier leurs propriétés. Bien sûr, c'est très. intuitive, même la DÉMO de Microsoft est comme ça. Généralement, le code est comme ça
/// <summary>/// 机构ID/// </summary>[DisplayName("机构ID")]public int AgentId { get; set; }/// <summary>/// 机构名称/// </summary>[DisplayName("机构名称")] [MaxLength(128)]public string AgentName { get; set; }/// <summary>/// 机构负责人/// </summary>[DisplayName("机构负责人")] [MaxLength(128)]public string AgentUser { get; set; }
Cette méthode de conception posera de nombreux problèmes à notre future maintenance. Plus précisément, Oncle résume :
Allez sur nuget pour l'installer : install-package FluentValidation
Une de vos classes d'entité peut ajouter plusieurs classes d'inspection, ce qui équivaut à avoir plusieurs classes d'inspection de décoration. une classe d'entité, je trouve que c'est plutôt bien !public class CreateUserEventValidator : AbstractValidator<CreateUserEvent>{public CreateUserEventValidator() { RuleFor(command => command.UserName).NotEmpty().Length(5, 20).WithMessage("用户名升序为5-20字符!"); RuleFor(command => command.Email).NotEmpty().EmailAddress().WithMessage("不是有效的Email!"); RuleFor(command => command.BirthDay).NotEmpty().Must(i => i < DateTime.Now).WithMessage("你的年紀太小了!"); } }
BusManager.Instance.Subscribe( ValidatorDecorator<CreateUserEvent>( UserEventHandler(), BusManager.Instance.Subscribe( LoggerDecorator<CreateUserEvent>( CreateUserEvent { UserName = });
/// <summary>/// 验证装饰器/// </summary>/// <typeparam name="TEvent"></typeparam> [Serializable]public class ValidatorDecorator<TEvent> : IBusHandler<TEvent>where TEvent : IBusData {/// <summary>/// 要被装饰的处理程序/// </summary>private readonly IBusHandler<TEvent> _inner;/// <summary>/// 校验装饰器集合/// </summary>private readonly IValidator<TEvent>[] _validators;/// <summary>/// 初始化/// </summary>/// <param name="inner">要被装饰的处理程序</param>/// <param name="validators">装饰器</param>public ValidatorDecorator(IBusHandler<TEvent> inner, params IValidator<TEvent>[] validators) { _inner = inner; _validators = validators; }public void Handle(TEvent evt) {var failures = _validators .Select(v => v.Validate(evt)) .SelectMany(result => result.Errors) .Where(error => error != null) .ToList();if (failures.Any()) {throw new ValidationException("实体校验失败", failures); } _inner.Handle(evt); } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!