# 共通ドキュメント

## DataValidator

### 概要

エンティティの検証を定義する。

エンティティの元になるTableRowデータの検証は継承元に任せ、他のビジネスルールに基づく検証を定義する。

クラス名
  (システムプロジェクト名称).(サブシステム名称).(機能名称).Validators.(エンティティ名称 + "Validator")
namespace
  (システムプロジェクト名称).(サブシステム名称).(機能名称).Validators
継承元
  エンティティの元になるTableValidator
インターフェース
  N/A
クラス属性
  N/A

### フィールド

#### 継承元クラスのフィールド

table | エンティティの基本クラスデータ。使用する場合にはこのクラスが操作するエンティティクラスにキャストする。
properties | tableに対応するTableProperties。
errorMessages | 検証中のエラーメッセージを保持する。

### プロパティ

必要なプロパティを定義する。

### コンストラクタ

必要に応じてコンストラクタを定義する。

- デフォルトコンストラクタは必ず定義する。
- 必ず継承元クラスのコンストラクタを呼び出す。
- エンティティを受け取るコンストラクタを定義する。
- 入力内容によりTablePropertiesが変化するならばTablePropertiesを受け取るコンストラクタを定義する。

### メソッド

このエンティティに対する操作を定義する。

#### オーバーライド

必要に応じてオーバーライドする。

Validate | base#Validate()を呼び出した後,独自の検証を実行する。エラーメッセージはerrorMessagesに追加する。

#### 継承元クラスのメソッド

Validate | 保持しているTableRowインスタンスの検証を実行する。

### サンプル

#### FXトラベル/マスタ保守/都市、地域/都市編集フォーム(C#)

    namespace FxTravel.Maintainance.Area.Validators
    {
        /// <summary>
        /// 都市検証
        /// </summary>
        public class CityValidator : MstCityTableInputForm
        {

            ///<summary>デフォルト構築</summary>
            public CityValidator() : base()
            {
            }
            ///<summary>エンティティを受け取る構築</summary>
            public CityValidator(City city) : base()
            {
            	this.table = city;
            }
            ///<summary>エンティティとTablePropertiesを受け取る構築</summary>
            public CityValidator(City city,MstCityTableProperties properties) : base()
            {
            	this.table = city;
            	this.properties = properties;
            }

            ///<summary>検証のオーバーライド</summary>
            public override bool Validate(){
            	bool valid = base.Validate();
            	//valid == falseの時以降の検証が無駄ならばそのまま戻ってよい。
            	if(!valid) return valid;

            	//このクラス独自の検証を記述
            	// ...

            }

        }
    }

### その他

- データアクセスコードを書いても良い。ただしDataAccessクラスを使用し、Connectionを直接操作しない。