004.Java中PO、DO、DTO、 VO、 BO、POJO 、DAO、TO的概念

004.Java中PO、DO、DTO、 VO、 BO、POJO 、DAO、TO的概念

 

ダイヤグラム

1.コンセプト

  1. PO(永続的なオブジェクト)永続オブジェクト

    コンセプトは、O / Rマッピングを表示され、何のO / Rマッピングが存在しない場合には、そのような概念は存在しません。

    一般に、データモデル(に対応する  データベース  )、処理部自体は、ビジネスロジックがあります。

    これは、と見ることができるデータベース出演マップでJavaオブジェクト

    最も単純な  POの  テーブルのレコードに対応するデータベースであり、記録の複数のPOを設定することができます。

    POは、任意のデータベース操作を含めることはできません。

  2. DO(ドメインオブジェクト)ドメインオブジェクト

    現実の世界からで、有形・無形のビジネスエンティティが抽象化。

  3. DTO(データ転送オブジェクト)データ転送オブジェクト

    この概念は、それによって、分散型コールのパフォーマンスを改善する、分散型コール数を削減し、ネットワークの負荷を軽減するために、J2EEデザインパターン、データエンティティEJBの粗粒分散アプリケーションの本来の目的が来るが、ここでは私は、プレゼンテーション層とサービス層との間のデータ転送オブジェクトを参照します

  4. オブジェクトのVO(値オブジェクト)値

    それはデータのみを含むように、典型的には、データサービスレイヤ間の転送、及びPOことがあります。しかし、それは、ビジネス・オブジェクトの抽象的であるべきであり、テーブルには、ビジネスはそれを必要に基づいて、対応、またはしない場合があります。GCによって回収され、新しいキーワードで作成。

  5. BO(ビジネスオブジェクト)ビジネスオブジェクト

    ビジネスの観点からのモデルは、ドメインモデルでUML要素ドメインオブジェクトを参照してください。

    Javaオブジェクトは、DAOのメソッドを呼び出すことによって、ビジネス・ロジックをカプセル化し、組み合わせPO、VOの事業運営。

    ビジネスオブジェクト:ビジネスオブジェクト

    主な役割はしているオブジェクトのビジネス・ロジックをカプセル化しますこのオブジェクトは、1つのまたは複数の他のオブジェクトを含むことができます。例えば、履歴書、教育経験、実務経験、社会的関係、など。私たちは、教育経験がPOに対応して置くことができ、仕事の経験は、POに対応し、社会的関係は、POに対応しています。これら含むBO POの各オブジェクトBO再開に対応するレジュームプロセスを確立します。このようなビジネス・ロジックの処理では、BOのために対処することができるようになります。

  6. POJO(プレーン普通のJavaオブジェクト)ルールのない単純なJavaオブジェクト

    従来のJavaオブジェクト。これは、いくつかのオブジェクト/関係マッピングツールで、データベーステーブルのレコードPersisentオブジェクトのメンテナンスを行うことができる純粋なJavaは、Java Beanが仕様、その他のプロパティやメソッドの増加はオブジェクトと完全に一致しています。私の理解では、最も基本的なJava Beanの、フィールドのみとgetterメソッドとsetterメソッドを属性ということです!

    POJOをまとめDO / DTO / BO / VOです。

  7. DAO(データアクセスオブジェクト)データアクセスオブジェクト

    Sunは、標準のJ2EEデザインパターンで、このモデルはその永続化層を操作するための責任があるDAO、インタフェースを持っています。これは、ビジネス層のためのインタフェースを提供します。このオブジェクトは、データベースにアクセスするために使用されます。通常、組み合わせて使用​​PO、DAOは、各種データベースを操作するための方法が含まれています。その方法では、POは、データベース関連の操作に結合します。ビジネスロジックおよびデータベースリソースの真ん中でキャッチ。VOでは、データベース上でCRUD操作を提供します。

  8. TO(転送オブジェクト)、データ転送オブジェクト

    異なるTIE(関係)送信されたアプリケーションの間でオブジェクト

2.アプリケーションとの間の差と

(1)VOとDTOの差

DTOは、プレゼンテーション層とサービス層との間でデータを転送することがありますので、なぜあなたはVO、それが必要なのでしょうか?

