私はSpringの本を勉強していますが、彼らはJavaドメインモデルについて言及しています。
それは何ですか?
6 に答える
ドメインモデル(この用語はJava固有ではありません)は、技術的な実装上の理由で存在するクラスとは対照的に、問題のあるドメイン内の何かをモデル化するクラスです。
ドメインモデルインスタンスは、データベースに永続化する必要があることが多く、Javaでは、通常、Java Beans仕様に準拠しています。つまり、個々のプロパティを表すgetメソッドとsetメソッド、およびパラメーターなしのコンストラクターがあります。Springおよびその他のフレームワークを使用すると、JSPでこれらのプロパティに直接アクセスできます。
たとえば、ショップアプリケーションでは、ドメインモデルクラスの一部はProduct、Order、ShoppingCart、Customerになります。
Michael Borgwardtの答え「ドメインモデル(この用語はJava固有ではありません)はクラスです」は間違っています。多くの人がその答えに同意していることに私は非常に驚いています。
ドメインモデルは、ソリューションの動作をモデル化するすべてのクラスです。必要な動作を実現するために最低限必要なことです。ドメインモデルには、UIおよび永続性機能がありません(問題がUIまたは永続性に関連している場合を除く)。
ドメインモデルが1つのクラスに実装されているのを見たことがありますが、それはオブジェクト指向ソリューションの設計ではありません。オブジェクト指向ドメインモデルでは、各概念には、その概念に必要な動作を実装する独自のクラスがあり、クラスの状態を維持するために必要なフィールドが含まれています。
例から始めましょう。あなたはあなたの地域の何人かの人々によって使われるであろうアプリケーションを作成しています。システムを設計するときは、これらの人々をシステムのユーザーと呼びます。また、システムおよび認証情報におけるこれらの人々の役割のリストを管理する必要があります。したがって、システムに概念エンティティを作成することにします。この概念エンティティは、ソフトウェアソリューション(アプリケーション)のユーザーオブジェクトにさらにマッピングされます。ここで、アプリケーションを表すときに、そのUserオブジェクトをドメインモデルとして記述します。この用語の背後にある基本的な考え方は、それだけです。次のウィキペディアのリンクでさらに読むことができます。
前回の投稿から久しぶりです。ただし、この概念に関する情報が明確であることが重要です。ドメインモデルは、多くの場合、特定の問題のあるドメインを表すクラスのセットです。この概念は、どのタイプのテクノロジー実装にも結び付けられていません。私は言うのは少し誤解を招くと思います:
「ドメインモデルインスタンスは、データベースに永続化する必要があることがよくあります。Javaでは、通常、Java Beans仕様に準拠しています。つまり、個々のプロパティを表すgetメソッドとsetメソッド、およびパラメータなしのコンストラクタがあります。Springやその他のフレームワークを使用すると、これらのプロパティにJSPで直接アクセスするには"
ドメインモデルは、多くの場合、ドメイン駆動設計の結果です。ドメイン駆動設計は、優れた堅牢なドメインモデルの鍵です。理解を深めるために、EricEvansの著書「ドメイン駆動設計」を一読することをお勧めします。
ドメインモデルクラスにはそれらに関連付けられた情報がありますが、私の意見では、このコンテキストのデータよりも動作の方が重要です。ドメイン駆動設計に関する大きな間違いは、顧客などのドメインエンティティのデータを表すデータクラスを作成し、顧客属性にパブリックゲッターとセッターのみを提供することです。これらのオブジェクトはデータベース構造を模倣する傾向があり、その結果、実際のビジネスロジックはドメインサービスに存在する可能性が高くなり、結果として貧血のドメインモデルになります。このモデルは、ドメインモデルよりもトランザクションスクリプトに近いもの です。
素人の用語では、ドメインパッケージは、主にユーザー名、client_info、ソリューション固有のpojoなどのUIフィールドをレンダリングする必要はありませんが、要素のオブジェクト表現です。ドメインパッケージに含まれるクラスは、DAO(DATA ACCESS OBECT)パッケージ。daoはデータベースにクエリを実行し、これらのフィールドをドメイン内のクラスにマッピングして返します。または、hibernateのようなフレームワークを使用してこのオブジェクトを返すこともできます。この場合、DBのクエリはhibernateのようなフレームワークによって処理されます。
この回答はMVCとJavaに固有ですが、可能な実装の1つを詳しく説明しています。