JAVA の PO、VO、BO、POJO、DAO、DTO、TO の理解

目次

1.アリ仕様

1.1. サービス/DAO レイヤーメソッドの命名規則

1.2. ドメインモデルの命名規則

1.3. 命名スタイル

2. 簡単なクラス: DO/DTO/BO/VO などを含む

3. MVC 3層アーキテクチャとの関係

4. まとめ

4.1. これらのオブジェクトを分割する理由

4.2. 非常に多くの O を定義する必要があるのはいつですか

4.3. エンティティオブジェクト間で変換するにはどうすればよいですか?

参考文献


1.アリ仕様

まず、 Ali Development Manual のPOJO /DO/DTO/BO/VOの関連説明を見てください。

1.1. サービス/DAO レイヤーメソッドの命名規則

1) 単一のオブジェクトを取得するメソッドには接頭辞 get が付きます。
2) 複数のオブジェクトを取得するメソッドにはリストが接頭辞として付けられます。
3) 統計値の取得方法には先頭に count が付きます。
4) 挿入メソッドには、save (推奨) または insert という接頭辞が付きます。
5) 削除メソッドには、remove (推奨) または delete というプレフィックスが付きます。
6) 変更されたメソッドには、先頭に update が付きます。

1.2. ドメインモデルの命名規則

1) データ オブジェクト: xxxDO、xxx はデータ テーブルの名前です。
2) データ送信オブジェクト: xxxDTO、xxx はビジネス ドメインに関連する名前です。
3) 表示オブジェクト: xxxVO、xxx は通常、Web ページの名前です。
4) POJO は DO/DTO/BO/VO の総称であり、xxxPOJO という名前を付けることは禁止されています。
 
知らせ:
送信を意味する単語: 送信。したがって、データ送信オブジェクトは DTO と呼ばれます。

1.3. 命名スタイル

[必須] DO / BO / DTO / VO / AO / PO / UID などの場合を除き、クラス名には UpperCamelCase スタイルを使用します。
       正の例: ForceCode / UserDO / HtmlDTO / XmlService / TcpUdpDeal / TaPromotion
       負の例: Forcecode / UserDo / HTMLDto / XMLService / TCPUDPDeal / TAPromotion

【必須】DO/DTO/VOなどのPOJOクラスを定義する場合は、属性のデフォルト値を設定しないでください。(4) OOP プロトコル
【必須】 DO/DTO/VO などの POJO クラスを定義する場合、属性のデフォルト値を設定しないでください。
       反例: POJO クラスの createTime のデフォルト値は new Date() ですが、このプロパティにはデータの抽出時に特定の値が設定されず、他のフィールドが更新されるとこのフィールドも更新されるため、作成時刻が変更されます。現在の時間まで。

2. 簡単なクラス: DO/DTO/BO/VO などを含む

DTO (Data Transfer Object) データ転送オブジェクト
さまざまなアプリケーションのデータ転送
DAO (Data Access Object) データ アクセス オブジェクト

        これは、主にデータベースと対話するためのデータ アクセス インターフェイスです。主にデータへのアクセスをカプセル化するために使用されますが、データベースへのアクセスではなく、データへのアクセスであることに注意してください。

DO(データオブジェクト)

        Alibaba では、データベース テーブルに 1 対 1 で対応する POJO クラスを特に指します。

DO (ドメインオブジェクト) ドメインオブジェクト
        ドメイン オブジェクト DO は、現実世界から抽象化された有形または無形のビジネス エンティティです。データ関連の操作において、データベース内にデータが存在し、DAO アクセスを使用して取得される場合、これらのデータは一般に標準化された方法でクラスに定義され、このクラスはデータベースに対応するエンティティを受け取るために使用される DO です。データベースとビジネス ロジックの間の抽象化されたデータ状態。

一般的にはビジネスロジック層(Service)がデータベース(SQL)にアクセスする際にデータを受け取るために使用されます。

xxxDO、xxx はデータテーブル名です

さらに、DO は概念的には Entity と同じであり、実際のアプリケーションでは 1 つのものです。わずかな違いは、DO はデータベースと特定のマッピング関係を持つエンティティであり、一般的に言えば、DO はエンティティの一種です。

VO (View Object) ビュー モデルは、
        フロント エンドと対話し、フロント エンドから返されたデータを受け取り、ビュー表示のためにフロント エンドに返すために使用されます。

xxxVO、xxx は通常、Web ページの名前です。

AO (アプリケーション オブジェクト) アプリケーション オブジェクト
        AO は、あまりにも一般的であり、その詳細については意図的に説明していないため、比較的一般的な概念です。非常に単純な例を取り上げます。制御層 (Controller) はビジネス ロジック層 (Service) 内の 1 つ以上のデータをクエリし、このデータ送信プロセスのトランスポートは AO によって完了します。通常のビジネス ロジックには、整数、文字、コレクション、クラスなどの多くの種類のデータがあり、これらを総称して AO と呼びます。

**コントローラ**と**ビジネス ロジック層 (サービス)** の間の抽象再利用オブジェクト モデルは、プレゼンテーション層に非常に近い場合があり、再利用の程度は高くありません。

BO (ビジネス オブジェクト) ビジネス オブジェクト
        ビジネス オブジェクト (ビジネス オブジェクト、BO) は、データを取得して処理するコンポーネントです。主な機能は、ビジネス ロジックをオブジェクトとしてカプセル化することです。このオブジェクトには 1 つ以上の他のオブジェクトを含めることができます。画像の記述は、オブジェクトの形式と動作を指しますが、もちろん、他のオブジェクトのいくつかの形式と動作も含まれます。

