ドメインとは何ですか?


104

この用語は、ソフトウェアアーキテクチャ(「ドメインモデル」、「ドメインドリブンデザイン」など)のコンテキストでよく見られます。私はそれをグーグルで調べましたが、さまざまな定義がたくさんあります。それで、それは本当に何ですか?


12
あいにく、明確な定義がなく、あいまいな文脈で多く使用されるのは、これらの単語の1つだと思います。それを十分に見てから、あなたは理解を得ます。私のポイントは、ここに表示されるすべての答えを読んだ後でも、その使用法を理解することを期待すべきではないということです。それは時間がかかります。
aaaaaa

15
@aaaaaa正確に...ハンプティダンプティは微笑んだ。...「私が言葉を使うとき」、ハンプティ・ダンプティは、むしろ軽corn的な口調で、「それは私がそれを意味するために選択したものを意味します-多かれ少なかれ」と言いました。
エモリー

3
明確な定義がないのは本当だとは思いません。通常のウェブスターの定義を見ると、「支配権が行使される領域」、「何らかの物理的特徴によって明確にマークされた領域」であることがわかります。数学の同様の定義-関数の「ドメイン」。その領域の責任者、またはいくつかの基準に基づいて、大きな何かをドメインまたは領域に分割できます。モジュールのようなもの。(私の理解では)「ドメインモデル」はアプリのビジネスロジックで使用できるモデルです。DDDは、「地域」の種類にも関係しています。
サヴァ

回答:


9

Eric EvansによるDomain Driven Designブックの「ドメイン」という言葉には特定の意味があります。それがソフトウェアの目的です。

エヴァンスはさらに進んでいます。彼の見解では、同じソフトウェアでもサブドメインがあります。そして、これは「戦略的デザイン」を扱う本の一部です。

コアドメイン、サポートドメイン、および汎用ドメインの3つの「ドメイン」があります。彼はこれらをサブドメインと呼ぶこともあります。

Evansは、ソフトウェアの背後にある実際のビジネスにも深く関心があり、この本は開発者だけでなく、ソフトウェアとビジネスがどのように連携するかを確認する必要があるアーキテクトやマネージャーも対象にしています。およびこれらのサブドメイン。

したがって、コアドメインは、ソフトウェアの競争上の優位性と「存在理由」の両方を表すソフトウェアの一部です。顧客がソフトウェアと他のソフトウェアを購入するのは、ソフトウェアの一部です。通常、エヴァンスはそれをコードの割合が最小のドメインと見なします。最も重要な20%と考えることができます。これは実際に購入できない部分であり、ソフトウェア全体の単一のモジュールまたはコンポーネントである可能性があります。

サポートドメインは依然として重要であり、組織に固有のものであってもかまいませんが、コアドメインほど重要ではありません。それがなければ、ソフトウェアはそれほど価値がなく、コアはそれに依存します。自分で作成したソフトウェアの複数のモジュールで、コアに対して重要であるが支援的な機能を実行する可能性があります。

汎用ドメインは、ソフトウェアの中で最もカスタマイズが少なく、ある意味では最も重要ではありません。社内で作成したかもしれませんが、そのまま購入するか、有名なオープンソースソフトウェアを使用する方が効率的かもしれません。システムのこの部分は、おそらくドメイン全体に固有ではないため、たとえば、小包を配送する配送システムや患者を管理する健康記録システムがある場合、汎用ドメインはこれらのシステムの一部であり、一般的であり、単に機能するためにそこにいる必要があります。これはおそらくシステム全体の大部分を占めていますが、必ずしもそうではありません。

ビジネスの観点からは、コアドメインとは何かを決定し、そこに開発リソースを集中することが重要です。Evansには、特にInfoQサイトで多くのビデオがあり、これらの概念について詳しく説明しています。

したがって、DDDの場合、ソフトウェアの「ドメイン」についてよく話しますが、見た目ほど単純ではありません。

DDDの概念は、より広範なソフトウェアコミュニティに必ずしも存在するわけではないことに注意してください。他の開発者、作成者、および製品担当者は、さまざまなアイデアや定義を持っている場合があります。DDDについて書いた他の著者でさえ、Evansの本でこれらの概念を詳しく説明しているかもしれませんが、ソフトウェアプロジェクトを作成および計画する際にこれらの概念はまだ有用だと思います。


1
再:あなたの最後の段落:おそらくソフトウェア開発のコアドメインについて何らかの合意を得るべきでしょうか?しかし、OOPとは何か、Functionalまたはその他の用語に同意するように、Humpty Dumptyはずっと前に勝ったと思います。

@nocomprendeいいえ、これらの概念は、特定の時間における特定の組織の特定の個々のソフトウェアに固有のものです。したがって、MSFT Windowsのコアドメインは、市場の状況、顧客の期待などに応じて異なります
。– RibaldEddie

