ドメイン駆動設計を考え直す
「UMLモデリングレッスン 21の基本パターンでわかる要求モデルの作り方」を読んでいたら、とても面白かった。
OOAはDOAよりもモデリングが優れている本が多い気がする。
ラフなメモ書き。
【元ネタ1】
UMLモデリングレッスン - 安藤友晴@北海道のてっぺん
「UMLモデリングレッスン 21の基本パターンでわかる要求モデルの作り方」では問題回答形式で、概念モデルについて説明しているのでとても読みやすい。
21のパターンも提示しているが、そのうち興味を引いたのは「リビジョン」パターン。
「リビジョン」パターンは、変更履歴を表現する概念モデルのパターンなのだが、部品表の仕様変更や自動車損害保険の契約変更にも適用できた、という話が興味深かった。
全く違う分野でも、概念モデルによる似たような解決方法があり、それがパターンになる。
OOAではオブジェクト指向らしくパターンも重視する。
そのおかげで、OOAは概念の共有がやりやすいように思う。
逆に、DOAはパターンという概念があまり普及していないように思える。
【元ネタ2】
ドメイン駆動設計は設計のアジャイル化~オブジェクト指向設計の先祖返り: プログラマの思索
ドメイン駆動設計の感想~OOAは過ぎ去りDOAはもう一度舞台に上がるのか: プログラマの思索
Agile開発に足りないもの~モデリング技術: プログラマの思索
「ドメイン駆動設計」の第8章に出てくる「ブレイクスルー」について、クレジット与信限度額計算に関するドメイン駆動設計のお話。
ドメイン駆動設計は設計のアジャイル化~オブジェクト指向設計の先祖返り: プログラマの思索にも書いたけれども、ブレイクスルーとは、概念モデルが開発者観点の設計モデルからユーザ観点の分析モデルへ質的に転換するタイミングを指す。
仕様変更のたびに概念モデルを拡張してリファクタリングしていくうちに、概念モデルから本質的な特徴を見出す時があり、そのタイミングをブレイクスルーと言う。
OOAでは、概念モデルのリファクタリングが面白さの醍醐味。
リファクタリングという技術もオブジェクト指向プログラミングから発生した経緯もあり、概念モデルを洗練させていく所は色んなやり方がある。
OOAでは、静的なクラス図だけでなく、動的なシーケンス図や状態遷移図も使って、モデルを検証していく。
オブジェクトの責務が均等に配置されるように、メッセージパッシングになるようにオブジェクトを分割していく。
OOAで面白いのは、概念モデルが質的変換を遂げたブレイクスルーを経ると、会計簿記の概念が自然に現れてくる点。
「ドメイン駆動設計」では、船舶の輸送システムは単なる貨物の輸送が主体ではなく、実は船荷証券という貨物の権利が現れた。
船荷証券は、商業簿記2級で未着品という商品取引の仕訳として出てくる。
つまり、海外から船舶輸送で発送された商品が1ヶ月くらい長期に渡って届けられる場合、貨物の引渡しや受け取りの権利や義務を船荷証券という形でやり取りするわけだ。
また「ドメイン駆動設計」では、商業融資の利息計算サービスで出てくる支払利息・支払手数料・受取利息などの概念は、発生主義会計、つまり経過勘定科目として表現できる。
経過勘定科目も商業簿記では、未払利息・支払利息・支払手数料・受取利息などの科目として出てくる。
支払利息・受取利息は発生日から発生するので、利息を支払う義務や利息を受け取る権利が発生日に発生する。
しかし、実際にお金を支払ったり受け取ったりするのは、期末や支払期限・受取期限に精算する時になるため、精算時に仕訳を別途起こす必要がある。
「UMLモデリングの本質」でも、鉄道の自動改札システムを概念モデルとして揺さぶり(リファクタリング)していくと、切符が乗車権という権利の証明になるという話がある。
つまり、鉄道ビジネスとは物を運ぶだけでなく、乗車権や着席権などの権利という商品を販売するビジネスが本質である、と。
似たような例として、航空会社の「便」、ホテルの「部屋」もあるだろう。
また、「UMLモデリングの本質」では、航空券の予約システムを概念モデルで描いてみると、フライトの座席は実は製造業や小売業の在庫の概念と論理的に同等であるという記述もある。
つまり、座席の予約状況から余っている座席を日々確定しては売るという、在庫の引き当てとか在庫の残高管理に似たような機能が重要であることを示唆している。
もちろん、新幹線の乗車券、ホテルの部屋の予約管理も同様に、在庫管理と似た仕組みになる。
【3】原田さんのDDDのプレゼン資料には、ドメイン駆動設計のパターン言語のリンクがあるので読んでみたい。
| 固定リンク
「モデリング」カテゴリの記事
- 「システム開発・刷新のためのデータモデル大全」を読み直した感想~親子頻出アンチパターンは初心者モデラーに多い(2024.08.31)
- 「システムアーキテクチャ構築の原理」の感想part2~非機能要件がシステムのアーキテクチャに影響を与える観点をプロセス化する(2024.05.06)
- 「システムアーキテクチャ構築の原理」の感想(2024.05.06)
- ソフトウェア工学の根本問題から最近のソフトウェア設計を考えてみる(2024.03.03)
- アーキテクチャ量子の考え方はソフトウェア工学に物理学アプローチを適用したアイデアではないか(2024.02.12)
「ビジネス・歴史・経営・法律」カテゴリの記事
- ビジネス書の名著はどれ?(2023.09.18)
- 営業は顧客の”購買代理人”である(2023.08.16)
- 第85回IT勉強宴会の感想~概念データモデルからビジネスモデルを構築すべきという考え方(2023.05.13)
- 令和4年度春期試験のITストラテジスト試験第4問をastahでモデル化してみた(2023.04.15)
- ChatGPTで起きている事象の意味は何なのか(2023.04.02)
「Agile」カテゴリの記事
- 「システムアーキテクチャ構築の原理」の感想part2~非機能要件がシステムのアーキテクチャに影響を与える観点をプロセス化する(2024.05.06)
- 「スクラムの拡張による組織づくり」のScrum@Scaleの感想(2024.03.31)
- ソフトウェア工学の根本問題から最近のソフトウェア設計を考えてみる(2024.03.03)
- 「GitLabに学ぶ 世界最先端のリモート組織のつくりかた」の感想(2023.12.10)
- 概念モデリングや設計原則は進化しているのか(2023.10.21)
コメント