少なくとも、dbの相互作用にできるだけ近いこのタイプの動作を処理しているので、コードベースにこれらのタイプのチェックが散らばっている場合は、さらに悪化する可能性があります。
この種の問題を解決する必要がある場合、最初に行うことは、カスタム例外コードをスローするメソッドを設定することだと思います。そうすれば、呼び出し元のコードをログに記録して、アプリケーションのどの部分でデータをフォーマットしているかを確認できます。間違った方法。
たとえば、次のようなことができます。
class CustomException extends Exception
{
const CODE_BAD_FORMAT = 1;
protected code;
public function setCode($code)
{
$this->code = $code;
}
public function getCode()
{
return $this->code;
}
}
class Model extends ParentModel
{
function save()
{
if ($model->getSomeProp() == 'bad value') {
$badValueFound = true;
$model->setSomeProp('good default value');
}
// Now that you are using try/catches you don't need a return value
parent::save();
if ($badValueFound) {
$e = new CustomException();
$e->setCode(CustomException::CODE_BAD_FORMAT);
throw $e;
}
}
}
// Calling code
try {
$model = new Model();
$model->setSomeProp('ohnoes im bad format');
$model->save();
} catch (Exception $e) {
if ($e->getCode() === CustomException::CODE_BAD_FORMAT) {
error_log(__METHOD__ . ': Called save with bad format');
} else {
throw $e; // Some other exception occurred b/c the code() didn't line up so bubble up
}
}
// All is well b/c made it through the try / catch block... so onto the next logic
これで、save()を呼び出すことができます。不正な形式が検出された場合は、例外をスローして呼び出しからコードを確認できます。コードが一致する場合(予想される不正な形式)、ロギングトラック呼び出しを実装できます。コードポイント。
さらに、保存は引き続き行われるため、プロセスで何も中断しませんが、save()の呼び出しがtry / catchブロックでラップされていることを確認する必要があります。そうしないと、キャッチされない場合に例外が発生します。ちゃんと。
別のアイデアは、モデルクラスの不正な形式の構成を追跡して、同じ文字列をあちこちにコピーすることにならないようにすることです。
class Model
{
const BAD_FORMAT_MALFORMED_NAME = 'format for a malformed name';
const BAD_FORMAT_MALFORMED_ADDRESS = 'format for malformed address';
}
....
if($model->getSomeProp() === self::BAD_FORMAT_MALFORMED_NAME) {
....