RDRA DDD Agile
Transcript of RDRA DDD Agile
ドメイン駆動設計現場での実践報告
ギルドワークス 増田
2016年10月1日リレーションシップ駆動要件分析+ドメイン駆動設計+アジャイル開発
ドメイン駆動設計の効果
役に立つソフトウエアを
確実に
効率的に
ドメイン駆動設計でやらないと…
ドメイン駆動設計を支える技術
オブジェクト指向
インクリメンタルな設計
データクラス+機能クラスの世界から、オブジェクトの世界へ
設計レスでもなく、アップフロント設計でもない世界へ
(JPA,Active Record,Entity Framework…)
技術的にはこの2つの越境が、ドメイン駆動設計のターニングポイント
ドメイン駆動設計とリレーションシップ駆動要件分析
ドメイン駆動設計の基本の活動
知識をかみ砕く
言葉を活用する
モデルと実装を一致させる
第1章
第2章
第3章
プロジェクトを始めてみたものの
開発者が対象業務を知らない
言葉がばらばら、思いもばらばら
ふわっとしてあやしげな要望
どうすればよいか?
そこでリレーションシップ駆動要件分析
リレーションシップ駆動要件分析
開発者が対象業務を学ぶ
チームの言葉と思いを合わせる
実装可能なモデルを手に入れる
オブジェクト指向とインクリメンタルなアプローチがドメイン駆動設計とフィットする実践的かつ体系的
2つの越境物語
実践例の紹介
サービスの会社(スタートアップ)が本格的な業務システムに取り組んだ話
レガシーな基幹システムを抱えた会社が、サービスに取り組む話
越境物語その1アソビュー
サービスの会社が業務システムに取り組む話
• アソビュー• 全国のレジャー・遊び・体験が探せる日本最大級の検索・予約サイト
• バックオフィス業務は必要最小限、かつ人間系でがんばっているが…
• 事業のさらなら発展のためには• バックオフィスのシステム充実が必須• ただし、• ビジネスモデルや業務フローは変わり続ける
電子チケットサービス
• ネット上で電子チケットの購入• 入場時に、電子チケットの提示と「もぎり」
• 挑戦– 金流の変更
• before : 主催会社にお金が入り、手数料を請求
• after: アソビューにお金が入り、主催会社に支払い
– バックオフィス業務の複雑化– 確実性や迅速性の要求– バックオフィスシステムの開発経験不足
そこで
ドメイン駆動設計with
リレーションシップ駆動要件分析
「もぎり」電子チケットの購入
業務を知る言葉と思いを合わせる
実装可能なモデルを手に入れる
全体の俯瞰、キーワードの洗い出し
主要な関心事をとりあえず洗い出す
業務の流れを追いかける
業務の流れを追いかける
重要な概念の発見
実装可能なモデルに発展させる
商品タイプ
実体
「チケットブック」は、営業説明やヘルプに取り入れらた
やってみた結果
• 2か月での迅速なリリース• その後、事業もシステムも順調に成長中
• 企画部門や経営者から「チケットのような作り方」に高い評価
• IT戦略としてのドメイン駆動設計
越境物語その2ビッグローブ
レガシー基幹システムを抱えた会社がサービスに取り組む話
• ビッグローブ– 1986.4 パソコン通信サービス「PC-VAN」– 1995.2 インターネット接続サービス「mesh」– 1996.7 総合インターネットサービス「BIGLOBE」– 2006.7 NECから分社– 2014.4 NECグループから独立
• 現在の主力サービス– BIGLOBE SIM
• SIM差し替えでスマフォが低価格に
– BIGLOBE スマホ• スマホ+回線のセットプラン
– ビッグローブ光• 速くて安心、低価格のインターネット
挑戦
• 急激な事業環境の変化• スマホ分野の激しい競争
• それに適応するための機動的なサービス投入
• ただし• レガシーな基幹システム/独自言語• 過去のサービスと顧客のサポート
カオスサブシステム単位で整理をしても…
どうする?
そこで
ドメイン駆動設計with
リレーションシップ駆動要件分析
やりはじめた時の説明資料(抜粋)
リッチなドメインモデル
シンプルなドメインモデル
実装スタイルの選択
リッチなトランザクションスクリプト
シンプルなトランザクションスクリプト
• 大きい(たくさんのインスタンス変数)• データの入れ物(getter/setter)• テーブルの粒度と対応
• 小さなドメインオブジェクトで役割分担• データ+ロジックをひとかたまりに• 粒度はテーブルのカラムに近い
機能ごとの手続き型の記述
問題領域のオブジェクトモデル
手続指向 オブジェクト指向
リファクタリング
モデリングプログラミング
イテレーティブで発見的な活動
ドメインモデルの開発
三位一体
ドメイン駆動の開発プロセス
業務フロー
モデルの改良
要約、骨格
画面・帳表ユースケース
属性の追加モデルの洗練
イベント 状態遷移
データモデル
初期のラフモデル
コンテキスト図
手がかかり
初日からドメインモデルの設計と実装
ロバストネス分析
必要ならシーケンス図
操作追加
Javaソース
基盤クラス追加
DDL/SQLソース
問題領域の把握
構造化用語集
リレーションシップ駆動要件定義(RDRA)
・コンテキストモデル・業務フローモデル・イベント/状態モデル
ICONIX
・ドメインオブジェクトの発見・ドメインモデルの育て方・ロバストネス分析
ビジネスルールの発見と定義
・業務フロー図・ドメインモデル・イベント/状態モデル
問題領域を把握する
初期のラフモデルを2時間以内で描く
モデル間を関連づけ整合性と網羅性を確保
ユースケースと実装のギャップを埋める
三つのモデルからビジネスルールを抽出するヒントとテクニック
実際にやってみた
DDD 適用サービスの歴史
2013年 2014年 2015年
Wi-Fiスポット
LTE/3G音声
Biglobe電話
Biglobe光
MVNO支援サービス
リニューアル
ドコモ光
LTE/3G全部
新規サービス
LTE/3G帯域制御
NINJA SIM
※初回S-inのみ記載。各サービスは現在も開発中。
コンテキストのラフスケッチ
業務フロー
ビックローブで初めて作ったドメインモデル
変更しながらkeepしているドメインモデル
やってみた結果
• 第1世代 白紙からの越境 苦戦と突破
• 第2世代 手ごたえと広がり
• 第3世代 それがあたりまえの方向に
• 世代を超えて、現在も挑戦中
ドメイン駆動設計の効果
役に立つソフトウエアを
確実に
効率的に
ドメイン駆動設計でやらないと…
ドメイン駆動設計の基本の活動
知識をかみ砕く
言葉を活用する
モデルと実装を一致させる
第1章
第2章
第3章
プロジェクトを始めてみたものの
開発者が対象業務を知らない
言葉がばらばら、思いもばらばら
ふわっとしてあやしげな要望
どうすればよいか?
リレーションシップ駆動要件分析
開発者が対象業務を学ぶ
チームの言葉と思いを合わせる
実装可能なモデルを手に入れる
オブジェクト指向とインクリメンタルなアプローチがドメイン駆動設計とフィットする実践的かつ体系的
越境アジャイル
インクリメンタルな越境
少しずつ
継続的に
越境アジャイル
その先にあるもの
ソーシャルチェンジ
• どんな状況でも改善できる• どんなときでも「あなた」から改善を始められる• どんなときでも「今日」から改善を始められる
エクストリームプログラミングの「はじめに」に記されたケント・ベックのメッセージ