0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ドメイン駆動設計(DDD)のざっくりとした考え

Posted at

1.ドメイン駆動設計の基本的な考え方

  • 「ドメイン」とは何か?
    • ドメインとは「そのシステムが解決しようとする業務の世界」のことです。たとえば、銀行システムなら「お金の預け入れや送金」、オンラインショップなら「商品購入や在庫管理」がドメインです。
    • ドメイン駆動設計では、「その業務の仕組みやルール(ドメイン)」を理解することが最優先になります。
  • ビジネスの専門家と開発者が協力する
    • DDDでは、ビジネスの専門家(顧客や業務担当者)と開発者が一緒に議論し、システムの中核となる業務(ドメイン)を深く理解して設計を進めます。
    • 専門家から聞いた業務ルールを正しく反映させたシステムを作ることが目標です。

2. DDDを構成する重要な要素

ドメイン駆動設計では、いくつかの「核となる考え方」があります。以下はその中でも重要な3つです。

(1) ユビキタス言語(Ubiquitous Language)

  • 何をするもの?
    • ドメイン駆動設計では、開発者と業務担当者が共通して使う「言葉」を統一します。これを「ユビキタス言語」と呼びます。
  • なぜ必要?
    • 「業務担当者と開発者で使う言葉が違うと誤解が生まれる」ことを防ぎます。
    • たとえば、「顧客」という言葉を「ユーザー」と混同しないよう、明確に定義します。

(2) エンティティとバリューオブジェクト

  • エンティティ(Entity)
    • 業務上「一意の識別子」を持つもの。
    • 例: 図書館の「利用者」や「図書」はエンティティです。利用者IDや図書IDで特定できるからです。
  • バリューオブジェクト(Value Object)
    • 業務上「単なる値として扱うもの」。
    • 例: 「住所」や「日付」は値としてシステムに扱われ、個別のIDを必要としません。

(3) 集約(Aggregate)

  • 何をするもの?
    • 業務で扱うデータを「まとまり」としてグループ化し、外部とのやり取りをシンプルにします。
    • 例: 図書館システムなら、「貸出」という集約の中に「利用者」「図書」「返却期限」が含まれる形。
  • メリット
    • データの管理がシンプルになり、システム全体の複雑さを減らせます。

3. DDDでシステムを作る流れ

大きく分けると、以下の流れでシステムを設計・構築します。

(1) ドメインの理解

  • 業務の専門家(顧客)にインタビューし、業務のルールや仕組みを深く理解します。
  • ユビキタス言語を作り、開発者と顧客が「共通言語」を使えるようにします。

(2) ドメインモデルの設計

  • 業務ルールをもとに、エンティティ、バリューオブジェクト、集約などを設計します。
  • 例: 図書館の「貸出モデル」には、「利用者」「図書」「貸出日」「返却期限」が含まれます。

(3) 実装

  • 設計したドメインモデルをコードに落とし込みます。
  • 業務ルールが変更された場合も簡単に対応できる設計を目指します。

4. DDDのメリットと課題

メリット

  • 業務ルールに忠実なシステムを作れる。
  • システムが拡張しやすく、変更に強くなる。
  • 開発者と業務担当者の意思疎通が良くなる。

課題

  • ドメイン駆動設計を実践するには、業務の深い理解と設計力が求められる。
  • 小規模なプロジェクトでは、DDDを適用するコストが高い場合がある。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?