LoginSignup
0
1

More than 5 years have passed since last update.

バリデーションで存在確認をする際のベターネーミング

Posted at

CodeIgniter 3.* で入力されたメールアドレスが DB に存在するか確認する際のバリデーションルール名で少し迷ったのでメモ。
※ CI のバリデーションについては Form Validationを参考

やりたいこと

ユーザ登録時、入力されたメールアドレス(email)が DB に

  • 存在する:バリデーションエラー
  • 存在しない:非エラー

となるよう、「メールアドレスは存在するか」を意味するルール名を作る。

実装

存在すれば真、存在しなければ偽を返す以下のメソッドを作成した。

function _is_email_existed($email)
{
    return $this->db->_is_email_existed($email);
}

DB->_is_email_existed() は、引数 email を条件に DB を検索し、その件数を返すメソッド。
(0件のときのみ FALSE になる)

これを用いてバリデーションを実行すると、以下の結果となる。

入力 DB 返り値 検証 期待
a@b.com a@b.com TRUE OK 重複有り:NG
b@c.com a@b.com FALSE NG 重複無し:OK

つまり、「入力値は存在するか」という命題は、存在すれば真、存在しなければ偽を返すが、検証は真のときエラーとならないため、おかしなことになる。
かといって、この命題に対する返り値を否定すると、命題とそれに対する返り値が不自然。

どうするのがより自然で一般的なのか?

以下の2つの候補がある。

  1. ルール名を is_email_not_existed にして整合させる
  2. 返り値を否定する

と挙げたが、1 の場合はいちいち存在確認の検証ルールに "not" をつけることになるし、
他ルールの慣習に合わない気がする。しかも、長い。

結果

ルール名は is_email_existed のまま、返り値を否定することによって実現。

つまり、以下の通り。

function _is_email_existed($email)
{
    return ! $this->db->_is_email_existed($email);
}

これで、重複があれば NG、なければ OK が返る。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1