RDRA DDD Agile

47
ドメイン駆動設計 現場での実践報告 ギルドワークス 増田 2016101リレーションシップ駆動要件分析+ドメイン駆動設計+アジャイル開発
  • Upload

    -
  • Category

    Software

  • view

    2.329
  • download

    0

Transcript of RDRA DDD Agile

Page 1: RDRA DDD Agile

ドメイン駆動設計現場での実践報告

ギルドワークス 増田

2016年10月1日リレーションシップ駆動要件分析+ドメイン駆動設計+アジャイル開発

Page 2: RDRA DDD Agile

ドメイン駆動設計の効果

役に立つソフトウエアを

確実に

効率的に

ドメイン駆動設計でやらないと…

Page 3: RDRA DDD Agile

ドメイン駆動設計を支える技術

オブジェクト指向

インクリメンタルな設計

データクラス+機能クラスの世界から、オブジェクトの世界へ

設計レスでもなく、アップフロント設計でもない世界へ

(JPA,Active Record,Entity Framework…)

技術的にはこの2つの越境が、ドメイン駆動設計のターニングポイント

Page 4: RDRA DDD Agile

ドメイン駆動設計とリレーションシップ駆動要件分析

Page 5: RDRA DDD Agile

ドメイン駆動設計の基本の活動

知識をかみ砕く

言葉を活用する

モデルと実装を一致させる

第1章

第2章

第3章

Page 6: RDRA DDD Agile

プロジェクトを始めてみたものの

開発者が対象業務を知らない

言葉がばらばら、思いもばらばら

ふわっとしてあやしげな要望

どうすればよいか?

Page 7: RDRA DDD Agile

そこでリレーションシップ駆動要件分析

Page 8: RDRA DDD Agile

リレーションシップ駆動要件分析

開発者が対象業務を学ぶ

チームの言葉と思いを合わせる

実装可能なモデルを手に入れる

オブジェクト指向とインクリメンタルなアプローチがドメイン駆動設計とフィットする実践的かつ体系的

Page 9: RDRA DDD Agile

2つの越境物語

実践例の紹介

サービスの会社(スタートアップ)が本格的な業務システムに取り組んだ話

レガシーな基幹システムを抱えた会社が、サービスに取り組む話

Page 10: RDRA DDD Agile

越境物語その1アソビュー

Page 11: RDRA DDD Agile

サービスの会社が業務システムに取り組む話

• アソビュー• 全国のレジャー・遊び・体験が探せる日本最大級の検索・予約サイト

• バックオフィス業務は必要最小限、かつ人間系でがんばっているが…

• 事業のさらなら発展のためには• バックオフィスのシステム充実が必須• ただし、• ビジネスモデルや業務フローは変わり続ける

Page 12: RDRA DDD Agile

電子チケットサービス

• ネット上で電子チケットの購入• 入場時に、電子チケットの提示と「もぎり」

• 挑戦– 金流の変更

• before : 主催会社にお金が入り、手数料を請求

• after: アソビューにお金が入り、主催会社に支払い

– バックオフィス業務の複雑化– 確実性や迅速性の要求– バックオフィスシステムの開発経験不足

Page 13: RDRA DDD Agile

そこで

ドメイン駆動設計with

リレーションシップ駆動要件分析

Page 14: RDRA DDD Agile

「もぎり」電子チケットの購入

Page 15: RDRA DDD Agile

業務を知る言葉と思いを合わせる

実装可能なモデルを手に入れる

Page 16: RDRA DDD Agile

全体の俯瞰、キーワードの洗い出し

Page 17: RDRA DDD Agile

主要な関心事をとりあえず洗い出す

Page 18: RDRA DDD Agile

業務の流れを追いかける

Page 19: RDRA DDD Agile

業務の流れを追いかける

Page 20: RDRA DDD Agile

重要な概念の発見

Page 21: RDRA DDD Agile

実装可能なモデルに発展させる

商品タイプ

実体

「チケットブック」は、営業説明やヘルプに取り入れらた

Page 22: RDRA DDD Agile

やってみた結果

• 2か月での迅速なリリース• その後、事業もシステムも順調に成長中

• 企画部門や経営者から「チケットのような作り方」に高い評価

• IT戦略としてのドメイン駆動設計

Page 23: RDRA DDD Agile

越境物語その2ビッグローブ

Page 24: RDRA DDD Agile

レガシー基幹システムを抱えた会社がサービスに取り組む話

• ビッグローブ– 1986.4 パソコン通信サービス「PC-VAN」– 1995.2 インターネット接続サービス「mesh」– 1996.7 総合インターネットサービス「BIGLOBE」– 2006.7 NECから分社– 2014.4 NECグループから独立

• 現在の主力サービス– BIGLOBE SIM

• SIM差し替えでスマフォが低価格に

– BIGLOBE スマホ• スマホ+回線のセットプラン

