DDDってなんだっけ?DDDの外部セミナーに参加してきました

こんにちは。

最近KONO式ドリッパーセットを買って、家ではコーヒーの抽出、仕事場ではF.O.Xのデータ抽出を行っている抽出三昧な石橋(@b0941015)です。

みなさんはDDDという言葉をご存知でしょうか??

DDDとは何かとネットで調べても小難しい言葉が並んでいて、自分はなかなか理解することができませんでした。 そんな昔の自分の為に、わかり易い言葉でDDDとは何か、DDDのメリットについて説明しようと思います。

DDDとは何か

DDDとはDomain Driven Design(ドメイン駆動設計)の略称で、Spring Frameworkの誕生と同時期の2003年にEric・Evansが提唱したソフトウェア開発の設計手法の1つです。

どのような設計手法か端的にいうと、作成したいシステムに対して開発者とその業務に詳しい人が一緒にビジネスロジックのみに焦点を当て、誰が何をするかというドメインモデルを作成する設計手法です。

DDDの考え方とメリット

具体例として特定のメッセージを保存するWebアプリケーションをつくる場合を考えてみます。 このシステムをエンジニア的な考えで設計を行うと

「HTTPリクエストが飛んで来たら正規表現でバリデーションを行って、妥当であればDBに保存する」

という設計をするのですが、DDD的に考えると

「申請内容をシステムが妥当なメッセージであるか判定を行い、妥当であれば保存する」

というように要件を定義します。上記の設計をコードで書くと下記のようになります

エンジニア的設計のコードではRegExpやhttpのように技術的な用語が含まれているので、非エンジニアからみると何をやっているのか理解することが難しいことに対して、DDDで設計されたコードをみると非エンジニアでも何をやっているか理解することができます。

つまり正規表現のような専門的な用語を用いずユビキタス言語と呼ばれる共通認識のとれた言葉を用いることで、エンジニアと非エンジニアの用語的なコミュニケーションロスが無く議論することが可能になります。

またDDDでは業務ロジックに焦点を当てて設計をするので、システムが果たすべき役割であるアプリケーションの本質を見失うことはありません。

上記のドメインモデルと呼ばれる業務ロジックをドメイン層に閉じ込めることで、ロジックのテストがしやすくなったり、外部DBやHttpなどの外部インターフェースを容易に付け替える事が可能になります。

結果的に、大規模なプログラムになっても機能の改修などの仕様変更に対して比較的容易にかつ、安全に対応することができます

もっと具体的にDDDを実装する方法について知りたい方は、レイヤードアーキテクチャやクリーンアーキテクチャなどDDDの考え方を取り入れた開発手法がたくさん考えられているのでぜひ調べてみてください。

皆でセミナーに参加してきました

弊社CyberZでもDDDを積極的に採用し、プロダクトの品質の向上に努めています。

DDDを採用するにあたってチームメンバー全員がDDDとは何かを理解する必要があります。 DDDの概念自体は難しくないのですが、用語であったり実践する技術まで落とし込むのはなかなか難しいという現状がありました。

そこで、F.O.XのPMを含む開発メンバーで外部のDDDセミナーに参加してきました。

Codezine Academy

f:id:cyberz-dev-writer:20170629183310p:plain

セミナーを通して独学ではつかみにくいDDDの概要と本質を学び、実際の開発へと落とし込むきっかけを掴むことができました。

答えのない難しい設計にこれからも立ち向かって行きます!!!