マイクロサービスとドメイン駆動設計の設計思想のメモ
@yusuke_arclamp さん、@sugimoto_keiさんが、マイクロサービスとドメイン駆動設計の設計思想に語っているつぶやきが参考になったのでメモ。
以下は、疲れた頭で思いついたことを書き殴り。
間違っていたら後で直す。
【元ネタ】
マイクロサービスとドメイン駆動設計の設計思想のTwiiter拾い - Togetterまとめ
Martin Fowler氏がマイクロサービスの特徴について語る
SOAとマイクロサービスを複合設計に当てはめると見えるもの: ソフトウェアさかば
マイクロサービスはコア資産 - Martin FowlerのMonolithFirstを読んで -: ソフトウェアさかば
【1】マイクロサービスとは結局、何なのか?
それは、@sugimoto_keiさんの下記のつぶやき「マイクロサービスの粒度は境界づけられたコンテキストと同程度」で、全ては言い尽くされていると思う。
また、Webサービスの設計思想は、CORBA→SOA(例:SOAP)→マイクロサービス(例:REST)に至る歴史と同じ。
この辺りは、@yusuke_arclamp さんの記事「マイクロサービスアーキテクチャとは何か - arclamp」が詳しい。
今は、目的さえ合致すれば、オープンデータやマッシュアップのように、公開されたWebサービスのAPIを使ってすぐに手軽なWebシステムを作るのは簡単になっている。
その時の設計思想として、マイクロサービスという概念を用いることは有益だろう。
そして、マイクロサービスが過去のSOAと違って細かく使い勝手のいいAPIにしたい場合、ドメイン駆動設計の「境界づけられたコンテキスト」が使えるレベルにすればいいのだろう。
そうすれば、ドメインの枠内で一つのコンポーネントのように扱えるだろう。
【2】オブジェクト指向設計とデータモデリングの違いは何なのか?
一つの観点として、@yusuke_arclampさんのつぶやきが一つの解答になるのではないか。
たとえば、商品と倉庫というエンティティがあった場合、在庫はどんな概念として提示すべきか?という問題があったとする。
良くあるダメな例は、在庫エンティティを商品と在庫の連関エンティティで作ってしまう例だろう。
オブジェクト指向設計では、単純に、商品エンティティと倉庫エンティティの間に在庫エンティティを普通に作ってしまいがち。
在庫は、エンティティとして抽出すべきものではないと思う。
在庫は、商品の状態。
在庫から、どの時点の商品や倉庫に関連付けられるか、トレースできなければならない。
在庫は、倉庫の入出庫トランザクションから導出されるサマリテーブルとして作るべき。
つまり、在庫は、入出庫トランザクションから定期的にバッチで集計されるサマリテーブルであるべき。
オブジェクト指向設計は、「~マスタ」のようなリソース型エンティティを分析するのは強いと思う。
しかし、オブジェクト指向設計はトランザクションテーブルの分析は弱い気がする。
むしろ、データモデリングの方が、タイムスタンプを主キーに持たせることによって、トランザクションテーブルに時系列を強力に設置する仕掛けがあるような気がする。
| 固定リンク
「モデリング」カテゴリの記事
- 「システム開発・刷新のためのデータモデル大全」を読み直した感想~親子頻出アンチパターンは初心者モデラーに多い(2024.08.31)
- 「システムアーキテクチャ構築の原理」の感想part2~非機能要件がシステムのアーキテクチャに影響を与える観点をプロセス化する(2024.05.06)
- 「システムアーキテクチャ構築の原理」の感想(2024.05.06)
- ソフトウェア工学の根本問題から最近のソフトウェア設計を考えてみる(2024.03.03)
- アーキテクチャ量子の考え方はソフトウェア工学に物理学アプローチを適用したアイデアではないか(2024.02.12)
コメント