1

请查看我在这里提出的问题中的代码: 数据访问层返回 DataTable

我有数据传输对象来表示持久实体。例如,假设我在数据库中有一个名为 Customer 的表和一个名为 Order 的表:

CREATE TABLE Customer (ID int, Name VARCHAR(100), Primary Key (ID)) CREATE TABLE Order (ID int, Name VARCHAR(100), Primary Key (ID))

假设我想从数据库中检索链接到客户的所有订单。我可以看到两个选项:

1) 具有如下组合客户和订单的类型(注意订单数组):

Public Class CustomerOrder
    Private _CustomerID As Integer
    Private _Name As String
    Private _OrderID() As Integer

    Public Property CustomerID() As Integer
        Get
            Return _CustomerID
        End Get
        Set(ByVal value As Integer)
            _CustomerID = value
        End Set
    End Property

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

    Public Property OrderID() As Integer()
        Get
            Return _OrderID
        End Get
        Set(ByVal value As Integer())
            _OrderID = value
        End Set
    End Property

End Class

2) 返回一个客户对象和一个订单对象列表。Customer 和 Order 会有自己的类型。

我相信选项 1 更好,但是如果类型应该只针对一个数据库表,我会徘徊。

4

1 回答 1

1

这是一个品味问题,以及你想使用什么设计模式。我在我的项目中使用了这两个选项。我可以建议您将您的Orders属性创建为一个generic list(或IEnumerableOrder对象,不要初始化它(null),并将其设为只读,这样如果您不必使用它,您就不会浪费内存和处理时间你不会使用的东西。然后当它被访问时,你可以简单地在那里填写。

Private _OrderID As Integer()
Public ReadOnly Property OrderID() As Integer()
    Get
        If (_OrderID Is Nothing Or _OrderID.Length = 0) Then
            GetOrders(_CustomerID)
        End If
        Return _OrderID
    End Get
End Property

同样,我相信在这种特定情况下,最适合您的将是最佳选择。如果您只需要 ID,请使用您的整数数组,如果您需要访问订单的其他属性,请使用数组、对象、linq 或任何更适合您的方式。

于 2013-03-21T21:17:36.700 回答