ドメインロジックとクライアントコードについて
ロジックは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のこれを呼んでね」と知っている人しかコーディングできないプログラムになります。
そうなってはいけないのです。
クライアントコードに知識があってはいけないのです。
- C#でドメイン駆動開発とテスト駆動開発で保守性の高いプログラムを書く!1
- C#でドメイン駆動をする前に良いコードと悪いコードの定義を理解しよう!2
- C#でドメイン駆動開発をやるうえで採用するアーキテクチャーに関して3
- C#でドメイン駆動開発をするうえで意識べきロジックの2つの種類④
- C#でドメイン駆動開発 アーキテクチャーの実装とテスト駆動での書き方を解説5
- C#でドメイン駆動開発 外部との接触箇所にRepositoryを使う!⑥
- C#でドメイン駆動開発Moqを使ったテスト駆動開発のやり方を解説!⑦
- C#でドメイン駆動設計UIとインフラストラクチャーを実装する方法⑧
- C#でドメイン駆動開発 Entityの書き方と使い方とテスト駆動!⑨
- C#でドメイン駆動開発ValueObjectでプログラムの複雑さを取り除く⑩
- C#でドメイン駆動開発 ViewModelの中に明細項目があるときの実装⑪
- C#でドメイン駆動開発 データ保存時のロジックのMoqの書き方!⑫
- C#でドメイン駆動開発【DDD】エラー処理とExceptionの書き方!⑬
- C#でドメイン駆動開発をするうえで私が参考にした書籍ランキング!