Upgrade to Pro — share decks privately, control downloads, hide ads and more …

変更を楽に安全にするための設計:ワークショップ編

8f84b7d8869ef6005d89b378e8661f7c?s=47 増田 亨
September 22, 2021

 変更を楽に安全にするための設計:ワークショップ編

下記資料の設計スタイルを体験的に学ぶためのワークショップ
株式会社シンプレクスさん( https://www.simplex.inc/ )の勉強会で使った資料を公開します。

「設計を楽で安全にする設計」
https://speakerdeck.com/masuda220/bian-geng-wole-nian-quan-nisurutamefalseshe-ji-falsekao-efang-toyarifang

ワークショップに使ったサンプルコード
https://github.com/masuda220/loan-rule

8f84b7d8869ef6005d89b378e8661f7c?s=128

増田 亨

September 22, 2021
Tweet

Transcript

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

  2. ワークショップの概要 ① おさらい 変更を楽で安全にする設計スタイル ② 設計スタイル体験ツアー • 三層+ドメインモデルの体験版 ガイド付ツアー •

    質疑応答・意見交換 ③ ビジネスルール追加の実験 A) ひとりの会員に同じ本は貸し出せない B) 返却期限を過ぎている会員には貸し出せない 2021/9/22 ©有限会社システム設計 2021 2
  3. はじめに:ワークショップ参加の心得 ① 好奇心を解き放つ → 見たい・聞きたい・やりたい ② 自分の感覚を大切にする • 疑問・違和感 •

    アイデア・思いつき ③ 行動してみる • 質問してみる • 発言してみる • やってみる 2021/9/22 ©有限会社システム設計 2021 3
  4. ①おさらい 2021/9/22 ©有限会社システム設計 2021 4

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

  6. 関心の分離のアプローチ ビジネスアクション 通知と記録 計算判断の実行 ビジネスルール 事業活動の決め事 計算判断ロジック データベース 通信 変数、計算式

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

    if 文、for 文 戻り値 ドメインオブジェクト カプセル化 データソース層 アプリケーション層 2021/9/22 ©有限会社システム設計 2021 7
  8. ビジネスルールを表現するクラス設計 値オブジェクト 基本データを使う計算・判断ロジック をカプセル化 金額、数量、率 日付、日数、時刻、時間 区分オブジェクト 区分の列挙(enum) 区分ごとのデータとロジックや区分の 判定ロジックのカプセル化

    顧客種別、配送区分、 在庫区分、… 範囲オブジェクト 値の範囲内・範囲外の判定や範囲どう しの演算をカプセル化 金額範囲、数量範囲 期間、時間帯 コレクション オブジェクト 値・区分・範囲のコレクションの リスト処理・集合演算・写像操作のカ プセル化 受注明細 スキルセット 価格表 2021/9/22 ©有限会社システム設計 2021 8
  9. ビジネスアクションを表現するクラス設計 シナリオクラス 主要な活動の流れを表現(数は少ない) 詳細はアクティビティクラスで記述 予約受付シナリオ アクティビティクラス 商流・物流・金流などで、事業活動をグ ルーピングしたクラス群 要素サービスクラスを組み合わせて記述 受注アクティビティ

    出荷アクティビティ 請求支払アクティビティ 要素サービスクラス リソースごとのアクションを表現 原則として一つのリポジトリを持つ 注文の記録と参照 出荷時の通知 関心事:視点と粒度の違い 2021/9/22 ©有限会社システム設計 2021 9
  10. 自己文書化:ソースコードから設計を可視化 a. 用語集 b. 機能一覧 c. ドメインモデルのパッケージ関連図 d. ドメインモデルのクラス関連図 e.

    呼び出し関係図 f. データモデル g. 全体の構造 2021/9/22 ©有限会社システム設計 2021 10
  11. ②設計スタイル体験ツアー 2021/9/22 ©有限会社システム設計 2021 11

  12. 三層+ドメインモデル体験版ツアー ① トップ画面 ② 貸出判断画面 ③ 全体の構成 ④ 機能一覧 ⑤

    用語集 ⑥ ドメインモデルのパッケージ関連図 ⑦ ビジネスルール関連図 ⑧ 呼び出し関係図(入出力視点) ⑨ 呼び出し関係図(ビジネスルール視点) ⑩ データモデル 2021/9/22 ©有限会社システム設計 2021 12
  13. ③ビジネスルール追加の実験 2021/9/22 ©有限会社システム設計 2021 13

  14. ビジネスルールの追加をやってみる 追加するルール 図書館サービスをより多くの人に公平に提供するために定められた規則 • ひとりの会員に同じ本は貸し出せない • 返却期限を過ぎている会員には本を貸し出せない チームでモブプログラミング • どちらのルールからやってもよい(チームで決めてください)

    • ワークショップの中間/最後で各チームの状況・結果を発表 2021/9/22 ©有限会社システム設計 2021 14
  15. 進め方 ワンサイクル ① コードを書いてみる ② gradleタスク jig documentを実行(ドキュメントの更新) ③ アプリケーションの

    stop and run ④ 画面で貸出判断を実行 ⑤ モデル図 by JIGで、設計の変更内容を確認 Loanabilityクラスに仮実装してある二つのprivateメソッド • boolean 同じ本の貸出() • boolean 返却期限ぎれあり() 目標 • 動くようにする • 自己文書化:ルールをわかりやすく表現する 2021/9/22 ©有限会社システム設計 2021 15