通常、ビジネス機能モジュールを含む特定のインスタンスで使用されます。たとえば、いくつかの機能を実現するために、コントローラー、サービス、DAO、ツール クラスなどの一連のインスタンスを作成しました。これらの一連のインスタンスがコンポーネントに結合されます。 . このコンポーネントは BO です。

POJO (Plain Ordinary Java Object) 純粋な通常の Java オブジェクト
        POJO は、setter/getter/toString のみを持つ DTO を参照します。一般に、POJO には、本質的に単純な Java オブジェクトである DO、DTO、BO、VO が含まれますが、実際には通常の JavaBeans であり、EJB との混同を避けるために作成された略語です。

PO (Persistent Object) 永続オブジェクトは
    
データベースのプロパティとフィールドに対応します

エンティティ(アプリケーションドメインの概念) エンティティ
        エンティティ(アプリケーションドメインの概念)
エンティティ

        Eitity は永続化されていないオブジェクトであり、現実からコードに抽象化したクラスです。

モデル (概念エンティティ モデル) エンティティ クラスとモデル
        モデルは、コンピュータ プログラミングにおける 2 つの概念です。1 つは3 層アーキテクチャの
エンティティ クラスで、もう 1 つは MVC アーキテクチャのモデルです。

3. MVC 3層アーキテクチャとの関係

        オブジェクト指向プログラミングの「3 層アーキテクチャ」では、各層で送信されるデータがエンティティ クラスにカプセル化されるため、データ送信が容易になり、可読性が向上します。

        MVC (モデル モデル-ビュー ビュー-コントローラー コントローラー) パターンでは、モデルはビジネス プロセス/状態の処理とビジネス ルールの定式化であるモデルを表し、ビューによって要求されたデータを受け取り、最終的な処理結果を返します。 。View はビューを表し、Model によってもたらされたデータ モデルを解析するために使用されます。ビジネスモデルの設計はMVCの最も重要な核と言えます。

        通常の意味での 3 層アーキテクチャとは、ビジネス アプリケーション全体を、プレゼンテーション層、ビジネス ロジック層、およびデータ アクセス層に分割することです。レベルを区別する目的は、「高凝集性、低結合性」という考え方です。

プレゼンテーション層 (Web):ユーザーの送信要求の受信と応答の処理に使用されます。
ビジネス ロジック層 (サービス) : データのビジネス ロジック処理。
データアクセス層(dao):この層で行われるトランザクションは、データの追加、削除、変更、更新、検索などのためにデータベースを直接操作します。

ここに画像の説明を挿入

4. まとめ

PO 永続オブジェクト:データベース属性およびフィールドとの 1 対 1 対応

DO ドメイン オブジェクト:エンティティとイベントに基づくビジネス オブジェクト。複雑なシステムを構築する場合、ドメイン駆動の設計アイデアを採用すると、開発の複雑さを軽減できます。

DTO データ転送オブジェクト:さまざまなアプリケーションのデータ転送に使用され、分散、マイクロサービスの名前

VO 値オブジェクト:フロントエンドと対話し、フロントエンドから返されたデータを受け入れ、フロントエンドに返し、ビューを表示するために使用されます。

BO ビジネス オブジェクト:複数の PO をカプセル化し、サービス層でさまざまなビジネスを処理します。

4.1. これらのオブジェクトを分割する理由

なぜなら、ビジネスが異なれば、同じオブジェクトの役割も異なるからです。たとえば、ユーザーの追加にはパスワードが必要ですが、情報の閲覧には一部の情報しか返せませんし、機密情報であっても特別に扱う必要があります。しかし、その処理は包括的ではなく、状況に応じて処理することができず、逆にビジネスの複雑さを増し、ビジネスの直結性を低下させます
。 , 他のビジネスに影響を与えることなく、フィールドの内容を変更します。プログラムを通常に実行すると、
プログラマは名前を知り、意味を理解できます。オブジェクトに名前を付けるときは、他のプログラマも同じように、XXXDO、xxxVO と名前を付ける必要があります。コードを保守するときにこの情報を処理する方法を知っている必要があります。

4.2. 非常に多くの O を定義する必要があるのはいつですか

プロジェクトで VO、BO、PO、DO、DTO を定義する必要は本当にありますか? 理論的には

プロジェクトが比較的小規模で、単純な MVC プロジェクトであり、1 人の兵士による操作である場合は、VO、BO、PO、DO、DTO の使用はお勧めしません。各レイヤーの送信を担当する POJO を使用するだけです。 、このプロジェクトの「目的」がすぐに達成されるからです。
ほとんどの場合、私たちは継続的に反復的なチーム コラボレーション プロジェクトを行っています。現時点では、VO、BO、PO、DO、DTO を使用することをお勧めします。また、標準仕様を形成するにはチーム内で合意に達する必要があります。

4.3. エンティティオブジェクト間で変換するにはどうすればよいですか?

BeanUtils.copyProperties(srcVo,destDto);
mapper.map(srcVo,DestDto.class);

参考文献

DAOの概念を深く理解するを参照してください。

Concept POJO Xiaofengwanyuedanのブログ

『Ali Java開発マニュアル 黄山編』

vo、dto、bo、do、po の概念を理解する Albertliuc のブログ

おすすめ

転載: blog.csdn.net/qq_20957669/article/details/130588911