オン!シナリオのほとんどは、DTOとVOのプロパティ値は、基本的に同じであるが、彼らは通常POJOですので、必要は気にしないし、これがために思考のレベルを達成していることを忘れてはいけない設計レベルの概念をまたは両方が本質的に異なるため、DTOは、サービス層がデータを受信し、データを返すために必要であり、データのプレゼンテーション層は、VOを表示する表し、VO及びDTOに存在するべきです。

理解しやすいかもしれない説明するために例を使用します。

たとえば、次の方法のgetUserサービス層システムはユーザを返し、性別(性別)であるプロパティは、サービス層のために、それが唯一の意味論的に定義される:1-男性、0-不特定の2雌、プレゼンテーション層としては、それは未指定のための「秘密」で、女性のための「美しさ」と、男性のための「男性」を使用する必要があるかもしれません。ここで、あなたはまた、サービス層では、直接戻っ「ギャルズ」を主張するかもしれない、まだラインではないのですか?ほとんどのアプリケーションでは、これは問題ではありませんが、需要は、顧客がスタイルをカスタマイズすることができ、そして「セックス」のための異なるスタイルが(別のポータルを使用して、複数のクライアントのために同時に同じ性能、またはサービスでない場合を想像します)、クライアントプレゼンテーション層のための、さまざまな要件が異なっている場合、問題が来ました。ここでも、バックビューの単一責任の原則の観点から分析の設計レベル、に、サービス層は、唯一のビジネスのために責任があるにかかわらず、式の特定の形の、したがって、それは、DTOを返すフォームの出現と相まってすべきではありません。
最後に分析し、デザイン思考のレベルで理論的リターン理論は、我々はそれが達成レベルでそうする必要がありますか?ワンサイズは、すべてのアプローチは、多くの場合、ろうそくの価値ではないフィット、私はどのように正しい選択をするために、以下のアプリケーションを分析します。

(2)VOアプリケーションとDTO

上記のちょうどこのセクションでは、アプリケーションで正しい選択をするためにどのように教えてくれます、コンセプトでVOとDTOとの違いを説明するために簡単な例を使用しています。

次のシーンでは、VOとDTO 2イン1(注:レベルを達成するために)考えることができる前に:

需要は非常に明確かつ安定しており、クライアントが一つだけ時間がある非常に明確で、VOおよびDTOエリアを区別する必要がないときは、VOは、この時点で引退することができます、あなたはDTO引退とされていないのはなぜDTO、VOを使用することができますか?バック設計レベルまで、責任は、それはまだ「ギャルズ」を使用することはできません前の例のために、あなたは簡単に「性別」のために、DTOを理解することができ、そのため、サービス層の表示層と結合してはならないまま、変換が依存する必要がありますページ(JavaScriptなど)、スクリプトや他のメカニズム(JSTL、EL、CSS)
クライアントをカスタマイズすることができたとしても、または異なるクライアントの数が存在する、クライアントは、特定の技術(スクリプトや他のメカニズム)を使用することができる場合、変換を達成するために、また、引退VOができます

次のシナリオでは、優先度VO、DTOの共存を与える必要があります。

そのようなフレームワーク(例えば、フレックスなど)を自動提供するなどのいくつかの技術的な理由のためにいくつかの分野におけるUIのためのPOJOを変換し、実装レベルでのVOの定義を考慮し、このトレードオフをもたらすために自動変換フレームワークを使用する能力に完全に依存しますVO間の下落よりも1つ多くの開発・保守効率と設計、開発、保守効率をもたらすことを行います。

ページが複数のサービスを呼び出す必要があり、この大規模なビューのすべてのデータで構成され、「ビッグビュー」を、表示された場合はもちろん、それはまた、ワンタイム場所にサービス層を介してDTOの大規模なビューを返す提供することができます(複数DTOは、アセンブリに戻りますしかし、このような方法を提供するサービス層に適切である、私たちは)設計レベルのバランスを取る必要があります。

(3)DTOとDOとの間の差

最初は概念的な区別であり、DTOは、ビュー層とサービス層との間のデータ転送オブジェクトである一方で、(2間の合意であるとみなすことができる)DOは、ビジネスロールの様々な現実世界の抽象化である 2につながり、この方法のためのデータ、例えばのUserInfoとユーザー、getUserメソッドの違いによって、それが自然の中で、ユーザーのパスワード、そのパスワードのUserInfoデータ少なくとも1つのユーザ未満を返すことはありません。ドライブの設計の分野では、DOは、ビジネスロジックのフィールドを持つ単純なPOJOではありません。

