あたりを主戦場としておりますこの広告は、90日以上更新していないブログに表示しています。第2のドワンゴアドベントカレンダー、20日目の記事です。qiita.comドメイン駆動設計に関して悩める若者に送るポエムを書いていたら長くなりました。はじめればいいんですか?」と聞かれることがあります。この時にまず話に上がるのが、エンティティ、集約、レイヤードアーキテクチャといった設計パターンの内容が多いです。して認識している事が多くある様に思います。現実のプロダクトにより取り入れやすくなります。適用レベルという考え方について紹介します。実践思想であり、エリック本人の意図とずれている可能性もあります。ついて簡単に説明します。ひとことで言うと「ドメイン(問題解決領域)を中心に据えたソフトウェアの設計哲学、手法」です。なく、ドメインである、ということです。ドメインとはなんでしょうか。ドメインは、業務領域と表現されているものも多いですが、最近らしい言い方をすれば、「提供するプロダクトが扱う問題解決領域」のことを指します。すると、「提供するプロダクトが扱う問題解決領域を中心に据えたソフトウェアの設計哲学、手法」となるのですが、もう少し具体的に説明するとどの様な定義になるのか。以下4つの原則からなると説明しています。設計手法ではないという事です。根幹は、「現実の複雑な問題解決領域をどの様にソフトウェアに落としこむか」というテーマの、組織、開発プロセス、設計論に及ぶソフトウェア開発哲学であり、その探求の過程で生まれたモデリングの戦略、戦術のパターン、思想の集まりです。コンセプトを正しく理解し、実践、議論を深めるには、よくスポットがあたりがちなレイヤードアーキテクチャ、エンティティなどの設計手法、つまり戦術だけではない事、そして、言及の対象もソフトウェアそのものについてだけでなく、組織、開発プロセス論まで含む、ソフトウェア開発哲学であるという事をしっかりと認識する必要があります。ことを設計手法だけではない、ソフトウェア哲学でもあると表現しました。思想は大きく以下の様に分類できます。いう誤解もなくなります。関数指向プログラミングの登場により、エンティティなど一部パターンは変わりうると話しています。モデルで集約が表現できるとかそういった意味だと思います。理解し、自プロダクトにおけるドメインモデルの全体像を描いてから、はじめて「戦術」を検討すればよいのです。海外の動向を見ていると、エリックの哲学や戦略を引き継ぎながら、より発展した戦術の議論に進んでいる様に思います。捉えると、哲学、戦略面では、思想自体の汎用性は高くあらゆるプロダクトに取り入れる事はできます。仮に戦術を完全には採用せず隔離されたドメインモデルが構築されていなかったとしても、プロジェクトメンバー内で共通のメンタルモデルが構築されており、そのドメインにおける問題がソフトウェアによって解決できていればそれだけでも大きな意味があります。実践している」とは言えないでしょう。思想を取り入れる」という考え方でも十分に有用だと考えています。適用レベル」というコンセプトについて紹介します。してのドメイン駆動設計を取り入れるこのレベルでは、幾つかの戦略レベルの思想を取り入れ「ドメインの領域を定め、ユビキタス言語を構築する」までを実施するものです。大きく以下のパターンを利用してアーキテクチャを考慮します。コアドメイン、サブドメイン、汎用ドメイン境界づけられたコンテキストコンテキストマップユビキタス言語これはドメイン駆動設計というよりは、責務の境界線を意識した情報設計(IA)をしましょうというレベルの話です。毛色は全く異なりますが、こちらの様な本も参考になるかもしれません。見るここで重要なのはユビキタス言語は「用語集」ではないという事も言えます。言葉は他の言葉との関係性により、意味が決まります。その為、二次元的な用語集ではなく、それらの関係性が分かるダイアグラムもつくるのが望ましいです。レベル1は、「モデルとコードが一致していること」は重視せず、プロダクトのメンタルモデルの形成と、そのモデルによる一貫性あるユーザー体験の提供を重視し、語彙の統一はしつつも、ソフトウェアは問題解決のソリューションとしてのみ機能させるイメージです。ベースのドメイン駆動設計を取り入れるいわば守破離の守。レベル1に加え、大きく以下のパターンを取り入れます。原典だけでは具体性に欠け、コードに落とし込むにはかなりの試行錯誤が予想されます。実践ドメイン駆動設計など、コードレベルに落としこまれた書籍も参考にすると良いと思います。見るまたこのレベルの注意としては、コードと切り離せなくなる都合上、技術やフレームワークなどとの相性問題、そして実施する場合のコストがどうしても発生します。厳密な適用が必要なのかよく考える事も重要です。発展的なドメイン駆動設計を取り入れる守破離の破、離の段階です。ドメイン駆動設計の哲学、一部のコアとなる戦略、思想を引き継ぎ、関数指向のアプローチ、イベント指向のアプローチなど、新しい戦術を適用するレベルです。他のコンセプトとドメイン駆動を組み合わせる様な実践方法が多く登場しています。関数指向やアクターモデルを利用した実践例としては、以下の書籍が参考になります。戦略、戦術という明確な区分けの中での具体的な手法を知りたければこの書籍が参考になります。コードで利用される語彙も整えられてくるはずです。その上でプロダクトが複雑なドメインを扱う場合や、長期的に保守が予想され技術的な外的変化から中心となるコードを守りたい場合は、レベル2を検討しましょう。採用していない場合や、旧来のアーキテクチャで対応できないスケーラビリティを要求される場合など、より発展した活用が必要であればレベル3に挑戦しましょう。根幹は「現実の複雑な問題解決領域をどの様にソフトウェアに落としこむか、変化させていくか」という哲学であり、このテーマに取りかかったのならあなたも智を求める立派なドメイン駆動の哲学者です。実践だと捉えています。実践していく上での助けになれば幸いです。解のないチラシの裏です。@tlyncはてなブログをはじめよう!tlyncさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。