0

假设我有一个如下所示的数据传输对象:

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)

我相信我可以简单地向数据传输对象添加另外两个实例变量和属性(假设每人总是最多一个订单)。这是可取的还是每个数据库表都应该有一个 DTO?

4

1 回答 1

1

您对每人一份订单的假设似乎并不正确。现在可能是真的,但是您将它们分成两个具有一对多的表的事实意味着您已经设计了它,以便每个人可以有多个订单。

我会坚持使用单独的课程,但是如果您想一次获得所有内容,请使用复杂的 DTO,例如:

class PersonDTO
  String Name
  Integer Age
  OrderDTO() Orders

' or

class OrderDTO
  Integer OrderID
  PersonDTO Person
  DateTime OrderDate

您必须相应地构建您的 SQL,或者使用 JOIN 或 ORM 在单个查询中获取复杂对象,或者只是进行多个查询,但是这样一个 DTO 可以为您提供所需的一切,同时仍然允许您让他们分开。

我可能会避免让这两个类都变得复杂 - 你会有一个循环引用,当你序列化这些东西时这很棘手,所以我只是确定哪个更有价值。

于 2013-09-11T19:33:30.040 回答