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

基幹システムの変更を楽で安全にする

 基幹システムの変更を楽で安全にする

大規模な基幹システムの再構築にドメイン駆動設計を適用する取り組みの簡単な紹介です。

増田 亨
PRO

January 17, 2022
Tweet

More Decks by 増田 亨

Other Decks in Programming

Transcript

  1. 基幹システムの
    変更を楽で安全にする
    2022年1月17日
    有限会社システム設計 増田

    View Slide

  2. 基幹システムを作り変える
    大手損害保険会社の基幹システム
    • 開発費用の総額1200億円?
    年商2000億円規模の通販会社の基幹システム
    • 開発費用 数十億円 × 数回
    • 年間IT費用 数十億円/年

    View Slide

  3. 共通のテーマ
    • ビジネスの要求に応えるシステム変更スピード向上
    • ソフトウェア開発コスト(初期・拡張)の削減
    • 修正コストの削減

    View Slide

  4. NRIでの実証実験
    現行システム実績 今回の試作
    初期開発
    開発規模 183 千行 97 千行
    設計書ボリューム 153本
    1枚
    (規定集・マニュアルを使用)
    変更要求
    への対応
    モジュール数 追加3 修正65 追加1 修正2
    変更規模 5 千行 9 百行
    設計書ボリューム 26 枚
    0 枚
    (業務マニュアル改訂版を使用)
    「NRI ドメイン駆動設計」で検索すると
    実験の報告書をダウンロードできます。

    View Slide

  5. 実際にどう進めているか

    View Slide

  6. 現場でやっていること
    why の合意形成
    「良い設計は悪い設計より変更が楽で安全」
    ・悪い設計で失っているものの言語化・数値化
    ・良い設計で得られるものの言語化・数値化
    how の認識合わせ
    ・ビジネスルール(計算判断ロジック)中心の構造
    ・事実の記録中心のテーブル設計
    ・一覧網羅ではなく濃淡づけとカテゴライズ
    what の体験学習
    ・ドメインオブジェトを実際に書いて動かす
    ・イミュータブルなテーブル設計で実際に動かす
    ・一覧の分類、要点の絞り込み、ノイズの除去

    View Slide

  7. 変更を楽に安全にするための設計方針
    ドメインモデルパターン
    組み立て思考で開発
    イミュータブル
    データモデル
    トランザクション
    スクリプトパターン
    ミュータブル
    データモデル
    分解思考で開発

    View Slide

  8. ドメインモデルパターンへの切り替え
    トランザクションスクリプトパターン ドメインモデルパターン
    入出力中心(画面+データベース操作) ビジネスルール(計算判断ロジック)中心
    手続き的なプログラミング
    (データクラスと機能クラス)
    オブジェクト指向プログラミング
    (ロジックとデータのカプセル化)
    外部設計書 ⇒ 内部設計書 規程集・業務マニュアル⇒クラス設計
    入出力項目定義⇒入出力処理の記述 計算判断ロジックの記述⇒必要な入出力

    View Slide

  9. イミュータブルデータモデルへの切り替え
    ミュータブルデータモデル イミュータブルデータモデル
    状態の変更と参照が中心 事実の記録が中心
    SELECT FOR UPDATE
    INSERT
    DELETE
    大きなテーブル 小さなテーブル
    制約はずし/制約のがれ
    制約の徹底
    (主キー・外部キー・一意・NOT NULL)

    View Slide

  10. 開発のやり方の切り替え
    分解思考で開発 組み立て思考で開発
    最終形を確定 最終形を仮置き
    機能一覧・画面一覧・テーブル一覧 主要な要素・全体の枠組み・構造の軸
    分業・分担 協業・補完
    標準化・均一化 重みづけ・濃淡・取捨選択

    View Slide

  11. 手を動かして習得・納得・手ごたえ

    View Slide

  12. 実際に手を動かして習得する/実証する
    クラス定義
    using Java
    github
    issue/project
    テーブル定義
    using DDL
    詳細設計書
    概念ER図
    テーブル定義書
    WBS・ガントチャート
    機能一覧

    View Slide