Open16

DDDを荒く理解する

慕狼ゆに慕狼ゆに

ドメインモデリング

  • 特定の問題領域を理解して、それを図に起こしたりモデルを作成する行為のこと

ドメインモデリングの段取り

  • コアドメイン、サブドメインの特定
  • 境界づけられたコンテキストの定義
  • エンティティの特定
  • ビジネスルールの把握
慕狼ゆに慕狼ゆに

ドメインモデリングの手法に決まった方法はない。

手法1:イベントストリーミング

  • 複雑なビジネスプロセスやドメインの知識を共有、可視化、そして理解するための共同作業ベースのモデリング手法
  • 「ドメインイベント」「ポリシー」「コマンド」「アクター」「ビュー・リードモデル」「集約(エンティティ)」「外部システム」の7つの主要な要素に分解する

手法2:リレーションシップ駆動要件分析(RDRA)
「網羅性」「整合性」「表現力」の3要素を高いレベルで次元するための要件分析フレームワーク
https://qiita.com/tatane616/items/f7f4e5ad818fe8b125d6

手法3:ユースケース駆動開発
システムの昨日を利用者から見た振る舞いを記述したもの(ユースケース)に分割し、それを元に要件分析から実装までの工程を進めていく手法
https://zenn.dev/cacbahbj/articles/1b8fcce49042fc
https://tonio.hateblo.jp/entry/2022/06/11/043858

慕狼ゆに慕狼ゆに

ドメインモデル図
特定のドメインの主要な概念、エンティティ、属性、これらの要素感の関係性を視覚的に表現した図

慕狼ゆに慕狼ゆに

この記事では、オニオンアーキテクチャを採用している

オニオンアーキテクチャ

  • アプリケーションを複数のレイヤーで構成し、それらを円形に配置することを特徴とする
  • ドメイン中心の設計。ドメイン層が他の層に依存しないようにする
  • レイヤー構造
    • ドメイン層
    • アプリケーション層
    • インフラストラクチャ層
    • プレゼンテーション層
慕狼ゆに慕狼ゆに

値オブジェクト

  • エンティティと並びドメインモデル(ドメインオブジェクト)の中心的な要素で、ドメイン内の様々な値の概念をモデル化するのに用いられる
慕狼ゆに慕狼ゆに

エンティティ

  • エンティティと並びドメインモデル(ドメインオブジェクト)の中心的な要素で、ドメイン無いの様々なビジネスの実態の概念をモデル化するのに用いる
慕狼ゆに慕狼ゆに

集約

  • 関連するオブジェクト郡を1つのユニットとして管理するための手法ビジネスルールとデータの整合性を維持するために設計される。集約の設計が適切であれば、データベースに保存されているデータは、ビジネスルールに従って常に一貫性を保つことができる
慕狼ゆに慕狼ゆに

ドメインサービス

  • ドメインモデルの中で、エンティティや値オブジェクトだけえは自然に表現できないビジネスロジックをカプセル化するためのもの
  • ドメイン層の中に位置する

ドメインサービスを利用する基準

  • 複数集約をまたいだ処理が必要な場合
  • DB程度への問い合わせが必要な場合

ドメインサービズを乱用するアンチパターンとかもあるらしい

慕狼ゆに慕狼ゆに

リポジトリ

  • インフラストラクチャ層のオブジェクトで、集約の永続化を抽象化する役割を果たす。

リポジトリの責務

  • 集約の永続化
  • 集約の復元

ドメイン層がインフラストラクチャ層に依存することを防ぐ役割がある。

慕狼ゆに慕狼ゆに

アプリケーションサービス

  • ユースケースを実現するための操作を提供するサービス。ドメイン層の「エンティティ」「値オブジェクト」「ドメインサービス」などのドメインオブジェクトを利用してユースケースを実現する