– ビッグローブ光• 速くて安心、低価格のインターネット

Page 25: RDRA DDD Agile

挑戦

• 急激な事業環境の変化• スマホ分野の激しい競争

• それに適応するための機動的なサービス投入

• ただし• レガシーな基幹システム/独自言語• 過去のサービスと顧客のサポート

Page 26: RDRA DDD Agile

カオスサブシステム単位で整理をしても…

Page 27: RDRA DDD Agile

どうする?

Page 28: RDRA DDD Agile

そこで

ドメイン駆動設計with

リレーションシップ駆動要件分析

Page 29: RDRA DDD Agile

やりはじめた時の説明資料(抜粋)

Page 30: RDRA DDD Agile

リッチなドメインモデル

シンプルなドメインモデル

実装スタイルの選択

リッチなトランザクションスクリプト

シンプルなトランザクションスクリプト

• 大きい(たくさんのインスタンス変数)• データの入れ物(getter/setter)• テーブルの粒度と対応

• 小さなドメインオブジェクトで役割分担• データ+ロジックをひとかたまりに• 粒度はテーブルのカラムに近い

機能ごとの手続き型の記述

問題領域のオブジェクトモデル

手続指向 オブジェクト指向

Page 31: RDRA DDD Agile

リファクタリング

モデリングプログラミング

イテレーティブで発見的な活動

ドメインモデルの開発

三位一体

Page 32: RDRA DDD Agile

ドメイン駆動の開発プロセス

業務フロー

モデルの改良

要約、骨格

画面・帳表ユースケース

属性の追加モデルの洗練

イベント 状態遷移

データモデル

初期のラフモデル

コンテキスト図

手がかかり

初日からドメインモデルの設計と実装

ロバストネス分析

必要ならシーケンス図

操作追加

Javaソース

基盤クラス追加

DDL/SQLソース

問題領域の把握

構造化用語集

Page 33: RDRA DDD Agile

リレーションシップ駆動要件定義(RDRA)

・コンテキストモデル・業務フローモデル・イベント/状態モデル

ICONIX

・ドメインオブジェクトの発見・ドメインモデルの育て方・ロバストネス分析

ビジネスルールの発見と定義

・業務フロー図・ドメインモデル・イベント/状態モデル

問題領域を把握する

初期のラフモデルを2時間以内で描く

モデル間を関連づけ整合性と網羅性を確保

ユースケースと実装のギャップを埋める

三つのモデルからビジネスルールを抽出するヒントとテクニック

Page 34: RDRA DDD Agile

実際にやってみた

Page 35: RDRA DDD Agile

DDD 適用サービスの歴史

2013年 2014年 2015年

Wi-Fiスポット

LTE/3G音声

Biglobe電話

Biglobe光

MVNO支援サービス

リニューアル

ドコモ光

LTE/3G全部

新規サービス

LTE/3G帯域制御

NINJA SIM

※初回S-inのみ記載。各サービスは現在も開発中。

Page 36: RDRA DDD Agile

コンテキストのラフスケッチ

Page 37: RDRA DDD Agile

業務フロー

Page 38: RDRA DDD Agile

ビックローブで初めて作ったドメインモデル

Page 39: RDRA DDD Agile

変更しながらkeepしているドメインモデル

Page 40: RDRA DDD Agile

やってみた結果

• 第1世代 白紙からの越境 苦戦と突破

• 第2世代 手ごたえと広がり

• 第3世代 それがあたりまえの方向に

• 世代を超えて、現在も挑戦中

Page 41: RDRA DDD Agile

ドメイン駆動設計の効果

役に立つソフトウエアを

確実に

効率的に

ドメイン駆動設計でやらないと…

Page 42: RDRA DDD Agile

ドメイン駆動設計の基本の活動

知識をかみ砕く

言葉を活用する

モデルと実装を一致させる

第1章

第2章

第3章

Page 43: RDRA DDD Agile

プロジェクトを始めてみたものの

開発者が対象業務を知らない

言葉がばらばら、思いもばらばら

ふわっとしてあやしげな要望

どうすればよいか?

Page 44: RDRA DDD Agile

リレーションシップ駆動要件分析

開発者が対象業務を学ぶ

チームの言葉と思いを合わせる

実装可能なモデルを手に入れる

オブジェクト指向とインクリメンタルなアプローチがドメイン駆動設計とフィットする実践的かつ体系的

Page 45: RDRA DDD Agile

越境アジャイル

インクリメンタルな越境

少しずつ

継続的に

Page 46: RDRA DDD Agile

越境アジャイル

その先にあるもの

Page 47: RDRA DDD Agile

ソーシャルチェンジ

• どんな状況でも改善できる• どんなときでも「あなた」から改善を始められる• どんなときでも「今日」から改善を始められる

エクストリームプログラミングの「はじめに」に記されたケント・ベックのメッセージ