假设我有一个如下所示的数据传输对象:
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?
答案 0 :(得分:1)
您对每人一个订单的假设似乎并不合适。现在可能是真的,但事实上你已经将它们分成两个一对多的表,这意味着你已经设计了它,这样你就可以为每个人提供多个订单。
我会坚持使用单独的课程,但如果你想一次性完成所有课程,请使用复杂的DTO,例如:
class PersonDTO
String Name
Integer Age
OrderDTO() Orders
' or
class OrderDTO
Integer OrderID
PersonDTO Person
DateTime OrderDate
您必须相应地构建SQL,使用JOIN或ORM在单个查询中返回复杂对象,或者只进行多个查询,但这样一个DTO就能为您提供所需的一切,同时仍允许你将它们分开。
我可能会避免让两个类都变得复杂 - 你有一个循环引用,当你序列化这些东西时这很棘手,所以我只想确定哪一个更有价值。