Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ドメインオブジェクトの設計ガイドライン

2,010 views

Published on

ドメイン駆動設計の内輪の勉強会用に作ったドメインオブジェクトの設計ガイドラインを公開します。

Published in: Software
  • Login to see the comments

ドメインオブジェクトの設計ガイドライン

  1. 1. ドメインオブジェクト 設計ガイドライン 2020年6月25日 有限会社システム設計 増田
  2. 2. はじめに ① ドメインオブジェクトとは? ✓ビジネスルールに基づく計算・判断のロジック(ビジネスロジック) を記述するためのオブジェクト ② ドメインオブジェクト設計の要点 ✓ビジネスで関心のある値の種類に注目する ✓ビジネスの関心事とプログラミングの関心事を分離する ✓値の種類ごとの計算・判断の「操作」に注目する ✓操作は「メソッド名」「引数の型」「メソッドの返す値の型」で定義 する
  3. 3. ビジネスで関心のある値の分類 数値系 金額、数量、率、金額範囲、数量範囲、… 日付系 日付、日数、期間、日数範囲、時刻、時間、… 分岐系 区分、種類、種別、… ドメインオブジェクトの基本単位は、この分類をさらに用途別に細分化した 業務用語として使う、売上金額・割引額・原価・手数料などにする
  4. 4. 2種類の型 • 独自に定義する型(アプリケーション特化の型) • ドメインオブジェクト • ビジネスの関心事の表現(業務用語と対応させる) • 業務用語と対応しない汎用型は原則として独自に定義しない • 基本の型(汎用的な型) • 標準ライブラリの型(String, LocalDate, List, Map, … ) • プリミティブの型( int, long, boolean, char, 配列)
  5. 5. 型を使う場所 • フィールド変数の型 • メソッドの引数の型 • メソッドが返す値の型 • ローカル変数の型 ※ ドット連鎖でローカル変数を暗黙化するのは非推奨 ※ 積極的に説明用変数を使って意図を明示する ※ 説明用変数が増えたらメソッドの抽出 and/or ロジックの移動を検討する
  6. 6. 型の使い方の傾向分析 類別 フィールドの型(非公開) メソッドが返す型 メソッドの引数の型 ドメイン特化型 ドメインオブジェクト ドメインオブジェクト ドメインオブジェクト 混合型A ドメインオブジェクト ドメインオブジェクト 基本型 混合型B(怪しい) ドメインオブジェクト 基本型 ドメインオブジェクト 混合型C 基本型 ドメインオブジェクト 基本型 混合型D(怪しい) 基本型 基本型 ドメインオブジェクト 自立型 基本型 自分の型 または基本型 自分の型 または基本型 汎用部品(怪しい) 基本型 基本型 基本型 Good! Good! 注)業務で使う識別番号(従業員番号など)は、汎用部品の一種だが業務の関心事の表現として使用する
  7. 7. ドメインオブジェクトの評価基準 優 ビジネスの中心的な関心事を表現している 良 ビジネスの周辺的な関心事を表現できている 可 いちおうビジネスの間接的な関心事と言える 不可 ビジネスの関心事とは言えない 「優」と「良」を目指す(数としては「優」は少なくてよい。「良」が多い。) 不可は削除を検討する(ロジックの移動 and/or インライン化)
  8. 8. ドメインオブジェクトの怪しげな名前 ◆汎用的な言葉のクラス名 例:曜日、月、時刻 → 名前を具体的にする or ロジックをインライン化してクラスを削除 ◆業務で使いそうもない名前 例:15分単位日時 → とりあえずの関心事の表現としては問題ない → これを手掛かりに名前の改善 or ロジックインライン化とクラス削除 → 長期間、放置しない
  9. 9. ドメインオブジェクトの設計スキル向上 ① 業務知識を増やす ✓業務に登場する言葉を自分の語彙にする ✓業務に登場する言葉を組み合わせて文章を書けるようになる ✓業務に登場する似た言葉の使い分けを理解する ② クラスの設計スキルを磨く ✓クラスの設計とは「ソッドの一覧」の定義であることを理解する ✓メソッドの引数の型、メソッドの返す値の型に注目する ✓フィールドを参照しないメソッドを書かない ✓ロジックを持たないメソッド(getter/setter)を書かない
  10. 10. オブジェクトの基本操作(設計のヒント) 加算・減算 同じ型を引数にとり、結果として同じ型を返す 乗算 他の型を引数にとり、結果として同じ型を返す(加算の繰り返し) 除算 同じ型を引数にとり、有理数または整数を返す 除算 整数を引数にとり、除算の結果として同じ型を返す 一致・不一致 同じ型を引数にとり、判定区分を返す 比較演算 同じ型を引数にとり、判定区分を返す 最大・最小 有効な値の範囲を定義して公開する 前後の値 同じ型の「前の値」「後の値」を返す (循環あり/循環なし) 文字列化 オブジェクトの値の標準的な文字列形式を返す オブジェクト化 標準的な文字列形式からオブジェクトを生成する(static) ✓ 必要最小限の操作だけを定義する(網羅を目指さない) ✓ メソッド名にできるだけ業務の用語を使う(汎用的なメソッド名を避ける)

×