MVCのDomain Modelってなんやねんなお話

はじめに

今回は以下のサイトを読んでいる時に感じたことや思ったことを綴っていこうと思います。

api.rubyonrails.org

The Model layer represents the domain model (such as Account, Product, Person, Post, etc.) and encapsulates the business logic specific to your application.

上記のサイトの引用を見る限りでは抽象度的な名前(具体的な例)のようにdomain modelに対しての説明がなされています。 domain model(アカウント、商品、人、投稿など)がdomain modelの具体的な例として挙げられています。ほうほう、これらがdomain modelなのか、私は今現在domain modelがわからないので具体的なものを知ることでdomain model抽象的なものの概念を掴もうとしています。この具体的なものから法則を見つけることを抽象化または帰納法といいます。

そんな抽象化とかいうめんどくさいことしなくても良くない?と思ったそこのあなた、法則(抽象的なこと)を知っておくと良いことがあります。それは似たような事柄に出くわした時に法則(抽象的なこと)を当てはめることでまだ実際に見たことがない、出会ったことがない、経験したことがない事柄について推測を行うことができます。抽象と具体や帰納や演繹については以下の記事がすごくわかりやすいと思うのでぜひ目を通してみてください。

diamond.jp

example: 抽象的なことを知っていると役立つことの例

when: 迷路に迷い込んだ時(前提:入口と出口は繋がっている、迷路の出口と入り口は平面で見た時に外側にある、迷路の壁は全て繋がっている)

case1: 法則(抽象的なこと)を知らない人の場合

実際に無作為にいろんな道を進んでみることで迷路を抜け出そうとする。

case2: 法則(抽象的なこと)を知っている人の場合

壁沿いに進むことでに出口にたどり着きます

こんな感じで知っているか知らないかだけで有利に進むことができます。もちろん出口がないとか出口が迷路の内側にあって迷路の壁が繋がっていない部分があった場合は例え法則を知っていても脱出することはできません(この場合は伊之助みたいな猪突猛進な人が割と早く脱出するかも)が、前提条件が間違っていなければほぼ確実にゴールに辿り着けます。

とまあこんな感じで寄り道をしたのですが結局何がいいたいのかというと、抽象的なこと(domain model)を知っておくと良いことがあるぞ!ってことを言いたいわけです。

現状のDomain Modelに対しての解釈

まずは言葉を見ていきましょう、

Domain(領域)

Domain

つまりDomainとはこういうことです。

Domain展開

ああ、そういうことねって理解できちゃった人は後は読み飛ばしてもらっても構いません。

何を言っとるんじゃい!?って人はもう少しお時間頂きたいと思います。

ではここで五条さんが展開したDomainを外から見てみましょう

Domainを外から見た図

そうですこれがDomain(領域)の姿です。つまり私たちが住んでいるこの世界のある領域を切り取った(五条さんは丸く切り取っています)ものがDomain(領域)です。

世界におけるある領域のことをDomainと言います。

だけど世界におけるある領域をそのままプログラミングの世界に持っていくことはほぼ不可能です。なぜなら情報量が多すぎるからです。原子とか素粒子とか色々、、

詳しくわよくわからないですが、

プログラミングの世界(なんでも0と1で表す世界)ではDomain(領域,概念や現実世界の対象物, りんご🍎、人👦 etc)をmodeling(簡素化) することで現実世界の対象を表現しています。

domain modelは 現実世界の対象物を簡素化してプログラミングの世界で表現したものをdomain modelというのかなと思っています。

ちょっと時間がなくて最後に急速に雑な解説になってしまいましたが、今のdomain modelに対しての解釈をネット上に共有できたのでよしとしよう。。

また暇があったら最後の方ももっとわかりやすく綴ってみたいと思います。ではまた👋