74

クライアント ライブラリから API に渡される「転送オブジェクト」(getter/setter のみの POJO) があるこのシナリオを考えると、転送オブジェクトに名前を付ける最良の方法は何ですか?

package com.x.core; 

public class Car {
        private String make;
        private String model;

        public Car(com.x.clientapi.Car car) {
             this.make = car.getMake();
             this.model = car.getModel();
        }
}

この例では、メイン クラスと転送オブジェクトの両方の名前がCar. 違うパッケージに入っていますが、同じ名前だと紛らわしいと思います。転送オブジェクトに名前を付ける方法に関するベスト プラクティスはありますか?

4

6 に答える 6

230

データ転送オブジェクトクラスは、 Java 言語仕様定義されている命名規則に従う必要があります。

クラス タイプの名前は、説明的な名詞または名詞句にする必要があります。長すぎないようにし、各単語の最初の文字を大文字にします。

ClassLoader
SecurityManager
Thread
Dictionary
BufferedInputStream

[...]


クラス名の末尾にDTOまたはDtoを付けることは、あまり意味がなく、クラス自体が何を表しているかをあまり伝えません。そのため、クラスの目的を説明する名前を使用する方がよい場合があります。

以下は、使用できる名前候補の非網羅的なリストです。

  • SomeSortOfコマンド
  • SomeSortOf構成
  • いくつかの資格情報
  • 詳細の一部
  • SomeSortOf要素
  • SomeSortOfイベント
  • SomeSortOfフィルター
  • SomeSortOfヘッダー
  • SomeSortOf入力
  • SomeSortOf命令
  • SomeSortOfアイテム
  • SomeSortOfメッセージ
  • SomeSortOfメタデータ
  • SomeSortOf操作
  • SomeSortOf出力
  • SomeSortOfペイロード
  • SomeSortOfプロジェクション
  • SomeSortOfプロパティ
  • SomeSortOf QueryParameter
  • SomeSortOf QueryResult
  • SomeSortOf表現
  • SomeSortOfリクエスト
  • SomeSortOfリソース
  • SomeSortOfレスポンス
  • SomeSortOf Result
  • SomeSortOf
  • いくつかの設定
  • SomeSortOf仕様
  • SomeSortOfステータス
  • いくつかの要約

注 1:頭字語またはすべて大文字の単語を単語として扱うかどうかは、あなた次第だと思います。Java APIを確認すると、 ZipInputStream/のようなつまずきが見つかりますGZIPInputStream。両方のクラスが同じパッケージに含まれており、命名規則に一貫性がありません。HttpURLConnection頭字語との一貫性も示していません。

注 2:上記の名前の一部は、 Richard Dingwallによって書かれたこの記事から借用したものです(元の記事はもう入手できないようなので、ここに Web アーカイブからキャッシュされたコピーがあります)。

于 2016-02-11T14:14:09.100 に答える
50

通常、クラス名の最後に「DTO」を追加し、すべての DTO を独自のパッケージに配置します。あなたの例では、com.x.core.dto.CarDTO と呼びます。

于 2009-11-12T19:36:46.967 に答える
7

DTOやDAOなどを追加すると、DRYに違反します。FQNは、特にそれらが本当に同じものである場合は、完全に問題ありません。

于 2009-11-12T19:50:15.567 に答える
0

この種の動作を示すクラスのベスト プラクティスや規則があるとは思いません。私は個人的に、クラス名のオブジェクトという言葉が好きではありません。Poko.Car のような修飾を使用するか、Car (POJO の場合) CarDa (データ アクセスの場合) CarBiz (ビジネス ドメイン クラスの場合) のような命名規則を使用できます。

または、クラス名のオブジェクトという単語を気にしない場合は、CarDto (Car Data Transfer Object) のようなものを使用してください。

于 2009-11-12T19:37:07.323 に答える
-2

使用している他のコード規則の中で適切な規則を使用してください。私は個人的に "TO" という接尾辞を使用しています (たとえば、Customer ドメイン クラスに関連付けられたデータ転送オブジェクトは CustomerTO という名前です)。また、パッケージ構造は、クラスの各タイプ (so.foo.domain.Customer および so.foo.transport.CustomerTO) の意図を伝える必要があります。

于 2009-11-12T19:40:49.937 に答える