0

以下のような Data Transfer オブジェクトがあるとします。

Public Class Person
Private _Name As String
Private _Age As Integer

Public Property Name() As String
    Get
        Return _Name
    End Get
    Set(ByVal value As String)
        _Name = value
    End Set
End Property

Public Property Age() As Integer
    Get
        Return _Age
    End Get
    Set(ByVal value As Integer)
        _Age = value
    End Set
End Property

クラス終了

これは、次のテーブルのオブジェクト表現です。

CREATE TABLE Person (PersonID int identity primary key, Name varchar(30), age int)

次のように、データベースに注文テーブルを作成したいとします。

CREATE TABLE Order (OrderID int identity primary key, PersonID FOREIGN KEY references Person(ID), OrderDate datetime)

2 つのインスタンス変数とプロパティをデータ転送オブジェクトに追加するだけでよいと思います (1 人あたりの注文は常に最大 1 つと仮定します)。これは望ましいことですか、それともデータベース テーブルごとに常に 1 つの DTO を使用する必要がありますか?

4

1 に答える 1

1

1 人 1 オーダーというあなたの仮定は、実際には正しくないようです。今ではそうかもしれませんが、1対多で2つのテーブルに分けているということは、1人で複数の注文ができるように設計されているということです。

私は別々のクラスに固執しますが、一度にすべてを取得したい場合は、次のような複雑な DTO を使用します。

class PersonDTO
  String Name
  Integer Age
  OrderDTO() Orders

' or

class OrderDTO
  Integer OrderID
  PersonDTO Person
  DateTime OrderDate

JOINまたはORMを使用して複雑なオブジェクトを単一のクエリで取得するか、単に複数のクエリを作成するかのいずれかで、それに応じてSQLを構築する必要がありますが、この方法では、単一のDTOで必要なものすべてを取得できます。それらを別々に保つために。

おそらく、両方のクラスが複雑になることは避けたいと思います。このようなものをシリアル化するときに注意が必要な循環参照があるため、どちらがより価値があるかを判断するだけです。

于 2013-09-11T19:33:30.040 に答える