2013-09-11 4 views
0

Скажем, у меня есть объект передачи данных, как показано ниже:Один DTO на таблицу базы данных?

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 

End класса

Это является объектным представлением следующей таблицы:

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

Ваше предположение в отношении одного заказа на человека не кажется правильным. Это может быть правдой сейчас, но тот факт, что вы их разделили на две таблицы с одним-на-многие, означает, что вы разработали его, чтобы иметь несколько заказов на человека.

Я бы придерживаться отдельных классов, но если вы хотите получить все сразу, имеют сложные DTOs, как:

class PersonDTO 
    String Name 
    Integer Age 
    OrderDTO() Orders 

' or 

class OrderDTO 
    Integer OrderID 
    PersonDTO Person 
    DateTime OrderDate 

Вы должны были бы построить свой SQL соответственно, либо с помощью JOIN и или ORM, чтобы вернуть сложный объект в один запрос или просто сделать несколько запросов, но таким образом один DTO доставит вам все, что вам нужно, в то же время позволяя вам разделить их.

Я бы, вероятно, избежал сложностей обоих классов: у вас будет круговая ссылка, что сложно, когда вы сериализуете этот материал, поэтому я бы просто определил, какой из них будет более ценным.

+0

Что вы подразумеваете под: «сериализация stUff». Я полагаю, вы имеете в виду писать в БД? – w0051977

+0

Посредством сериализации я имею в виду преобразование данных в JSON или XML, что обычно происходит с DTO. Например, если вы использовали сложный PersonDTO, но не сложный OrderDTO, ваш JSON будет выглядеть как «{« Имя »:« Джон »,« Возраст »: 34», «Заказы»: [{«OrderID»: 1, OrderDate ":" 2013-05-01 "}, {" OrderID ": 2," OrderDate ":" 2013-06-01 "}]}'. Если вы использовали оба сложных класса, сериализованный ордер будет содержать всего человека , который содержит набор заказов и т. д. бесконечно, что отлично работает с .NET-ссылками, но не работает, когда вы конвертируете данные в обычный текст, например JSON. –

+0

Конечно, вы можете иметь дело с этим - библиотеки JSON могут иметь дело с рекурсия, но это просто лишняя вещь, о которой нужно беспокоиться, что я предпочитаю не делать, если вам это не нужно. –

Смежные вопросы