C#でドメイン駆動開発

C#でドメイン駆動開発【DDD】エラー処理とExceptionの書き方!⑬

Udemyで公開しているC#のコースを1つ無料でプレゼントしています。こちらから確認してください。

プログラムにはエラー処理が必要です。ドメイン駆動開発とは直接関係はないですが

最後にエラー処理の書き方について解説します。

エラー処理に関して

Save時に今はエラーチェックをしていません。

MeasureValueを空文字で実行するとFormatExceptionが発生します。

 

シナリオとしては空文字なら

「計測値を入力してください」というメッセージを表示するのが適切です。

 

次は適切にエラーチェックがされていることのテストコードを書いていきましょう。

 

MeasureSaveViewModelTestに新しいテストメソッドを作成します。

途中までは一つ目のテストと同じ内容です。

異なるのはvar ex = AssertEx.Throwsの部分です。

 

ここではviewModelのSaveを実行したときに,

MessageExceptionが通知されることをテストしています。

 

その次の行ではその例外のMessageの内容を検査しています。

ここではMeasureValueが初期値の空文字の状態で

Saveを行うとエラー通知が行われるテストをしています。

 

MessageExceptionは意図していない例外と切り分けるために

独自で作成した例外クラスです。

 

ドメイン層にExceptionsというフォルダを作成し,

その中に作成します。

 

MessageExceptionなどの独自で作成した例外は例外レベルを

判断できるようにべって「ExceptionBase」という抽象クラスを継承し,

またその中で「ExceptionType」という列挙体で例外の種類を切り分けています。

 

 

テストを実行してみます。

NGになります。

 

MeasureSaveViewModelのSaveメソッドに次のコードを追加します。

 

Guardクラスは,チェック関連をまとめた静的クラスです。

エラーチェックはいくつかのパターンが決まってくるため,

各クライアントコードでNullチェックなどのif分を書かずに

1行で済ませられるように,

このような静的クラスをまとめています。

 

Guardクラスはドメイン層のHelpersフォルダに入れています。

このようにビジネスロジックを含まない共通コードはHelpersに入れておきます。

これでテストを実行すると成功します。

それではUIとインフラストラクチャを作成しましょう。

Viewsフォルダに「MeasureSaveView」フォームを作成します。

計測日時はDateTimePickerでNameはMeasureDateTextBox,

計測値はTextBoxでNameはMeasureValueTextBox,

label3はNameをUnitLabel,SaveボタンはNameをSaveButtonとします。

画面のコードを開きます。

 

MeasureSaveViewModelの生成でコンパイルエラーが出るため,

以下のコンストラクタを追記します。

MeasureFakeのSaveメソッドが未実装のため追記します。

ここでは,すでにMeasureIdが存在している場合は,

値の変更。存在していない場合は追加しています。

最後までお読みいただきありがとうございました。
さらにドメイン駆動を学びたいという勉強家の方は
頭のいい先人の本を是非読んでみてください。

あわせて読みたい
C#でドメイン駆動開発をするうえで私が参考にした書籍ランキング!私はメーカーでC#などを使った製品開発をしています。 メーカーの辛さは,製品リリースされたら,ソフトのメンテナンスが必要なことです。 ...

Udemyで公開しているC#のコースを1つ無料でプレゼントしています。こちらから確認してください。