1

私がここで尋ねた質問のコードを見てください: 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))

データベースから顧客にリンクされたすべての注文を取得したいとします。2 つのオプションが表示されます。

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 の方が優れていると思いますが、型が 1 つのデータベース テーブルのみを対象とすべきかどうか迷っています。

4

1 に答える 1

1

それは好みの問題であり、どのデザイン パターンを使用したいかです。私は自分のプロジェクトで両方のオプションを使用しました。Ordersプロパティをオブジェクトのgeneric list(またはIEnumerable)オブジェクトとして作成し、初期化 (null) せず、読み取り専用にすることをお勧めします。これにより、プロパティOrderを使用する必要がなければ、メモリと処理時間を浪費しません。使用しないもの。そして、それがアクセスされているときは、そこに記入するだけです。

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 に答える