[Validation] include rules in the domain that may vary from instance to instance

Posted xiaowangzhi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Validation] include rules in the domain that may vary from instance to instance相关的知识,希望对你有一定的参考价值。

using System;
using System.Collections.Generic;
using System.Linq;

namespace Validation // include rules in the domain that may vary from instance to instance
{
    class Program
    {
        static void Main(string[] args)
        {
            var memberEoo = new Member { Name = "EooName", Area = "Eoo", Age = 15, Email = string.Empty }; // Eoo member must be at least 18
            foreach (var item in memberEoo.Validate())
            {
                Console.WriteLine(item);
            }

            var memberFoo = new Member { Name = "FooName", Area = "Foo", Age = 15, Email = string.Empty }; // Foo member must have an email
            foreach (var item in memberFoo.Validate())
            {
                Console.WriteLine(item);
            }
        }
    }

    public class Member // domain model
    {
        private readonly List<string> _ruleItems = new List<string>(); // broken rules

        public string Name { get; set; }

        public string Area { get; set; }

        public int Age { get; set; }

        public string Email { get; set; }

        public List<string> Validate()
        {
            if (string.IsNullOrEmpty(Name))
            {
                _ruleItems.Add("member must have a name");
            }

            if (string.IsNullOrEmpty(Area))
            {
                _ruleItems.Add("member must have an area");
            }
            else
            {
                _ruleItems.AddRange(RuleFactory.GetRule(Area).GetRuleItems(this)); // specific rules
            }

            return _ruleItems;
        }
    }

    public abstract class Rule
    {
        public abstract string Area { get; }

        public abstract IEnumerable<string> GetRuleItems(Member member);
    }

    public class EooRule : Rule
    {
        public override string Area => "Eoo";

        public override IEnumerable<string> GetRuleItems(Member member)
        {
            var ruleItems = new List<string>();
            if (member.Age < 18)
            {
                ruleItems.Add("Eoo member must be at least 18");
            }
            return ruleItems;
        }
    }

    public class FooRule : Rule
    {
        public override string Area => "Foo";

        public override IEnumerable<string> GetRuleItems(Member member)
        {
            var ruleItems = new List<string>();
            if (string.IsNullOrEmpty(member.Email))
            {
                ruleItems.Add("Foo member must have an email");
            }
            return ruleItems;
        }
    }

    public class RuleFactory
    {
        private static readonly List<Rule> _rules = new List<Rule>
        {
            new EooRule(),
            new FooRule()
        };

        public static Rule GetRule(string area)
        {
            return _rules.FirstOrDefault(v => v.Area == area);
        }
    }
}

 

以上是关于[Validation] include rules in the domain that may vary from instance to instance的主要内容,如果未能解决你的问题,请参考以下文章

错误:找不到模块'graphql/validation/rules/PossibleTypeExtensions'

无法从“node_modules/graphql/validation/index.js”解析“./rules/FieldsOnCorrectType”

jquery中validation部分学习笔记

Nice Jquery Validator 从 jQuery Validation 迁移

JQuery Validation 不显示正确的消息

jQuery - 学习笔记 - jQuery Validation Plugin