ドメイン駆動設計を考え直す
「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のプレゼン資料には、ドメイン駆動設計のパターン言語のリンクがあるので読んでみたい。
| 固定リンク
「モデリング」カテゴリの記事
- ストラテジストとプロジェクトマネージャの役割の違いは何なのかpart2~プロセスのレイヤと達成目標のレイヤが異なる(2023.02.18)
- UMTPモデリングフォーラムのパネル討論の感想(2022.11.29)
- Go言語でできることは何なのか(2022.11.06)
- クラウド上の開発がJavaに与えた影響は何なのか(2022.10.16)
- 「ソフトウェアアーキテクチャの基礎」本はアーキテクトが読むべき本だった(2022.09.18)
「ビジネス・歴史・経営・法律」カテゴリの記事
- ストラテジストとプロジェクトマネージャの役割の違いは何なのかpart1~CSFはWBSみたいなものと捉える(2023.02.14)
- 農林水産業はITと相性がいい(2023.01.09)
- 過学習に陥った人間や社会の事例は何があるのか(2023.01.09)
- 経営戦略とIT戦略をつなぐ鍵は何なのか(2023.01.04)
- 現代日本人の弱点はリーダーシップ不足と生産性が著しく低いこと、そしてリスク許容度が著しく低いことだ(2022.12.23)
「Agile」カテゴリの記事
- PM理論では課業志向の方が関係志向よりも生産性が高いことを主張しているのではないか(2023.01.22)
- 現代日本人の弱点はリーダーシップ不足と生産性が著しく低いこと、そしてリスク許容度が著しく低いことだ(2022.12.23)
- DDPは品質管理に役立つのか(2022.12.13)
- UMTPモデリングフォーラムのパネル討論の感想(2022.11.29)
- XPエクストリームプログラミングは偉大だ~時代がその設計思想に追いついた(2022.11.16)
コメント