1
「2種類の人がいる:人を2種類に分ける人とそうでない人」という古いことわざを思い出すと思います。しかし... 2番目の種類の人には1種類の人

@nocomprende申し訳ありませんが、最初のコメントを本当に理解できませんでした。ソフトウェア開発のコアドメインでの「同意」の一部は冗談でした。
-RibaldEddie

109

ドメインは、あなたがソフトウェアを使用して問題を解決しようとしているれている実世界のコンテキストです。各ドメインには、そのドメインの一部である専門知識、語彙、ツールが付属しています。

ドメインの特定の例は、「高速回転カッターを使用した複雑な部品の自動加工」のようなものです。これを実現するソフトウェアおよびハードウェアシステムは、CNC ミルと呼ばれます。

ドメインの別の例は、企業の経理部門です。

マーティン・ファウラーによる境界コンテキストの詳細


4
うん。「ドメイン」を読むとき、「(特定の分野に限定された)専門知識または懸念の領域」に置き換えることができます。
KlaymenDK

1
心に留めておくべき興味深いことは、ソフトウェアの領域は、人間が達成しようとしていること、または彼らが理解することとはまったく関係がないということです。私の車のシンプルなコンピューターは、私が何も知らない燃焼を最適化するためのことをしていると確信しており、率直に言って気にしません。そのため、ソフトウェアは人間の視点であり、望んでいると仮定することは非常に危険な誤解です。これは、ソフトウェアシステムがより広い領域を網羅し、目標を選択する意識と能力を高めているため、役に立つかもしれません。ねえ、ちょっと待って、アシモフはそれをずっと前に考えていなかったのですか?

1
@ user251748-まあ、それは人間とそのプロセスに関係していると思います。必ずしも人々が即座に理解することではありません。
Sipo

38

たとえば、eコマースのウェブサイトを構築している場合、ドメインは「eコマース」になり、クライアント/会社の営業慣行に関連するプロセスが含まれます。したがって、ドメインモデルは、製品、請求書、または出荷記録を表すものになります。


7
Webサイトはdomain namesドメインとしても知られているので、ここでドメインという言葉の使用方法を明確にする必要があると思います。
-YetAnotherRandomUser

@YetAnotherRandomUser-私にとって、彼が何を意味していたかは明らかです。;)
Sipo

19

