数据访问层 - 包含两个实体的返回类型

时间:2013-03-21 21:06:03

标签: vb.net

请查看我在此处提出的问题中的代码:Data Access Layer returns 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)具有如下组合Customers和Orders的类型(注意Order数组):

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)返回一个客户对象和一个订单对象列表。客户和订单将有自己的类型。

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

1 个答案:

答案 0 :(得分:1)

这是一个品味的问题,以及你想要使用的设计模式。我在我的项目中使用了这两个选项。我建议您将Orders属性创建为generic list(或IEnumerableOrderPrivate _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 个对象,不要初始化它(null),并将其设为只读,所以如果你不必使用它,你不会浪费你不会使用的内存和处理时间。然后,当它被访问时,你可以直接填写它。

{{1}}

同样,我相信在这个具体情况下,任何最适合你的方案都是最好的选择。如果您只需要ID,请使用整数数组,如果您需要访问订单的其他属性,请使用数组,对象,linq或其他适合您的方法。