レイヤーの再スローとステータスコードの使用の例外
-
05-07-2019 - |
質問
私は長い間(ここでも)これを探しましたが、多くのphpコードを読みましたが、まだ満足のいく答えが見つかりませんでした。それはあまりにも広いトピックのように思えるかもしれませんが、それは本当に結びついています-最後に私にとって。助けていただけますか?
php Webサイトでは、BLLオブジェクトによって使用されるものとしてDDOとしてPDOがあり、UIから呼び出されます。現在、何かが発生した場合、PDOはPDOExceptionをスローします。もちろん、UIレイヤーはPDOExceptionsについて何も知る必要がないため、BLLオブジェクトがそれをキャッチします。しかし、今はどうですか?
読みました
- 例外は本当に例外的な状況のためのものであり、
- 上位層で低レベルの例外が発生しないように、下位層から例外を再スローします。
私の問題を説明させてください(関数の引数に注意しないでください):
class User
{
function signUp()
{
try
{
//executes a PDO query
//returns a code/flag/string hinting the status of the sign up:
//success, username taken, etc.
}
catch (PDOException $e)
{
//take the appropriate measure, e.g. a rollback
//DataAccessException gets all the information (e.g. message, stack
//trace) of PDOException, and maybe adds some other information too
//if not, it is like a "conversion" from PDOException to DAE
throw new DataAccessException();
}
}
}
//and in an upper layer
$user = new User();
try
{
$status = $user->signUp();
//display a message regarding the outcome of the operation
//if it was technically successful
}
catch (DataAccessException $e)
{
//a technical problem occurred
//log it, and display a friendly error message
//no other exception is thrown
}
これは正しい解決策ですか? PDOExceptionを再スローするとき、例外チェーンを使用することは適切ではないと思います(これにより、デバッグ情報が冗長になるだけです。DataAccessExceptionは、PDOExceptionからの完全なスタックトレースを含むすべてを取得します)。
事前に感謝します。
解決
あなたの投稿を理解したように、良いリソースは次のとおりです。 Apiデザイン
あなたは宿題をしたと思いますが(フレーズを使用できる場合)、このことを行っている理由を忘れてしまいました。あなたの例では
のようなものを作成しますSignUpException
これは、サインアップに関して何かが間違っていることを上位層に通知します。ここで行うことは、基本的にデータベース例外を別の名前付き例外でマスクすることです。これは本質的に同じもので、プログラム的には正しいものの、最初の段階でそれを行うなぜ -sのポイントを見逃しています場所。
所属していません StackOverflow