web-dev-qa-db-ja.com

Javaデータ転送オブジェクトの命名規則?

クライアントライブラリからAPIに渡される「オブジェクトを転送する」(ゲッター/セッターだけの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です。それらは異なるパッケージにありますが、同じ名前を持っていると混乱していると思います。転送オブジェクトに名前を付ける方法に関するベストプラクティスはありますか?

42
Marcus Leon

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

31
IaCoder

[〜#〜] d [〜#〜]ata[〜#〜] t [ 〜#〜]ransfer[〜#〜] o [〜#〜]bject クラスは後に続く必要があります 名前規則Java言語仕様 で定義されています:

クラスタイプの名前は、大文字と小文字を区別せず、大文字と小文字を区別して、説明的な名詞または名詞句にする必要があります。

ClassLoader
SecurityManager
Thread
Dictionary
BufferedInputStream

[...]


クラス名の末尾に[〜#〜] dto [〜#〜]またはDtoはあまり意味がなく、クラス自体についてはあまり語りません。クラスの目的を説明する名前の使用を検討してください。

使用できる名前の候補の完全なリストは次のとおりです。

  • SomeSortOfCommand
  • SomeSortOf構成
  • SomeSortOfクレデンシャル
  • SomeSortOf詳細
  • SomeSortOfElement
  • SomeSortOfEvent
  • SomeSortOfヘッダー
  • SomeSortOf入力
  • SomeSortOf命令
  • SomeSortOfアイテム
  • SomeSortOfメッセージ
  • SomeSortOfメタデータ
  • SomeSortOfOperation
  • SomeSortOf出力
  • SomeSortOfペイロード
  • SomeSortOfProjection
  • SomeSortOfQueryParameter
  • SomeSortOfQueryResult
  • SomeSortOf表現
  • SomeSortOfリクエスト
  • SomeSortOfリソース
  • SomeSortOf応答
  • SomeSortOf結果
  • SomeSortOfRow
  • SomeSortOf設定
  • SomeSortOf仕様
  • SomeSortOfステータス
  • SomeSortOf概要

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

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

150
cassiomolin

DTOやDAOなどを追加すると、DRYに違反します。 FQNは、特に同じものであれば特に問題ありません。

5
Jim Barrows

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

または、クラス名のWordオブジェクトを気にしない場合は、CarDto(車のデータ転送オブジェクト)のようなものを選びます

2
Perpetualcoder