(4)アプリケーションをDTOおよびDO

例から、注意深い読者は疑問を見つけることがあります。方法はのUserInfoのgetUserにパスワードを含めることはできませんが返された場合、それは同じ時間にパスワードを定義しますが、メソッドのcreateUserがある場合は、この属性には存在してはならない、入ってくるのUserInfoをどのように行う、ユーザーのパスワードを含める必要がありますか?設計レベルでは、ビューレイヤーサービス・レイヤー・サービス層DTOに移し、DTOビュー層に戻っはコンセプトが異なるが、実装レベルでは、我々は通常、めったに(2のUserInfoを定義していない、またはそれ以上)かサービス層は、データを受信したとき、それは非常に賢明ないないようですので、我々は完全に互換性のDTOを設計することができ、プロパティは、このような順番べきその価格、数量割引の合計金額として表示層(によって設定されるべきではありません返却してはならないものではなく、無視され、層に(例えば、ユーザーパスワード)、サービスデータを返す意思決定など)は、関係なく、層が閲覧、サービス層に配置されているかどうかの、対応する属性が設定されていません。

DOのために、より多くの事:なぜそれを行うには、直接バック層をサービスではありませんか?そのような符号化は、次の理由のために省略し、変換作業DTOすることができます。

  • 性質の差は、DTOは複数DO、及びその逆に対応することがお互いに一致しない恐れがあり、さらに二多くの関係が存在します。
  • いくつかは、DOは、ビュー層に直接渡された場合、コードは直接レイヤーベースのAOPのインターセプトサービスのために、それはアクセスしてはならない操作を呼び出すビュー層サービス層をバイパスすることができ、この方法でのビジネスを持っているデータ層ビューDOを知ることが許されるべきではありませんアクセス制御のためのメカニズムは、この問題は特に深刻である、とトランザクションは制御が困難であるように、表示層におけるビジネス方法は、問題の情勢ので、またDO呼び出します。
  • 直接DO表示層に露出している場合、いくつかのORMフレーム(例えば、休止状態)のために、しばしば大部分ではなく、ほとんどのビューにおけるビューのトランザクション層(オープンセッションの範囲内で、「遅延ロード」技術を使用しそれが表示されます(休止状態のために、それはLazyInitiliaztionExceptionランタイムである)閉じSessionオブジェクトがアンロードに関連する場合、例外を取得しようとした場合の設計は、賞賛に値する場合)ではありません。
  • 設計の観点から、これはまだ一方向の依存性があるが、ビュー層はサービス層に依存し、DOにさらされた場合、サービス層は、ドメイン層に依存し、それは、ビュー層のDAO層に直接依存つながりますが、このクロスレイヤ依存性は不要なカップリングにつながることができます

DTOについて、説明するために少しもあり、DTOは「あるべきであるフラット2次元オブジェクトの理解に焦点を当て、」

説明するために例を与えるために:それは(などアドレス、アカウント、地域、など)ユーザー他のエンティティの数に関連付けされた場合、のgetUser()は返すように一緒に関連付けられているDTOオブジェクトに必要かどうか、のUserInfoを返さ?もしそうであれば、必然的にデータの伝送量を増加させるために導き、分散アプリケーションのために、ネットワーク向け、シリアライゼーションおよびデシリアライゼーションを介して送信データので、この設計は、より受け入れられません。ユーザーリターンの基本的な情報だけでなく、これらの属性はのUserInfoを定義するために、そしてたAccountId、アカウント名、RegionId、RegionNameを、返却する必要性のgetUserほかには、「3次元」オブジェクトツリーに「フラットに「崩壊」した場合2次元オブジェクト、「プロジェクトの作成者は、現在、行き当たりばったり、関連するすべてのオブジェクトがオブジェクトDTOオブジェクトツリーに変換され、同一の構造を返す、非常に遅い性能をもたらすされる分散型システムに関与しています。

(5)DO及びPOの差

ほとんどの場合、DO及びPOは、唯一のPOJOのget / setメソッドを含むPO一から一ですが、いくつかのシーンはまだ二つの概念の違いを反映して自然界に存在します:

