DDD(ドメイン駆動設計)入門してみた

このエントリーをはてなブックマークに追加

現場に配属されて数ヶ月が経ち、業務にも徐々に慣れてきました。 エンジニアとしての知識もわりとついてきたんじゃないかと思いますが、圧倒的に自分に足りないなと思うのは設計力です。

そこで、上司からの薦めもあり、DDD(ドメイン駆動設計)入門してみました。 DDDについて調べた過程、それに対して私が感じたことをまとめてみようと思います。

DDD(ドメイン駆動設計)とは

そもそも、DDDとは何なのか?

ドメイン駆動設計(英: Domain-driven design, DDD)とはソフトウェアの設計手法であり、’複雑なドメインの設計はモデルベースで行うべきであり’、’また大半のソフトウェアプロジェクトではシステムを実装するための特定の技術ではなくドメインそのものとドメインのロジックに焦点を置くべき’とする。この名称は Eric Evans が同名の著作で用いた。
書籍 Domain-Driven Designでは、たとえば ubiquitous language といった高位の概念と実践について多数述べられている。これは、ドメインモデルがシステムの要求を記述するためにドメインの専門家が提供し、業務上のユーザーやスポンサー、開発者みなにとってうまく働くような common language(共通言語)を形成するべきである、という考えである。同書は多層アーキテクチャを持つオブジェクト指向システムにおいて、一般的なレイヤ構造におけるドメイン層を記述することに重点を置いている。
(Wikipediaより引用)

つまり、「ドメイン」を中心として設計を行うってことでいいのかな?

これだけだとよく分からない…

そこで、上司にオススメ頂いたサイトがあるので列挙しておく。

1つ目の「エッセンス」は、まさにDDDのエッセンスを簡潔にまとめてあるサイト。このサイトを見れば大まかに「DDDとは何ぞや」が分かります。

2つ目の「Quickly」は、DDDの原著の要約を日本語訳したものを無料ダウンロードできるサイト。無料にも関わらず中身は充実の100ページ弱!ありがたいです。

3つ目の動画は、有限会社システム設計の代表取締役・増田亨さん(@masuda220)のDDDの講演動画です。具体例を絡めて非常に分かり易く解説なされています。読書が嫌いな私にとって動画は非常にありがたいw

軽く参考ページを挙げてみましたが、正直全てを隅々まで見ることができていません… もう少し時間をかけてゆっくり理解していこうと思います。

ということで、DDDについての解説は私は現状できませんw もう少し学んでからリベンジしたいと思います。

気づいたこと

DDDについて学び始めて気づいたことは、設計の初歩から始めないと駄目だなということです。

例えば、DDDの考え方の基礎となるオブジェクト指向。エンジニアなら誰でも知っていると思います。さすがにポンコツの私ですら知っていますw
カプセル化、インヘリタンス(継承)、ポリモーフィズム…説明もできます。

しかし、いざ「オブジェクト指向を基に設計してみよう!」と思っても自信を持って設計できる気がしません…

なのでまずはオブジェクト指向設計から始めてみようと思います。

何か最近、自分に不足していると感じること、学びたいことが沢山ありすぎてつらいですが、広く手を出して浅くなってしまうのは無個性すぎるので、スコープを狭めて深く学び、個性を出していきたい。と言っても基礎が薄いので固めなければならない、という状況で歯がゆい。しばらくは足掻きたいと思います。

Comments