調べ物した結果

現役SEが仕事と直接関係ないことを調べた結果とか感想とか

エリック・エヴァンスのドメイン駆動設計を読む①~2部5章 エンティティと値オブジェクト~

目次

概要

掲題。エリック・エヴァンスのドメイン駆動設計
https://www.amazon.co.jp/dp/B00GRKD6XU
の自分なりの解釈。
新年一発目のエントリーとは思えないけど。

エンティティと値オブジェクトの違い


同一性の区別が必要なものを「エンティティ」。
区別の必要がないものを「値(バリュー)オブジェクト」。
とする。
ここでの「必要」はアプリケーションによって異なっている可能性もある。

ここのURLがわかりやすい例なのではないかと思う。
little-hands.hatenablog.com

「人」が一般的な例で、上のURLでも紹介されていて納得はできた。
電子カルテで考えたときに「患者」としての取り扱いを考えたときに本当にいいの?
と思ったのでもうっちょっと考察してみる。

「患者」オブジェクト。エンティティでええのか?


結果的には「よい」という結論になった。というかそうね。という感じ。
引っかかりを覚えたのは「人」の体重が変わった時に「同一の人」としてみなしてよい。という部分である。
日常であれば、多少の体重の増減でその人がその人ではなくなる。ということはありえないのでよいが、
医者が診察を行う際に「体重」というものも重要な要素になっていて「体重」が変わったら別人として取り扱わないと
ダメなんじゃないの?というのが疑問の部分。
もう少し考えていくとそもそも「患者」を「診察」するのが間違っていたんだ。という風に考えた。

「診察」をする際に「患者」は重要ではないよね?


ものすごく怒られそうだ。
けれどもけれども、そもそも医療は「誰か」ということによらず客観的で、
同じ状況であれば同じ治療が行わなれなければならない。(はず。)

AM11:00 患者Aさんが頭痛を訴えていて、
体温測定で「40度」を超えていた。昨日までは元気だったのに今朝起きてから急に症状が悪化したとのこと。
インフルエンザの疑いがあるため、検査を指示。検査結果「陽性」であるため判断は正しい。
そのため「イナビル」を処方(オーダー)。
※説明のため&知識が全然足りないので簡略化しているけど、本当はもっと考慮すべき点が多々ある。

というようなことはたとえ患者が「Bさん」でも同じ結果にならなければならない。
当然BさんとAさんでは別の人なので全く同じ診察にならないかもしれない。
だけどそれは「Bさん」だからとか「Aさん」だからというエンティティ特有の同一性による判別ではなくて、
「体重」「性別」「年齢」「既往歴」等の属性が異なることによる診察の差異であるべきということ。
つまり「属性」による区別が必要になってくる。
この状態は

アプリケーション の ユーザ は、 私 が 5 歳 の 時 と 同一 人物 か どう かを 気 に する だろ う か?
Eric Evans. エリック・エヴァンスのドメイン駆動設計 (Kindle の位置No.2307-2308). 翔泳社. Kindle 版.

に対する解にもなると思う。つまり「気にする」だ。ここだけで行くと「人(患者)」を
そのまま扱うと「人(患者)」はエンティティであってはならない。そう考えた。診察においては「5歳の時」のエバンス氏と現在のエバンス氏は
別人として取り扱わなければいけないのだ。

こんな感じか?
gyazo.com
多重度もひどいし、これはたぶん間違っている。

そうか「カルテ」があるじゃないか。


なんかおかしいなーとTwitterに吐き出しながら考えていると足りないファクターがあることに気が付いた
そう、カルテがあるじゃないか。
「診察」というのは「カルテ」を通して行う。「診察」は「患者」を診ているんじゃなくて、
「患者」から抽出された「情報」を見ている。それを「カルテ」を通して診察、指示を行っているんだ。

こんな感じ。すっきりしたと思う。
gyazo.com
※カルテ側の多重度は「many」か「1」か「2」か迷うところ。これ理解が足りてない。全部を1枚のカルテとして
見たほうがいいような。けど外来と入院では分けているような。とりあえず今回は思考から外した。
会計や入院のベッドなども考えるとだいぶごちゃごちゃしてくるけど、カルテを介して扱ったほうが自然に見える。
gyazo.com
※ベッドも直接患者に紐づくのではなくてオーダとカルテを通して紐づくべきだと思うのでそうしている。そして会計のつながりは怪しい。オブジェクトが増えると考慮することがドカンと増える。

なんにしても、特に電子カルテに詳しくない人でも「カルテ」が「オーダ」の集合で「カルテ」が物事の中心であることがわかると思うしそれは現実とそう乖離していないと思う。
※「カルテ」が「オーダ」の集合というのは語弊がある。そういった側面もあるとは思うけど。全容ではない。

そして再び。


解釈がずれている気がしないでもないが。「人(患者)」はエンティティでとりあえず納得できた。
ちなみに「カルテ」はどうなの?エンティティだよね。「カルテ」の内容が変わっても「このカルテはこのカルテである。」
という同一性を認めていると考えられるし、区別すべきだと思う。
(これもすごく微妙。診療”録”で”歴”も必要なのでもうちょっと違うモデルが必要になると思うが。
歴に関しての取り扱いはもう少し読み進めればでてくるかな?)
そもそもカルテって「患者」に持たせるの?
「主病」に対して持たせるべきなの?多重度の解決もできてない。
これはドメインエキスパートに聞かないと僕だと判断しかねる。
僕のプロジェクトにはいないけどね。僕は主病名や初診(うーん。これは違うかな)につらなるはありだと思うんだけどなぁ。