Skip to content

MakingRuleSet

Kozu edited this page Jun 7, 2019 · 41 revisions

ルールセットの作り方

VitDeckでは検証したいルールとその設定をルールセットと呼ばれる単位で管理します。ツールの管理者は独自のルールセットを作成したうえで作業者に配布することになります。ルールセットは複数作成でき、チェック時に選んで実行することができます。

ルールセットの構成

独自のルールセットをBaseRuleSetクラスを継承して作成し、Assets/VitDeck/Validator/??内に配置してください。

[サンプル]

namespace VitDeck.Validator.??
{
    /// <summary>
    /// サンプルルールセット
    /// </summary>
    public class SampleRuleSet : BaseRuleSet
    {
        public override string RuleSetName
        {
            get { return "サンプルルールセット"; }
        }
        [Validation(order = -1)]
        public IRule rule1 = new SampleRule("ルール1");
        [Validation]
        public IRule rule2 = new SampleRule2("ルール2", "カスタム設定値2");
    }
}

作成したクラス内で以下を定義してください。

  • ルールセットの名前を返すRuleSetName
  • 各ルールを表すIRuleフィールド
    • フィールドに検証ルールであることを表す[Validation]を付与して下さい。
    • デフォルトではルールの実行順序は不定です。
    • 事前チェックなどで順序を指定したい場合Validation属性のorder値を指定することができます。デフォルトは0で値が小さいほど先に実行されます。

汎用ルールによるルール定義

以下のルールが汎用ルールとして定義されています。 (作成中)

独自拡張ルールによるルール定義

独自のルールを追加する場合はBaseRuleクラスを継承したクラスを作成し、Assets/VitDeck/Validator/??内に配置してください。

[サンプル]

namespace VitDeck.Validator.??
{
    /// <summary>
    /// サンプルルール
    /// </summary>
    public class SampleRule : BaseRule
    {
        private string customSetting;
        public SampleRule(string name, string custom = "デフォルト設定値") : base(name)
        {
            this.customSetting = custom;
        }

        protected override void Logic(string baseFolder)
        {
            //前提チェック等検証の続行が不可能な場合
            if (string.IsNullOrEmpty(baseFolder))
                throw new FatalValidationErrorException("ベースフォルダが指定されていません。");
            //チェック結果を設定
            AddIssue(new Issue(null, IssueLevel.Info, "これはサンプルルールの検証結果です。"));
            AddIssue(new Issue(null, IssueLevel.Info, "これはサンプルルールの解決策付き検証結果(情報)です。", "解決策テキスト", "https://github.com/vkettools/VitDeck/issues/57"));
            AddResultLog("Ruleのissueに紐付かないログです。customSetting:" + customSetting);
        }
    }
}

作成したクラスにprotected override void Logic(string baseFolder)を定義して検証ロジックを実装してください。

検証用メソッド

BaseRule内で定義された以下のメソッドを使用できます。(作成中)

  • void AddIssue(Issue issue)
    • 発見された問題を結果に追加します。
    • Issueオブジェクトは対象オブジェクト、メッセージレベル、メッセージ本文、[解決策メッセージ]、[ヘルプページへのリンク]を設定して生成します。
    • IssueのメッセージレベルはError,Warning,infoから設定してください。
  • void AddResultLog(string logText)
    • 検証中の問題に紐づかないログを結果に追加します。

検証用例外

FatalValidationErrorExceptionをthrowすることで検証を中断することができます。事前条件のチェックなどで使用できます。 引き続きほかのルールの検証を継続させたい場合はreturnを使用し、例外は使用しないでください。

Clone this wiki locally