C#でドメイン駆動開発をするうえで意識べきロジックの2つの種類④

当サイトではアフィリエイト広告を利用しています。

C#でドメイン駆動開発

ドメインロジックとクライアントコードについて

ロジックは2種類あります。もう少しあるかもしれませんが。ドメインロジックとクライアントコードです。ドメインロジックはビジネスロジックともいいます。アプリケーションロジックはクライアントコードとか言ったりもします。要するに使う側のコードという意味です。

MVVMでいうところのViewとViewModelがクライアントコード,Model(今回のDomainとInfrastructure)が使われるロジックになります。

ドメインロジックとは業務ロジック。業務で定義するもの。決まっているもの。などです。

アプリケーションロジックとはアプリを動かすために存在しているコードです。

業務に関係ないもの。たとえばチェックボックスチェックがあったら…とかボタンをおしたら…とかです。

仕様としては「ボタンを押したら計測結果が表示される」だとしたらボタンをおしたら…はクライアントコードです。クライアントの都合です。

「F1」キーを押したら…になるかもしれませんし,ほかの画面では起動時に計測結果を表示するかもしれません。

計測結果にはドメインロジックが多く含まれます。多くといいましたが,この仕様でデータベースに接続する場合はデータベースに接続してデータを取るまではインフラストラクチャーの仕事ですが,取得後の結果を作成するまではドメインロジックです。

データベースに計測値が1.23456で保存されていて,画面のボタンを押下すると,画面に1.23m/sと表示する場合,SQLの実行はインフラの責務ですが,「計測値は小数点以下2桁で丸める」や「計測値の単位はm/s」と知っているのはドメイン層です。

なぜならこのような仕様は画面(クライアント)に関係なく,いつどこでもそうなっているべきだからです。

他の画面からみたら小数点以下3桁で丸めたり,丸めずに切り捨てたりされると困るわけです。

そしてViewModelの仕事は1.23m/sという文字列を選び,Viewでそれを表示する。となります。

ViewModelの仕事は「選ぶ」ということです。ViewModelがこの「1.23456」は計測値だから「2桁で丸めて,単位は…」と考えてはいけないのです。

それでは最初の悪いコードと同じです。
クライアントに知識があることになります。

クライアントコードに知識があればそれは永遠に楽にならないコードになります。新しい画面に計測値を取り込んだらまた,2桁で丸めて…
プログラマー自身が考えないといけません。

そうなると担当者が変わると膨大な引き継ぎが必要です。

「こういう値はCommonFuncのこれを呼んでね」と知っている人しかコーディングできないプログラムになります。

そうなってはいけないのです。

クライアントコードに知識があってはいけないのです。