BETA

ドメイン駆動開発を少しずつ学ぶ(C#) 

投稿日:2019-12-30
最終更新:2019-12-31

ドメイン駆動開発を勉強中です。
入門書や、入門者向け解説サイトをいくつか読んでみたレベルですが、簡単なアプリケーション(C#)を作って自分なりのメモを残していきたいと思います。
※誤った認識が含まれている可能性があるため、書籍やWebサイトのほうを参考にしてください。

プログラムはGithubに載せています。
yaya-io/Practice-CsharpDDD1

参考書籍・参考サイト

作るアプリケーション(C#)について

  • 簡単なデータの表示・登録の仕組みのある最低限のGUIアプリとしています。
  • ベースのプロジェクト構成は、参考書籍①を参考にしてプラスαしています。


プロジェクト構成

以下の5つのプロジェクト構成にしています

Domain

  • 他のレイヤー(プロジェクト)に依存しないようにする
  • Entity、ValueObject、IRepositoryを配置する
    Repositoryのインターフェースのみ配置して、実装はInfrastructureに配置する(依存関係逆転)
    Domain内ではこのインターフェースに対して処理を行うので、Infrastructure等、他のプロジェクトに依存しない
  • システム内で扱うExceptionクラスや、Helperメソッド群のクラスも配置する

ApplicationService

  • ドメインモデルを直接扱う要素としてアプリケーションサービスを利用する
  • アプリケーションサービスはドメイン領域で何ができるか?を表現する

UI

  • UIを含むプロジェクト
  • 今回はWindowsFormで作成(他のレイヤーは分割しているため、UI部分をWebアプリケーションやWPFに差し替えることができる)
  • MVVMの双方向バインディングを用いる
    INotifyPropertyChangedを実装したViewModelを使用
  • UIからアプリケーションサービスを呼び出して目的の機能を実現する

Infrastructure

  • DomainのIRepositoryに対する実装を配置する
  • データベースなど、永続化を行う層
  • データベースに接続せずにテストをできるようにするため、Fakeクラスを利用(IRepositoryの実装)

Tests

  • テストプロジェクト(MSTest)
  • ChainingAssertion、Moqというライブラリを使用する
  • 最低限テストする層としてApplicationServiceの処理をテストする

その他メモ

  • もっと複雑になってくると、この処理はどこに書いた方がいいか?といった疑問が沸いてくると思います。実践しながら経験を積まないと分からない部分も多いかと感じています。
  • 実際のシステム開発であれば下記のようにモデリングとコード化を繰り返す感じになると思います。
    • 業務フロー・ビジネスロジックからユースケースの抽出
    • 概念モデルを作成
    • 各レイヤ・コードに落とし込んで問題なく表現できているかチェック
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@yayaの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう