0

私のN層アーキテクチャには、DTO(AddressResponseDTO)があり、20個のプロパティがあります。プレゼンテーション層が特定の検索操作に対する応答をビジネス層に要求(AddressRequestContext)すると、このDTO(AddressResponseDTO)をPLに送信します。

しかし、これは常に当てはまるわけではありません。住所検索リクエストは変更されます。送信する必要があるのは3つのプロパティ(City、Zip、address Countなど)だけで、5つになることもあります。したがって、20のプロパティを持つ同じDTOを使用して、あらゆる種類の検索を再利用できます。リクエスト。

4

3 に答える 3

2

20個のプロパティを持つDTOを作成しても害はありません。

ただし、プロパティをグループ化できる場合は、City、Zipを住所にグループ化できるように、関連するプロパティをエンティティにグループ化することをお勧めします。

于 2012-06-08T09:51:14.917 に答える
2

OPは、プロパティのうち3つだけが使用される場合があると述べているため、いくつかの解決策があります。

  • すべてのプロパティを使用してDTOを作成し、特定されていないプロパティを示すために特別な値を指定します(つまり、nullableまたは特別な値を使用します)。これには、コードで多くのチェックが必要です。

  • 3つのプロパティを使用してDTOを作成します。これから2番目のDTOを継承し、残りのすべてのプロパティを追加します。メソッドは基本クラスをパラメーターとして受け取り、基本クラスまたは派生クラスが受け取られているかどうかを確認できます。のような簡単なチェックif (myDto is DtoBase) ...で、DTOで送信されたプロパティがすぐにわかります。(これは、継承されたDTOの階層で、プロパティの数を増やす場合にのみ機能します)

  • 関心のあるプロパティの可能なグループが複数ある場合は、グループごとにDTOクラスを使用できます。

    • このDTOをメンバーとして持つクラスを作成します。それらが必要ない場合は、nullのままにします。このようにして、簡単な方法で各グループを確認できますif (containerDto.Dto1 != null)
    • ケースごとに必要な数のDTOパラメーターを定義します。

「特別な価値」の方法は、より多くのコードを必要とし、エラーが発生しやすいため、好きではありません。さらに、多くの場合、必要以上の情報を(逆)シリアル化できます。

于 2012-06-08T10:17:54.647 に答える
1

はい、できます。空のプロパティまたはデフォルトのプロパティがそのような場合に気にならない場合は可能です。理論的には、すべての場合に1つのクラスを使用することを妨げるものは何もありません。

または、さまざまなユースケースに合わせて、いくつかのDTOクラス定義を作成できます。この場合、これらのクラス間でクラス階層を使用することをお勧めします。

どちらを使用するかは、あなたとユースケースの複雑さ次第だと思います。

于 2012-06-08T09:51:00.150 に答える