每个数据库表一个DTO?

时间:2013-09-11 19:28:51

标签: vb.net design-patterns

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

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?

1 个答案:

答案 0 :(得分:1)

您对每人一个订单的假设似乎并不合适。现在可能是真的,但事实上你已经将它们分成两个一对多的表,这意味着你已经设计了它,这样你就可以为每个人提供多个订单。

我会坚持使用单独的课程,但如果你想一次性完成所有课程,请使用复杂的DTO,例如:

class PersonDTO
  String Name
  Integer Age
  OrderDTO() Orders

' or

class OrderDTO
  Integer OrderID
  PersonDTO Person
  DateTime OrderDate

您必须相应地构建SQL,使用JOIN或ORM在单个查询中返回复杂对象,或者只进行多个查询,但这样一个DTO就能为您提供所需的一切,同时仍允许你将它们分开。

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