今回のC#でドメイン駆動開発で採用するアーキテクチャーに関して説明します。アーキテクチャーとはプログラム設計の枠組みでC#では参照関係を定義することでコーディングを制限します。参照できるプロジェクトと出来ないプロジェクトの依存関係を定義することでコーディングに制限をつけて異なる思想でできるだけコーディングできないようにします。
アーキテクチャーについて
階層化アーキテクチャー
ドメイン駆動開発は当初「階層化アーキテクチャー」が推奨されていました。
- ユーザーインターフェース層,
- アプリケーション層,
- ドメイン層,
- インフラストラクチャー層。
すべては下位層にのみ依存します。ユーザーインターフェースは画面部分,アプリケーションはドメインと画面を調整する薄い層(ファサードに近い?もしくわMVCのコントローラーに近い?)。
ドメイン層はビジネスロジックの置き場所。システム全体の定義域。
インフラストラクチャーは外部との接触部分(データベースとの接触部分など)のロジックを書きます。
しかしこの依存関係ではインフラでドメイン定義を参照できず,不自由が生じます。そこでドメイン層を最上位にしたアーキテクチャーが推奨されています。これを依存関係逆転等といいますが,詳しいことは置いておきます。
ヘキサゴナルアーキテクチャー
階層化アーキテクチャーの進化系?かどうかはわかりませんが,概念的にはヘキサゴナルアーキテクチャーが現状もっともよいというか,ドメイン駆動開発を表しているといわれています。
六角形のヘキサゴンを中心に何かが突き刺さっているイメージです。ドメインを中心にインフラ層はSQLServerが刺さっているかもしれないし,テストデータが刺さっているかもしれないという状態です。
UIに関してもWinFormかもしれないしWPFかもしれないといった感じです。
ドメイン層を定義してそれ以外の技術的要素をその外に書くといったイメージです。
つまりインフラ層にはSqlserverとの接触部分をコーディングしますが,それ以外のことは記述しません。大事な業務ロジックはドメイン層に書きます。
UI層も同様にUIに関連することのみを書きます。今回UI層はWinFormで書いていきますが,WinFormをWPFに置き換えるとして,書き換えないといけない部分だけをUI層に書くと思ってください。
それ以外の部分はドメイン層に書きます。
- 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#でドメイン駆動開発をするうえで私が参考にした書籍ランキング!