彼らは、ないいくつかのシナリオでDO明示的な永続性を必要としない、例えば、商品戦略のパターン設計方針の割引によって、ポリシーは割引の割引異なるインタフェースと実装クラスを派生されますが、これらのクラスは、割引政策の実施とみなすことができますこのようなではないことを、対応するPOが存在しますので、スタティックメモリ内にのみ存在し、永続性に持続する必要はありません。

同様に、いくつかのシナリオでは、このような多くの教師教師と生徒学生の存在などPOは対応するDOはありませんが、リレーショナルデータベースでは、この関係は真ん中のテーブルを表示する必要があり、それはTeacherAndStudentPOに対応しますこのPOは、ビジネスの分野で任意の本当の意味を持っていないPO、しかし、それはどんなDO対応で完全にすることはできません。

この後、2つのPOは、特定のビジネスに影響を与えるとの関係、およびこの関係には多くの種類があります:それはすべての多くない関係がなどに関する具体的なビジネスシナリオ、とはビジネス上の意味を、持っていないことを宣言しなければなりません多くの関係もDO、別の例のように表現する必要があります。多くの関係は、「役割」と「資源」の間に存在し、そしてこの関係は明らかにDO--として現れる「特権。」

いくつかのケースでは、いくつかの永続的なポリシーまたはパフォーマンスの考慮事項のため、POは、DO、複数の、およびその逆に対応することができます。このような顧客のカスタマーコンタクトが接続クエリーデータベース、顧客と二つの接点を少なくするために、ここでは、自分の連絡先情報を持っている(、極端な場合には例えば右)2 DO-1の関係が、おそらくパフォーマンスに関する考慮事項にあるようにデータは、データテーブルに組み込まれてください。逆に、ブックブックならば、カバーカバープロパティがありますが、プロパティは、バイナリデータの絵ですが、いくつかのクエリは、これにより、ディスクIOのオーバーヘッドを削減し、ORMフレームワークを想定し、一緒に操作荷重をカバーする必要はありません属性レベルの遅延ロードをサポートしていない、我々はこのようにPOの場合に対処するためにDOを形成し、行くために個別のデータテーブルにカバーを考慮する必要があります。

DO POのためのいくつかの属性値がどんな意味がない、これらのプロパティ値は、データの永続化戦略が存在しているのいくつかを解決するために、「楽観的ロック」を達成するために、POは、そのようなプロパティのバージョンとして存在することができる、このバージョンはDOのためにあります何のビジネスセンスがない、それはDOには存在してはなりません。同様に、永続属性の存在を必要としないかもしれないでください。

(6)DOおよびPOアプリケーション

機能のORMフレームワークは、非常に強力で人気のあるだけでなく、JavaEEのJPAの仕様、現在のビジネスアプリケーションの開発を発表して以来、基本的には完全にJPAは、Hibernate注釈/ DOに隠されたHBMによりDO及びPO、POを区別する必要はありません。それにもかかわらず、我々はまた、いくつかの問題に注意を払う必要があります。

DOのために不必要な永続属性は、明示的に、ORMを宣言する必要があります:JPAで@Transient文を利用することができます。

POのためにいくつかの永続化戦略はDOにより、バージョンなどのプロパティを、存在するために、POの合併は、DOに宣言する必要がありますが、理由はDOのこの性質のいずれかのビジネスセンスはありませんが、あなたは外国プロパティが隠されてみましょうする必要があります最も一般的な方法は、それも取得/設定メソッドを提供しない、民営化のプロパティ/ setメソッドを取得することですが、休止状態のために、これは、休止状態に、特別な注意が必要です、DOを変換するために、データベースからデータを読み込むの使用であり、反射機構を呼び出す例は、明示的に宣言されたメソッド、またはプライベートに設定する方法が設定されていない場合、設定された各プロパティ値の反射JavaBeanの仕様セット方法を用いてヌル引数コンストラクタ関数、とをしますか、につながりますHibernateはDOを初期化できませんので、異常かつ実現可能なアプローチは、プロパティ、イベントを実行するように設定する方法を保護されて設定することです。

PO DO対応する数の、またはPO対応する数のシーンだけでなく、プロパティレベル遅延読み込みを行うには、Hibernateは良いサポートを提供するためには、Hibernateの関連情報を参照してください。

おすすめ

転載: blog.csdn.net/songxiugongwang/article/details/90204107