はじめに
いわゆるドメインモデルについて。ドメインモデルとは何かとか?ウダウダ考えるより運用されまくっている実物を研究した方が良いと言う事でまとめました。ほとんど(というか全部)iOSになります。iOSはソースコードが公開されていないのが残念!!!
分類方法
以下の基準に基づいて分類しています。どれか一つに割り切れると言う事はなく、大抵はどのタイプがどれくらいの割合で混じっているかと言うことになるかと思います(RDDで言うステレオロールタイプのどのクラスが多く占めているか?)。
- データモデリング系:データベース/JSON由来のデータモデリングモデル。ほとんどCRUD系のインタフェースしか存在しない。
- オブジェクトモデリング系:作業成果物であるファイルフォーマット由来(の場合が多い)のドメインモデル。複雑な構造変化を伴ったりする。
- 制御モデリング系:ハードウェア/プロトコル由来(の場合が多い)のドメインモデル 複雑な状態遷移を伴ったりする。
- データフロー系:バッチ処理、データ変換を行うためのドメインモデル。処理フローを動的に構成する。
AV Foundation
(オブジェクトモデリング系)動画編集業務を表現した?ドメインモデル。動画ファイルをデシリアライズして抽象化するとこうなる?
Media Player
(データモデリング系)Apple Music/iTunesの楽曲管理を表現したドメインモデル。所謂商品分類的なモデルではなく、個人の音楽コレクションを表現したドメインモデルになる?。
Healthkit
(データモデリング系)健康管理/測定フレームワーク。タイプオブジェクトパターンを使ってクラスを知識レベルと操作レベルに分けている。マーチンファウラーのアナリシスパターンの観測と測定に出てくるクラス構成とそっくり。
Core Bluetooth
(制御モデリング系)iPhoneをBLE機器化するためのフレームワーク、同じ役割でも自分側と対向デバイス側でクラスが分かれている(CBCentralとCBCentralManager等)。
Contacts
(データモデリング系)電話帳フレームワーク、SNSのアドレスとの統合機能を用意している。
AssetsLibrary
(データモデリング系)廃止になった写真管理ライブラリ、レポジトリ〜フォーストクラスコレクションの良いサンプル。
EventKit
(データモデリング系)予定表/カレンダー管理フレームワーク
PDFKit
(オブジェクトモデリング系)PDFファイルをデシリアライズ?して検索や編集できるようにしたもの。
まとめ
- データベース由来のクラスは単なるデータアクセスIFしか提供してないし、ファイルフォーマット由来のモデルはクラスに制約/操作がそれなりに付与されているし、デバイス/プロトコル由来のクラスはがっつり状態遷移するという、90年代前半から暗に言われている?ような当たり前の結果になった。
- 作業の成果物生成を目的としたオブジェクトモデリング系は作業工程が目に浮かぶようなクラス構成(PDFKit(ドキュメント編集)、AV Foundation(動画編集))。メンタルモデルとしてのドメインモデルを最も表現している。
- ゲームのモデルは分散型制御の良いサンプルで面白そうだが今回はノーマーク。
- データフロー系も次の機会に。
最後に
OSSアプリを色々調べるとドメインモデルは色々出てくる?
参考文献
業務別データベース設計のためのデータモデリング入門
エンタープライズ アプリケーションアーキテクチャパターン
ストリームラインオブジェクトモデリング
アナリシスパターン―再利用可能なオブジェクトモデル
オブジェクトデザイン
[UMLモデリングレッスン]
(https://www.amazon.co.jp/dp/4822283496)
実践UML
現場で役立つシステム設計の原則