投稿日
この記事は更新から6年経過しています
Architecture Decision Records導入事例
もくじ
- はじめに
- サマリ
- この活動への取り組みについての情報
- ArchitectureDecisionRecordsについて
- 導入の動機
- 不透明な意思決定
- やみくもな意思決定
- 時間がかかる新規アサインメンバーへの情報共有
- ADRの導入
- ADRの使用の合意
- ADRの運用
- 参加者
- 運用に当たり工夫した事
- ADRの対象を明確化
- ADRの受理を議論する人数を削減
- 得られた効果と懸念事項
- 得られた効果
- 懸念事項
- おわりに
- 付録:本事例で作成したADR
- ADRを使用する
- コンテキスト
- 決定事項
- ステータス
- 結果
- 複数戻り値
- コンテキスト
- 決定を必要とする理由
- 決定事項
- ステータス
- 結果
- 例外が保持するプロパティ
- コンテキスト
- 決定事項
- クラス階層の変更
- プロパティ
- コード値の種類を決定
- ステータス
- 結果
例外が保持するプロパティ
コンテキスト
adr-004-例外のクラス階層に以下の課題が発見された。
- データが正常に書き込まれたかの判定をすべてのロジックで考える必要が出てくる
- リトライ可能、リトライ不可能が型の階層で定義されているため、同じ意味の例外を二つ作成しなくてはならない
- 例えばサーバの例外クラスをリトライ可能とリトライ不可とで二つ定義する必要が出てくる
決定事項
クラス階層の変更
クラス階層を以下の内容に変更する。
- RuntimeException
- TISException
- ServerException … サーバ起因の例外
- (個々の例外クラス)
- StoreException … Store起因の例外
- (個々の例外クラス)
- BusinessException … ビジネスロジック起因の例外
- InternalException … 内部例外
- (個々の例外クラス)
- ServerException … サーバ起因の例外
- TISException
リトライ可能か不可能かは後述するコード値の種類で判断する方針とする。
プロパティ
TISExceptionが持つ共通プロパティからcompleted,occurredOnを削除する。よってプロパティは以下の一つになる。
・String code … コード値
データが正常に書き込まれたかは例外クラスのプロパティではなく、メソッドごとに例外がスローされた場合データが正常に書き込まれていない可能性があるかをドキュメントで定義する方針とする。例えば、findPerson関数で例外が発生した場合データの書き込み状態を気にする必要はないと記載する。一方、例外が発生した場合データが正常に書き込まれていない可能性があるメソッドではドキュメントにその旨を記載する。クライアントアプリケーションはメソッドごとに例外が発生した場合どのような処置が必要かをドキュメントから判断する。
コード値の種類を決定
TISExceptionが持つコード値の種類を以下に定める。(xの部分は任意の数字)
- ServerException : Server_xxxx (サーバのエラーコードを直接使用)
- StoreException : Store_xxx
- BusinessException : Business_xxx
また、1桁目でリトライ可能か、不可能かをす。 1: リトライ可能 0: リトライ不可
例えばServer_1xxであればサーバ起因であり、リトライ可能であることを表す。
ステータス
受理
結果
本コンテンツはクリエイティブコモンズ(Creative Commons) 4.0 の「表示—継承」に準拠しています。
