web-dev-qa-db-ja.com

Javaドメインモデルとは?

私はSpringの本を勉強していて、彼らはJavaドメインモデルについて言及しています。
それは何ですか?

30
John

ドメインモデル(用語がまったくないJava固有)は、技術的な実装上の理由で存在するクラスとは対照的に、問題のドメインで何かをモデル化するクラスです。

ドメインモデルインスタンスは、多くの場合、データベースに永続化する必要があり、Javaでは、通常、Java Beans仕様)に準拠します。つまり、個別のプロパティとパラメーターのないコンストラクターを表すgetメソッドとsetメソッドがあります。 Springおよびその他のフレームワークを使用すると、JSPでこれらのプロパティに直接アクセスできます。

たとえば、ショップアプリケーションでは、ドメインモデルクラスの一部はProduct、Order、ShoppingCart、Customerになります。

38

ドメインモデル は、問題のドメインの概念モデルです。 「Javaドメインモデル」とは、Javaそのモデルを表すクラスを意味します。Javaに固有の概念はありません。

ビジネスドメインのニーズに開発を集中させるアプローチについては、 ドメイン駆動設計 も参照してください。

9
Don Roby

Michael Borgwardtの回答 "ドメインモデル(用語がまったくないJava特定の)はクラスです"は間違っています。多くの人がその回答に同意していることに非常に驚いています。

ドメインモデルは、ソリューションの動作をモデル化するすべてのクラスです。必要な動作を実行するために最低限必要なものです。ドメインモデルには、UIと永続性の機能はありません(問題がUIまたは永続性を中心に展開している場合を除く)。

ドメインモデルが1つのクラスに実装されているのを見てきましたが、それはオブジェクト指向ソリューションの設計ではありません。オブジェクト指向ドメインモデルでは、各概念には、その概念に必要な動作を実装する独自のクラスがあり、クラスの状態を維持するために必要なフィールドが含まれています。

7
okaygo

例から始めましょう。お住まいの地域の一部のユーザーが使用するアプリケーションを作成しています。システムを設計するとき、これらの人々をシステムのユーザーと呼びます。また、システム内のこれらの人々の役割のリストと認証情報を管理する必要もあります。したがって、システムに概念エンティティを作成することを決定します。この概念エンティティは、ソフトウェアソリューション(アプリケーション)のユーザーオブジェクトにさらにマッピングされます。次に、アプリケーションを表すとき、そのユーザーオブジェクトをドメインモデルとして記述します。この用語の背後にある基本的な考え方は、それだけです。詳細については、次の Wikipedia link を参照してください。

5

前回の投稿から久しぶりのことです。ただし、この概念に関する情報が明確であることが重要です。ドメインモデルは多くの場合、特定の問題ドメインを表すクラスのセットです。このコンセプトは、1つのタイプのテクノロジー実装に関連付けられているわけではありません。私はそれを言うのは少し誤解を招くと思います:

"ドメインモデルインスタンスは、多くの場合、データベースに永続化する必要があり、Javaでは、通常、Java Beans仕様に準拠します。つまり、取得および設定されます。個別のプロパティとパラメータのないコンストラクタを表すメソッド。Springやその他のフレームワークを使用すると、JSPでこれらのプロパティに直接アクセスできます "

ドメインモデルは、多くの場合、ドメイン主導の設計の結果です。ドメイン主導の設計は、優れた堅牢なドメインモデルの鍵です。 Eric Evansの本Domain Driven Designを読んで理解を深めることをお勧めします。

ドメインモデルクラスには情報が関連付けられていますが、私の考えでは、このコンテキストではデータよりも動作が重要です。ドメイン主導の設計に関する大きな間違いは、顧客などのドメインエンティティのデータを表すデータクラスを作成し、顧客の属性にパブリックゲッターとセッターのみを提供することです。これらのオブジェクトはデータベース構造を模倣する傾向があるため、実際のビジネスロジックはドメインサービスに存在する可能性が高くなり、 貧血ドメインモデル になります。このモデルは、ドメインモデルよりも トランザクションスクリプト に近いものです。

4
Noel Ady

簡単に言うと、ドメインパッケージは、主にユーザー名、client_info、ソリューション固有のpojosなどのUIフィールドをレンダリングする必要があるが必ずしも必要ではない要素のオブジェクト表現です。ドメインパッケージに含まれるクラスは、DAO(DATA ACCESS OBECT)パッケージ。daoはデータベースにクエリを実行し、これらのフィールドをドメイン内のクラスにマップして返します。または、hibernateなどのフレームワークを使用してこのオブジェクトを返すこともできます。この場合、DBへのクエリはhibernateなどのフレームワークによって処理されます。

この答えはよりMVCであり、Java固有ですが、可能な実装の1つを詳しく説明しています。

0
Sameer