#author("2020-06-28T05:18:25+00:00","default:admin","admin") -[[公式サイト:http://domaindrivendesign.org/]] -[[Domain Driven Design(ドメイン駆動設計) Quickly 日本語版:http://www.infoq.com/jp/minibooks/domain-driven-design-quickly;jsessionid=E8C1652BF2AAC131C2E54001B3266405]] --[[PDF:http://www.infoq.com/resource/minibooks/domain-driven-design-quickly/ja/pdf/DomainDrivenDesignQuicklyOnline_JP.pdf]] -[[ドメイン駆動設計 基本を理解する:https://www.slideshare.net/masuda220/ss-59756718]] -[[3つのキーワードで学ぶ、ドメイン駆動設計の基礎知識:https://logmi.jp/tech/articles/310424]] -[[ドメイン駆動設計は何を解決しようとしているのか[DDD]:https://qiita.com/little_hand_s/items/721afcbc555444663247]] -[[ドメイン駆動設計を成功させるためのICONIXプロセスを考える:https://logmi.jp/tech/articles/323010]] *概要 [#be57db19] **キーワード [#ecd90615] ***ドメイン [#acb14e6d] 問題領域、対象領域 **特徴 [#v96c0c6a] ***ドメインロジックに焦点を合わせる [#h99aae64] -ドメインの状況を表している値の種類をまず見つける -それに対してどんな計算ロジック、判定ロジックがあるかということを見つけ出す -その判定結果や計算結果をどう表現するかを決める -以下はドメインロジック以外の関心事 = ドメインロジックに従属すべき関心事 --画面の入出力 --DBアクセス --API -ドメインロジックに焦点を合わせる理由 --ソフトウェアの複雑さの原因は、ドメインロジック(計算ロジックと判定ロジック)にある --ドメインロジックと入出力が混在していると、ドメインロジックの全体像や構造が見えてこない --入出力の関心事を分離して、ドメインロジックだけを対象にすると、ドメインロジックの輪郭や構造がはっきりしてくる --ドメインロジックの輪郭や構造が見えてくると、計算ロジックと判定ロジックの発見が進み、ロジックの整理がやりやすくなる --計算ロジックと判定ロジックが整理できると、入出力の記述もシンプルになる --ソフトウェア全体の見通しが良くなり、変更が楽で安全になる ***オブジェクト指向でモジュール化する [#m6d6143e] -入出力単位のモジュール化 -値の種類ごとのモジュール化 ***インクリメンタルに設計する [#r3f162ae] -対象領域の知識を少しずつ広げ、掘り下げる -最初に書いたコードを見直しながら改善する -時間とともに具体的で詳細になっていく要求を、時間とともにコードに反映する -時間とともに変化する要求を、時間とともにコードに反映する **ドメインモデルを表現する要素 [#ef43c0f0] ***エンティティ (参照オブジェクト) [#b9c07b00] ドメインモデル内のオブジェクトであり、その属性によってではなく、連続性と識別性によって定義される。 ***値オブジェクト [#z0a6ec42] 事物の特性を記述するオブジェクトである。特に識別する情報はなく、通例、読み出し専用のオブジェクトであり、Flyweight パターンを用いて共有できる。 ***サービス [#v09ec342] 操作がオブジェクトに属さない場合に、問題の自然な解決策として、操作をサービスとして実現することができる。サービスの概念は、GRASPにおいて"純粋人工物"と呼ばれるものである。 ***リポジトリ [#i2e3e583] ドメインオブジェクトを取得するメソッドは、記憶域の実装を簡単に切り替えられるようにするため、専門のリポジトリオブジェクトに処理を委譲するべきである。 ***ファクトリー [#e0841620] ドメインオブジェクトを生成するメソッドは、実装を簡単に切り替えられるようにするため、専門のファクトリーオブジェクトに処理を委譲するべきである。 *アーキテクチャ [#d69929a5] -[[[DDD]ドメイン駆動設計で実装を始めるのに一番とっつきやすいアーキテクチャは何か:https://qiita.com/little_hand_s/items/ebb4284afeea0e8cc752]] -[[[DDD]ドメイン駆動 + オニオンアーキテクチャ概略:https://qiita.com/little_hand_s/items/2040fba15d90b93fc124]]