例外を握りつぶさないDBトランザクションの場合はちゃんとロールバックするログを残す基本的にデータベースや外部APIとの通信部分にしか張りません。 自分の書いたコードで例外が必要になるのはおかしいからです。 データベースの場合、データの整合性が取れていない マスターデータが流される場合があるので検知用に仕込んでいます。 外部のAPIも同様で、相手側がなにかミスした場合を立証するのに役立ちます。
「例外」「エラー」「異常」あたりの言葉が、言語仕様や設計の中で人によって微妙にずれた使い方されてるから、 「Expected だが Accept されないケース」を表す別の言葉が欲しい。 — Jxck (@Jxck_) 2016年8月31日 @Jxck_ 本来こう分類されて、 1. Expected/Accepted 2. Expected/UnAccepted 3. UnExpected 2, 3 をどう呼ぶかあたりで、例外, エラー, 異常などの言葉が入り乱れてて、それが広義の例外処理が誤解される原因だと思ってる — Jxck (@Jxck_) 2016年8月31日 Expected and Accepted Expected but Unaccepted Unexpected
良くあるダメなエラーメッセージ エラーが起きたときは、以下のようにエラーメッセージをどこかしらに出力すると思います。 $c->log->error('something wrong!'); ただ、このエラーメッセージって、実際に発生したときには意味がわからないことが多いのです。 $c->log->error('error!'); 本気でこういう「error!」とだけ吐くメッセージだと、エラーが起きたことしか伝わってきません。程度の差はあれ意味のわからないエラーメッセージはこの世にあふれているかと思います。 機械的なエラー情報 そういうわけで、たいていは Exception クラスや Logger クラスで多くの補助が受けられるようになっていると思います。 発生時刻 発生場所 stack trace 変数の状態 ただ、このような機械的な情報だけだと、結局、運用上は対応が難しい場面ってのが多か
はじめに システム開発において例外処理は重要なポイントですが、あまりに軽視されているのが現状ではないでしょうか。本稿では、これまでの著者の開発経験の中から培った汎用的な手法を説明します。 この記事は「美しい設計」ではなく「現実的な設計」、現場に適用できる「できるだけ手間の少なく、汎用的な設計」を目指しています。 対象読者 J2EE開発者・アーキテクト。特に業務システムの開発現場の方が対象です。 必要な環境 概念の説明が中心ですので、開発環境は必要ありません。 エラーの分類 実装時に考慮すべきエラーは2つに大別できます。 想定内でトランザクションの実行開始前にチェックするエラー。主に入力エラー。 異常な状態としてトランザクションの続行が不可能なエラー(例外)。 前者については、例外を使うべきではありません。入力チェックエラーを表現するには、ステータスコードを使うべきです。理由は次のとおりです
なぜ今Javaの例外処理か Javaにおける「チェック例外」はSwift、Objective-C、Ruby、JavaScriptといったネイティブ・ウェブアプリ開発でよく用いられる他の言語には現れないものです。 SwiftにはOptionalやErrorTypeがありますが、Javaにおいてもnullやエラーのハンドリングの実装方法をうまくやる必要があります。 なぜ例外を握りつぶしたらいけないのか、なぜアサーションが望ましいのか、なぜチェック例外と非チェックを分けたのか、という点を考えてみたいと思います。 参考資料 例外設計における大罪 (契約プログラミングについて) Effective Java読書会9日目 - 例外 (Javaにおける例外の扱いについて) 契約による設計から見た例外 (この記事の方がより詳しいけど難しいイメージ) チェック例外と非チェック例外の違い チェック例外→「回復
言語側で実装されていれば、なかば強制的に使うことになりますし、そして正常系の処理と異常時の処理をスッキリ分離できるので便利な例外処理ですが、開発の過程では逆に厄介な現象を招くこともあります。 例外処理の基本 C++やJavaScriptなどでは、例外としてどんなものでも投げることができますが、RubyやJavaでは、特定の基底クラスから継承したものしか例外として投げることはできません。 そして、例外クラスはたいていの場合、継承ツリーを通じていくつかに区分されています。Javaであれば「処理系自体の異常(Error)」、「チェック例外(Exception)」、「非チェック例外(RuntimeException)」、Rubyでは「通常実行時に起きる例外(StandardError)」、「それ以外の例外(Exception)」となっています。そして、Javaでは検査例外がありますが、Rubyでは
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く