回答編集履歴
2
追伸追加
answer
CHANGED
@@ -33,4 +33,35 @@
|
|
33
33
|
あと、.NET 4 からは破損状態例外は catch できなくなっているそうですが、「それでも Catch (Exception e) を使用するのはよくない」ということについては以下の記事を見てください。
|
34
34
|
|
35
35
|
破損状態例外を処理する
|
36
|
-
[https://msdn.microsoft.com/ja-jp/magazine/dd419661.aspx](https://msdn.microsoft.com/ja-jp/magazine/dd419661.aspx)
|
36
|
+
[https://msdn.microsoft.com/ja-jp/magazine/dd419661.aspx](https://msdn.microsoft.com/ja-jp/magazine/dd419661.aspx)
|
37
|
+
|
38
|
+
**【追伸】**
|
39
|
+
|
40
|
+
下記は 2017/11/18 23:27 のコメント欄で「上記に対するレスは回答欄に書きます」と書いた件です。
|
41
|
+
|
42
|
+
上に書いた「業務エラー」と「例外」を区別して対処というところは納得していただけたでしょうか?
|
43
|
+
|
44
|
+
そうでないとするとこの先話を続けてもなかなか理解が得られないと思いますが、そこは自分の考えでレスします。
|
45
|
+
|
46
|
+
まず、「例外」ですが、それは開発者にのみ提供すればいい情報ですので、.NET Framework が提供する例外情報(例外の種類、メッセージ、スタックトレースなど)がログなどで取得できればよく、管理とか体系化とか余計な個とは考えなくてもいいと思います。
|
47
|
+
|
48
|
+
「業務エラー」の方は、ユーザーにユーザー入力の訂正などを促して正しい業務フローに戻すということになるでしょうから、ユーザーに適切に情報を提供する必要があります。そのためには何らかの管理は必要になるのは分かります。
|
49
|
+
|
50
|
+
ASP.NET MVC アプリの場合は、ユーザー入力の検証結果をどのようにユーザーに伝えるかがメインとなり、そのための機能にデータアノテーション属性による検証とエラーメッセージの表示があると思います。(それだけではないとは思いますが、範囲を広げると話が発散するので)
|
51
|
+
|
52
|
+
そのためには、以下のような配慮をするということだと思います。(質問者さんの言う「管理」とは違うかもしれませんが)
|
53
|
+
|
54
|
+
(1) DataType 属性による検証やデフォルトのエラーメッセージに頼らず、Range, RegularExpression, Required, StringLength 属性などを組み合わせて使い、エラーメッセージは自分で各データアノテーション属性の ErrorMessage プロパティに設定する。そのあたりについての詳細は以下の記事を見てください。
|
55
|
+
|
56
|
+
DataType 属性による検証
|
57
|
+
[http://surferonwww.info/BlogEngine/post/2016/03/08/validation-by-datatypeattribute-and-default-error-message.aspx](http://surferonwww.info/BlogEngine/post/2016/03/08/validation-by-datatypeattribute-and-default-error-message.aspx)
|
58
|
+
|
59
|
+
(2) コードにエラーメッセージをハードコーディングしたくないならリソースファイルを使用する。リソースファイルを使用すればもちろん国際化はできます。詳しくは以下の記事を見てください。
|
60
|
+
|
61
|
+
データアノテーション検証の多言語対応
|
62
|
+
[http://surferonwww.info/BlogEngine/post/2014/09/11/multi-languages-message-for-data-annotation.aspx](http://surferonwww.info/BlogEngine/post/2014/09/11/multi-languages-message-for-data-annotation.aspx)
|
63
|
+
|
64
|
+
(3) オマケ情報ですが、ADO.NET Entity Data Model を使って作成したモデルの場合は以下のようにデータアノテーション属性を付与できます。
|
65
|
+
|
66
|
+
EDM にデータアノテーション属性を付与
|
67
|
+
[http://surferonwww.info/BlogEngine/post/2017/05/21/how-to-add-dataannotation-attributes-to-edm-generated-by-visual-studio.aspx](http://surferonwww.info/BlogEngine/post/2017/05/21/how-to-add-dataannotation-attributes-to-edm-generated-by-visual-studio.aspx)
|
1
typo 訂正
answer
CHANGED
@@ -16,7 +16,7 @@
|
|
16
16
|
|
17
17
|
(3) よほどのことがない限り try-catch は書かない。
|
18
18
|
|
19
|
-
(4) キャッチせざるを得ない場合でも
|
19
|
+
(4) キャッチせざるを得ない場合でも Exception はキャッチしない。
|
20
20
|
|
21
21
|
(5) 間違って補足してしまった例外は throw する。(注:catch ブロックでキャッチした例外を throw するとスタックトレースが途切れるので単に throw と書く)
|
22
22
|
|