Slide 1

Slide 1 text

変更を楽で安全にする設計 ワークショップ編 2021年9月21日 有限会社 システム設計 増田 2021/9/22 ©有限会社システム設計 2021 1

Slide 2

Slide 2 text

ワークショップの概要 ① おさらい 変更を楽で安全にする設計スタイル ② 設計スタイル体験ツアー • 三層+ドメインモデルの体験版 ガイド付ツアー • 質疑応答・意見交換 ③ ビジネスルール追加の実験 A) ひとりの会員に同じ本は貸し出せない B) 返却期限を過ぎている会員には貸し出せない 2021/9/22 ©有限会社システム設計 2021 2

Slide 3

Slide 3 text

はじめに:ワークショップ参加の心得 ① 好奇心を解き放つ → 見たい・聞きたい・やりたい ② 自分の感覚を大切にする • 疑問・違和感 • アイデア・思いつき ③ 行動してみる • 質問してみる • 発言してみる • やってみる 2021/9/22 ©有限会社システム設計 2021 3

Slide 4

Slide 4 text

①おさらい 2021/9/22 ©有限会社システム設計 2021 4

Slide 5

Slide 5 text

変更を楽で安全にする設計スタイル 関心の分離のアプローチ ビジネスルールを表現するクラス設計 ビジネスアクションを表現するクラス設計 自己文書化(ソースコードから設計を可視化する) 2021/9/22 ©有限会社システム設計 2021 5

Slide 6

Slide 6 text

関心の分離のアプローチ ビジネスアクション 通知と記録 計算判断の実行 ビジネスルール 事業活動の決め事 計算判断ロジック データベース 通信 変数、計算式 if 文、for 文 戻り値 2021/9/22 ©有限会社システム設計 2021 6

Slide 7

Slide 7 text

関心の分離のアプローチ ビジネスアクション 通知と記録 計算判断の実行 ビジネスルール 事業活動の決め事 計算判断ロジック データベース 通信 変数、計算式 if 文、for 文 戻り値 ドメインオブジェクト カプセル化 データソース層 アプリケーション層 2021/9/22 ©有限会社システム設計 2021 7

Slide 8

Slide 8 text

ビジネスルールを表現するクラス設計 値オブジェクト 基本データを使う計算・判断ロジック をカプセル化 金額、数量、率 日付、日数、時刻、時間 区分オブジェクト 区分の列挙(enum) 区分ごとのデータとロジックや区分の 判定ロジックのカプセル化 顧客種別、配送区分、 在庫区分、… 範囲オブジェクト 値の範囲内・範囲外の判定や範囲どう しの演算をカプセル化 金額範囲、数量範囲 期間、時間帯 コレクション オブジェクト 値・区分・範囲のコレクションの リスト処理・集合演算・写像操作のカ プセル化 受注明細 スキルセット 価格表 2021/9/22 ©有限会社システム設計 2021 8

Slide 9

Slide 9 text

ビジネスアクションを表現するクラス設計 シナリオクラス 主要な活動の流れを表現(数は少ない) 詳細はアクティビティクラスで記述 予約受付シナリオ アクティビティクラス 商流・物流・金流などで、事業活動をグ ルーピングしたクラス群 要素サービスクラスを組み合わせて記述 受注アクティビティ 出荷アクティビティ 請求支払アクティビティ 要素サービスクラス リソースごとのアクションを表現 原則として一つのリポジトリを持つ 注文の記録と参照 出荷時の通知 関心事:視点と粒度の違い 2021/9/22 ©有限会社システム設計 2021 9

Slide 10

Slide 10 text

自己文書化:ソースコードから設計を可視化 a. 用語集 b. 機能一覧 c. ドメインモデルのパッケージ関連図 d. ドメインモデルのクラス関連図 e. 呼び出し関係図 f. データモデル g. 全体の構造 2021/9/22 ©有限会社システム設計 2021 10

Slide 11

Slide 11 text

②設計スタイル体験ツアー 2021/9/22 ©有限会社システム設計 2021 11

Slide 12

Slide 12 text

三層+ドメインモデル体験版ツアー ① トップ画面 ② 貸出判断画面 ③ 全体の構成 ④ 機能一覧 ⑤ 用語集 ⑥ ドメインモデルのパッケージ関連図 ⑦ ビジネスルール関連図 ⑧ 呼び出し関係図(入出力視点) ⑨ 呼び出し関係図(ビジネスルール視点) ⑩ データモデル 2021/9/22 ©有限会社システム設計 2021 12

Slide 13

Slide 13 text

③ビジネスルール追加の実験 2021/9/22 ©有限会社システム設計 2021 13

Slide 14

Slide 14 text

ビジネスルールの追加をやってみる 追加するルール 図書館サービスをより多くの人に公平に提供するために定められた規則 • ひとりの会員に同じ本は貸し出せない • 返却期限を過ぎている会員には本を貸し出せない チームでモブプログラミング • どちらのルールからやってもよい(チームで決めてください) • ワークショップの中間/最後で各チームの状況・結果を発表 2021/9/22 ©有限会社システム設計 2021 14

Slide 15

Slide 15 text

進め方 ワンサイクル ① コードを書いてみる ② gradleタスク jig documentを実行(ドキュメントの更新) ③ アプリケーションの stop and run ④ 画面で貸出判断を実行 ⑤ モデル図 by JIGで、設計の変更内容を確認 Loanabilityクラスに仮実装してある二つのprivateメソッド • boolean 同じ本の貸出() • boolean 返却期限ぎれあり() 目標 • 動くようにする • 自己文書化:ルールをわかりやすく表現する 2021/9/22 ©有限会社システム設計 2021 15