skillup

技術ブログ

プログラミング全般

例外・エラーに関する考察

投稿日:

えー今現在、設計の仕事をしていますが、今までいい加減だったエラーの処理を見直すいいきっかけになってます。

半年前にも同じような記事書いてますねー。苦手意識は変わらないようです・・(汗)

例外処理に関して

ポイントとなる考え方について。

例外使用時

あくまでも「例外」なのでできれば使わないのが望ましいです(本来であれば・・・)

例えばRuntimeException系のもの(nullポインタ、配列の数が合わない、数字できないものを数字にしようとしている)に関しては通常の条件分岐で対応できるため例外で対処しない方が望ましいです。

ただプログラムの中で制御できないエラー(DBの接続、カラムがない、ファイルがない、・・・)も存在するため、その場合はtrycatchをする必要があります。(いわゆる必須の例外。javaだと強制になります。)

具体的なケースとしては以下のような時に使います。

  • DBに接続できない
  • SQLでこける(一番頻度高い)
  • API接続できない
  • ファイルがおかしい、ない

実際の使用時にはDBがらみの処理がもっとも高頻度かと思います。

【Java】検査例外と非検査例外の違いを図でまとめてみた

PHPの例外

try catch

DBエラーなどは常に発生する可能性があるため、DBが絡むときは必ずtry{}catchで囲む。上部(Serviceから見たControllerなど)に送る場合はthrowを忘れない。

Service層のレスポンスに関して

ServiceからControllerに値を返すときでも基本的にデータと一緒にレスポンスコード(正常な時とタイプによるエラーわけ)と処理結果(true/false)をセットで。最後のview以外に渡すときでもこの癖をつける。

データの型は以下のようになる感じでしょうか。

当たり前かもしれませんが、errorMessageにはExceptionの内容などを入れる。

Service層の中は以下のような作りがいいかも・・・

今まではかなりtry{}catchのスコープを長く取っていたんですが、短く取るようにした方が良さげかも・・

Serviceの中でtrycathがある場合はControllerでは不要ですが、上(Controller)にthrow eしている場合はControllerでキャッチを行います。

Modelの役割

通常のデータを渡す役割(プロパティのセットとSQLの発行)のみなのでデータを渡すような処理でOKでしょう。

Exceptionを握り潰していいとき or 処理がfalseであっても後続処理を継続する時

一般にExceptionを握りつぶすことはアンチパターンとされていますが、

こけても上部のシステムに影響がないと判断される時(ログ的なDBへの書き込みなどでロールバックまでは考えない時)

には握りつぶす(後続の処理でのロールバックをしない、ログに出して終わりなど)こともあるようです。

似たケースとして、処理結果がfalseにも関わらず、後続の処理を継続するパターンなどもあります。

例としては

メールやプッシュなど処理の成功、不成功を完璧には判断できないケース(処理が成功しても、相手に届くとは考えられない)

などです。

例外やエラー処理も勉強することがまだまだ多いですねー

-プログラミング全般
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

アプリケーションアーキテクチャについて 〜既存のMVCに関して〜

今回はアプリケーションのルーター以降のアーキテクチャに関して。主にMVCなどについて説明したいと思います。 Contents1 MVC(Model,Controller,View)1.1 トランザクシ …

no image

小〜中規模程度のWEBアプリ作成で気をつけるべきこと

初見の処理系(ライブラリ操作)などは休日などで最小パターンを確認しておくこと。実務で何時間も悩むと非常にストレスがたまる テーブル設計命。あとで終えるようにトレースができるような値を入れておくこと。 …

no image

ダミーデータの作り方 まとめ

現在作っているアプリを顧客先で見せる機会があり、そのためダミーデータを入れる、という仕事がありました。 といっても画面からポチポチやったんでは時間もかかりますし、何より精神的にやられてしまいます。(汗 …

no image

制御フローについて

リーダブルコード 7章。制御フロー(if文などの条件分岐)について ここらへんは個人個人癖がついているとおもいますが、確かに読みやすい、読みにくいというのはあるのでなるべく汎用性のある規則を身につけた …

no image

オブジェクト指向 値オブジェクトの活用と場合分けに関して

オブジェクト指向 その1 オブジェクト指向 その2 オブジェクト指向 その3 でオブジェクト指向に触れたんですが、基本から勉強しなおす必要があると思い、まとめ&追記 参考文献 現場で役に立つシステム設 …

アーカイブ