DTO、VO、POJO、JavaBeansの違いは?
-
06-07-2019 - |
質問
同様の質問を見ました:
また、それらが使用されるコンテキストを教えてください。またはそれらの目的は?
解決
JavaBeans
JavaBeanは、 JavaBeansの規則 Sunの定義どおり。ウィキペディアには、 JavaBeans の概要がかなり記載されています。
JavaBeansは、ビルダーツールで視覚的に操作できるJava用の再利用可能なソフトウェアコンポーネントです。実際には、これらは特定の規則に準拠したJavaプログラミング言語で記述されたクラスです。それらは、多くのオブジェクトを単一のオブジェクト(Bean)にカプセル化するために使用されるため、複数の個々のオブジェクトとしてではなく、単一のBeanオブジェクトとして渡すことができます。 JavaBeanは、シリアライズ可能なJavaオブジェクトであり、nullaryコンストラクターを持ち、ゲッターメソッドとセッターメソッドを使用してプロパティにアクセスできます。
JavaBeanクラスとして機能するには、オブジェクトクラスがメソッドの命名、構築、および動作に関する特定の規則に従う必要があります。これらの規則により、JavaBeansを使用、再利用、置換、および接続できるツールを持つことができます。
必要な規則は次のとおりです。
- クラスには、パブリックのデフォルトコンストラクターが必要です。これにより、編集およびアクティベーションフレームワーク内で簡単にインスタンス化できます。
- クラスのプロパティは、標準の命名規則に従って、get、set、およびその他のメソッド(いわゆるアクセサメソッドとミューテータメソッド)を使用してアクセスできる必要があります。これにより、フレームワーク内のBean状態の簡単な自動検査と更新が可能になり、その多くにはさまざまなタイプのプロパティ用のカスタムエディターが含まれています。
- クラスはシリアル化可能でなければなりません。これにより、アプリケーションとフレームワークは、VMとプラットフォームに依存しない方法でBeanの状態を確実に保存、保存、および復元できます。
これらの要件は、インターフェイスを実装することではなく、主に規則として表現されるため、一部の開発者は、JavaBeansを特定の命名規則に従うプレーンオールドJavaオブジェクトと見なしています。
POJO
プレーンオールドJavaオブジェクトまたはPOJOは、単純な軽量Javaオブジェクトを指定するために最初に導入された用語で、ヘビーウェイトEJB 2.x(特にエンティティBean)とは対照的に、 javax.ejb
インターフェースを実装しません、ステートレスセッションBeanはそれほど悪いIMOではありません)。今日、この用語は余分なもののない単純なオブジェクトに使用されます。繰り返しになりますが、Wikipediaは POJO :
POJOは、Plain Old Javaの頭字語です オブジェクト。名前は強調するために使用されます 問題のオブジェクトが 特別なものではなく、通常のJavaオブジェクト オブジェクト、特に エンタープライズJavaBean(特に以前 EJB 3)。用語はマーティンによって造られました ファウラー、レベッカ・パーソンズ、ジョシュ 2000年9月のMacKenzie:
"人々がなぜ通常のオブジェクトを システムとそれがあったと結論づけた 単純なオブジェクトには派手さが欠けていたからです 名。だから私たちは彼らに1つを与えました、そしてそれは 非常にうまくいきました。"
この用語は、 技術の古い用語 などの派手な新機能を使用しないでください POTS(Plain Old Telephone Service) テレフォニー、PODS(Plain Old Data C ++で定義されている構造) ただし、C言語機能のみを使用します。 PerlのPOD(Plain Old Documentation)。
この用語はほとんどの場合獲得されました 広く受け入れられている 一般的かつ簡単に必要 と対照的な用語 複雑なオブジェクトフレームワーク。 A JavaBeanはPOJOであり、 シリアライズ可能、引数なし コンストラクタ、およびへのアクセスを許可します ゲッターとセッターを使用するプロパティ メソッド。エンタープライズJav
他のヒント
DTO対VO
DTO-データ転送オブジェクトは、レイヤーと層の間でデータを転送するために使用される単なるデータコンテナーです。
- 主に属性が含まれています。ゲッターとセッターなしでパブリック属性を使用することもできます。
- データ転送オブジェクトにはビジネスロジックが含まれていません。
アナロジー:
属性username、 パスワードとメールID。
- このフォームをRegistrationServletファイルで送信すると、ビューレイヤーから渡すすべての属性がビジネスレイヤーに渡されます。 Java Beanの属性、次にDAOまたは永続層の属性。
- DTOは、ビューレイヤーからビジネスレイヤー、そして最後に永続レイヤーに属性を転送するのに役立ちます。
DTOは主にネットワークを介してデータを効率的に転送するために使用されました。JVMから別のJVMに至る場合もあります。
DTOは、多くの場合 java.io.Serializable
です-JVMを介してデータを転送するため。
VO-値オブジェクト[1] [2]は、それ自体が固定データセットを表し、Java列挙型に似ています。値オブジェクトのIDは、オブジェクトIDではなく状態に基づいており、不変です。実際の例としては、Color.RED、Color.BLUE、SEX.FEMALEなどがあります。
POJO対JavaBeans
[1] POJOのJava-Beannessは、そのプライベート属性がすべて、JavaBeans規約に準拠するパブリックgetterおよびsetterを介してアクセスされることです。例:
private String foo;
public String getFoo(){...}
public void setFoo(String foo){...};
[2] JavaBeansはSerializableを実装し、引数なしのコンストラクタを持たなければなりませんが、POJOではこれらの制限はありません。
基本的に、
DTO:"データ転送オブジェクト"ソフトウェアアーキテクチャの別々のレイヤー間を移動できます。
VO:"値オブジェクト" Integer、Moneyなどのオブジェクトを保持します。
POJO:特別なオブジェクトではないプレーンオールドJavaオブジェクト。
Java Beans: Javaクラス
がシリアル化可能である必要があり、 no-arg
コンストラクターと各フィールドのゲッターとセッターがあります
Java BeanはEJBとは異なります。
Java 1.0の JavaBeans仕様はSunのVBのようなIDEでJavaオブジェクトを操作できるようにします。 " Java Beans"として認定されたオブジェクトに対して規定されたルールがありました。
- デフォルトのコンストラクタ
- 適切な命名規則に従ったプライベートデータメンバーのゲッターとセッター
- シリアル化可能
- おそらく私が忘れている他の人たち
EJBは後で登場しました。分散コンポーネントとトランザクションモデルを組み合わせ、スレッド、プーリング、ライフサイクルを管理し、サービスを提供するコンテナで実行されます。 Java Beansとはかけ離れています。
DTOはJavaコンテキストで発生しました。これは、EJB 1.0の仕様が「おしゃべり」すぎることがわかったためです。データベースで。すべてのデータ要素をラウンドトリップするのではなく、人々はそれらをまとめてJava Beansにパッケージ化し、出荷します。
POJOはEJBに対する反応でした。
POJO : これは、他のJavaファイル(クラス)を拡張または実装しないJavaファイル(クラス)です。
Bean : これは、すべての変数がプライベートであり、メソッドがパブリックであり、変数へのアクセスに適切なゲッターとセッターが使用されるjavaファイル(クラス)です。
通常のクラス: これは、public / private / default / protected変数で構成されるJavaファイル(クラス)であり、別のJavaファイル(クラス)を拡張または実装する場合としない場合があります。
最初の話について
通常クラス -これは、Javaで通常のクラス定義を意味し、異なるタイプのメソッドプロパティを作成することを意味しますなど
Bean- Beanは何でもありません。このBeanを使用する特定のクラスのオブジェクトに過ぎません。オブジェクトと同じJavaクラスにアクセスできます。。
そしてその後、最後の1つのPOJOについて話します
POJO - POJO は、デフォルトのコンストラクターとプライベートプロパティ、およびセッターメソッドとゲッターメソッドに対応する値を設定するためのプロパティのみを持つサービスを持たないクラスです。 プレーンJavaオブジェクトの短縮形です。
- 値オブジェクト:オブジェクトの値に基づいてオブジェクトの同等性を測定する必要がある場合に使用します。
- データ転送オブジェクト:リモートサーバーへの複数の呼び出しを回避するために、複数の属性を持つデータをクライアントからサーバーを介してレイヤーを介してワンショットで渡します。
- Plain Old Java Object :これは、プロパティを持つ単純なクラス、引数のないパブリックコンストラクタのようなものです。 JPAエンティティを宣言するとき。
difference-between-value-object-pattern-and-data-transfer-pattern