ドメイン知識の領域です。それはあなたのソフトウェアによって解決された問題が存在する活動としてであるかもしれません。(WikiDDDコミュニティ

エリック・エヴァンスは著書の中で、貨物輸送を使用してDDDについて説明しています。彼の例では、ドメイン配送に関するすべてです。貨物の移動、管理、出荷、追跡などの方法。貨物には独自の特定のルール、言語、プロセスがあります。これらは、ドメインモデル、オブジェクト、サービスなどを作成します。

アプリケーションを作成すると、実際の配送の世界と同様に、何らかの許可が与えられます。誰もが倉庫にアクセスできるわけではありません。情報は貨物の輸送に関連していない可能性があるため、ユーザーがどのように許可され、許可がどのように付与されるかはドメイン外である 可能性があります。

簡単に言えば、ドメインビジネスを行う場所です。あなたのビジネスが貨物を出荷している場合-貨物の出荷があなたのドメインになります。あなたのビジネスが従業員の認証と承認を行っている場合、これがあなたのドメインになります。


7

ドメイン駆動設計:ソフトウェアのハートに複雑への取り組み、エリック・エヴァンス:

すべてのソフトウェアプログラムは、ユーザーの何らかの活動または関心に関連しています。ユーザーがプログラムを適用するサブジェクト領域は、ソフトウェアのドメインです。

航空会社の予約プログラムの領域には、実際の航空機に乗る実際の人々が含まれます。

会計プログラムの領域はお金と金融です。

ソースコード管理システムの領域は、ソフトウェア開発そのものです。

ドメインモデルは、ドメインの専門家の頭の中の知識を「厳密に組織化された選択的な抽象化」です。

パレルモは、タマネギのアーキテクチャを説明する際に、この要約を提供しました

真ん中には、組織の真実をモデル化する状態と動作の組み合わせを表すドメインモデルがあります。

ファウラーは、順番に、提供しています

動作とデータの両方を組み込んだドメインのオブジェクトモデル。

最新の定義を見ると、ドメインモデルとデータモデルが異なる参照に遭遇する可能性が高くなります。意味の変化は、強調の変化ほど重要ではありません-行動のモデル化(モデルの外部からの情報に応じてデータが変化する方法)には、物事を書き留めるさまざまな方法よりも複雑で変化があるとは考えていません。


私はあなたの定義を現実世界の活動からコンピューターシステムがやっていることに少し調整します。たとえば、「ソースコード管理システムのドメイン」は、ソースコードファイルの保存と取得です。ドメインは、実際のことを処理するためではなく、プログラミングシステムの構築と保守を容易にするためにモデル化されています。そのため、人間ができることではなく、コンピューターがそれを容易にするためにできることに重点が置かれています。デジタルX線は、X線プロセスの感度と画像処理を改善しますが、人間には何もしません。また、手荷物の無人スキャンにも同じように役立ちます。

2

おそらくドメインとは何かを既にご存知だと思いますので、次のステップはサブドメイン、ドメインモデル、さらに重要なことには境界付きコンテキストを定義することです。

ただし、ドメインの視点を置くことから始めます。

ドメイン

ドメインは私たちが住む現実です。その実体、その行動、従う法律。それは私たちの前に存在し、何らかの形で私たちの後に存在します。その存在は私たちの意識に依存しません。マーケティング担当者は新しい機能を考え出し、市場分析を実行します。キーアカウントマネージャーはクライアントと通信し、ソフトウェア開発者はビジネスプロセスを自動化します。それが、ドメインが問題空間と呼ばれる理由です。

サブドメイン

DDDは、モデリングと理解を容易にするために、ドメインをサブドメインに分解することを意味します。ビジネスを運営するという事実は、少なくとも1つの支配的なビジネス価値があることを推測します。お金を稼ぐもの。私たちがビジネスを始めたもの。そのため、「コアドメイン」のような単語を知らなくても、それはまだ存在しています。サブドメインにも同じことが当てはまります。おそらく、簿記、人事、技術サポートが必要になるでしょうが、それは二次的なものです。

ドメインモデル

抽出されたサブドメイン全体をモデル化する必要はありません。関心のあるサブドメインごとに特定のルールセットがあります。特定のビジネス結果を達成するために必要なサブドメイン内のルールセットは、モデルと呼ばれます。

制限されたコンテキスト

最も重要なことは、境界のあるコンテキストが論理的な境界であることです。

サブドメインとコアドメインの両方が定義されたら、コードを実装します。境界付きコンテキストは、サブドメインの適用可能性の具体的な境界を定義します。これは、特定のサブドメインが理にかなっている領域であり、他のサブドメインはそうではありません。トーク、プレゼンテーション、アーティファクトによって定義された物理的境界を持つコードプロジェクトの場合があります。

次は何ですか?

バインドされたコンテキストの概念がサブドメインの概念とどのように相関するか、サブドメインとバインドされたコンテキストを定義する方法、相互のコミュニケーションを表現する方法、これらの概念を念頭に置いてチームを編成する方法に興味があるなら、おそらくあなたはこれに興味があるでしょうさらに読書


ソフトウェアのドメインは、ソフトウェアがすることだと思います。それは確かに私たちの前には存在していなかったし、私たちが委任したいことをすることは完全に私たちによって構成されているので、それらは私たちの相互作用なしに起こる。言い換えれば、それは私たちが持っていた夢についてであり、私たちはそれを忘れたいと思っています。また、ソフトウェアが展開されるとすぐにどのように機能するかをすぐに忘れてしまいます。ソフトウェアは、コンピューターの解決に適したゲームです。コンピューターをまだ作成していないため、これまでやっただけで、もう煩わされたくない問題を解決します。しかし、すぐに

私はこの部分で自分自身を明確にしませんでした-「前に」、私の悪い。ドメインが人類の前に存在するという意味ではありませんでした。「私たち」とは、ソフトウェア開発者が電子商取引におけるビジネスプロセスなどの自動化の問題を解決することを意味します。商取引の概念は明らかに彼らの前に存在していました。したがって、開発者の責任は、あなたが言ったように、コンピューターに物事を委任することを可能にすることです。

右。私のポイントは、コンピューターシステムは現実の世界に対処する方法であると人々が考えることです。しかし、コンピューターは、ドメインの一部ではなかった多くのアイデア、要件、および懸念をもたらします。手術は感情的な問題に対処する方法であると言っているようなものです。ロボトミーは機能しますが、感情的な問題は脳とはほとんど関係がありません。そして、私の感情はホルモンや神経伝達物質の影響を強く受けるので、SSRIは生物学、心理学、人間関係の一部なのでしょうか、それとも自分自身のカテゴリーなのでしょうか?コンピューターは本物ではなくコンピューターに関するものです。

1
コンピューターとは、本物をモデル化することです。50年前、店のレジ係に1ドルを支払い、今では購入の全プロセスを実行していたとしましょうそれにもかかわらず、私の本当のお金は私の本当の銀行口座から引き出されました。そのため、コンピューター、人間、またはその他のプロセスに関係することは関係ありません。おそらくそれはあなたにとって興味があるかもしれません:medium.com/@wrong.about/…– user286277

お金は本物ではありません。ビジネスプロセスは現実的ではありません。私たちが語ることのできるものはすべて概念であり、現実のものではありません。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.