BLOG

2021-04-28 テクニカル

ドメイン駆動設計について。

どうも、畜産ペンギンです。

 

ヤクルト調子いいですね、ただここ数年この辺から急降下してるので怖いです。

 

今回はドメイン駆動設計という物について語っていこうと思います。

何か色んな所で見聞きするんですけど軽く調べてもよくわからなかったのでじっくり調べてみました。

 

目次は以下の通り。

 

目次

・ドメイン駆動設計とは

・まとめ

 

↑この目次いる?

 

ドメイン駆動設計とは

ドメイン駆動設計(domain-driven design, DDD)とはソフトウェアの設計手法であり、「複雑なドメインの設計は、モデルベースで行うべき」であり、また「大半のソフトウェアプロジェクトでは、システムを実装するための特定の技術ではなく、ドメインそのものとドメインのロジックに焦点を置くべき」であるとする。(Wikipediaより)

 

だ、そうです。

 

なるほど、わからん。

 

まず、ドメインとは何なのか。

 

ドメインとは本来の意味では「領域」とかそんな感じだそうで。

ここでいうドメインは「問題領域」あるいは「ソフトウエア化して解決する問題領域」という風に解釈してます。

 

例えば、勤怠管理を自動化したいとすると「勤怠管理」という領域に問題があり、そこをソフトウエア化したいという風に解釈が出来ます。

 

次に、モデルベースで行うとはどういう事か。

 

モデルは「型」とか、ベースは「基本」とか。

ふむ、、フレームワークとかそういう型にはめて行うとかそんな感じ?

いまいちピンと来ない。。。

 

ドメイン駆動設計の提唱者?であるEricEvansさんのいうモデルの定義は

「問題解決のために、物事の特定の側面を抽象化したもの」

だ、そうです。全然違いましたね。

 

でもまだ良くわからない。

「物事の特定の側面を抽象化したもの」とは何だろう。

 

色々調べた結果、一つのアプローチとして「必要な情報を抽出した物」という考え方が出来そうだと思いました。

データベースに持つべきカラムの選定が近い考え方かな。

 

例えば「勤怠管理」という一言でもこの中には様々な情報が含まれます。

勤務した人の情報、勤務時間、勤務場所、勤務内容、etc・・・

 

情報量は膨大なので、必要な情報を抜き出す必要があります。

その為にはまず解決したい問題を抽出する必要があります。

 

例えば、誰が何時から何時まで働いたかわからないという問題があったとしましょう。

その場合、必要な情報は「誰が」「何年何月何日に」「何時から働いた」「何時まで働いた」といった具合に必要な情報が絞り込めます。

この絞り込んだテーブル情報のような物が「物事の特定の側面を抽象化したもの」、引いては「モデル」と解釈しています。

 

つまり良いモデル設計とは良いテーブル設計と言う事ですね。

他のアプローチもあるんでしょうが。

 

ここまで来ると、ある程度パズルのピースがハマって来た感がありますね。

最初のWiki引用を翻訳すると、以下のような感じになるでしょうか。

 

ドメイン駆動設計とはソフトウェアの設計手法であり、「複雑な問題領域を解決する際の設計は、問題解決に必要な情報を基に行うべき」であり、また「大半のソフトウェアプロジェクトでは、システムを実装するための特定の技術ではなく、問題領域そのものと問題領域のロジックに焦点を置くべき」であるとする。

 

身も蓋も無い言い方をすると、「高い技術力より問題が何なのか理解する方が重要だよね」という事でしょうか。

 

まぁでも往々にしてありがちっちゃありがちですよね。

ダイソンの1000倍の吸引力の掃除機を作ろう!とか言われてもいやクイックルワイパーで十分なんだけど、、、みたいな。

いやクイックルワイパー発明した人本当に偉大だと思う。

 

まとめ

まぁ振り返ると何てことない、要は問題解決に注視したアプローチをしましょう。

といった感じなんですかね。

これで解釈間違いまくってたら恥ずかしいですけど。

 

次は実践編というか、具体的にどういった進め方をしていくのか書いて行きたいと思います。

※割と気になってるからここで投げ出さずちゃんと書くよ!

 

今回はここまでです。

 

さようなら。

The following two tabs change content below.

畜産ペンギン

主にネットワーク系、開発系を経験しているエンジニアです。 技術系を気まぐれに書いて来たけどそれ以外も気まぐれに書いていこうかなぁと。