0

次のようなデータベース構造があるとします。

create table Product(id int not null identity,Name varchar(30))
INSERT INTO Product VALUES ('ProductA')
INSERT INTO Product VALUES ('ProductB')

そして、このようなクラス構造:

    Imports System.Data.SqlClient

Public Class Product

    Protected ProductName As String

    Public Overridable Sub Display()

    End Sub

End Class

Public Class ProductA
    Inherits Product

    Public Sub New(ByVal product As String)
        ProductName = product
    End Sub

    Public Overrides Sub Display()
        'Specific logic to display product A
    End Sub

End Class

Public Class ProductB
    Inherits Product

    Public Sub New(ByVal product As String)
        ProductName = product
    End Sub

    Public Overrides Sub Display()
        'Specific logic to display product B
    End Sub

End Class

Public Class Form1

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim p1 As Product
        Dim p2 As Product

        p1 = New ProductA("ProductA")
        p2 = New ProductB("ProductB")
        p1.Display()
        p2.Display()
    End Sub
End Class

クラスがどの製品に関連するかを識別するプロパティ (製品) があります。これは私には正しく見えません。それをモデル化するより良い方法はありますか?これは Discriminator の NHibernate の概念に似ています (この場合、NHibernate は使用していません)。

4

1 に答える 1

0

最新の変更では、コンストラクターを基本クラスに移動する必要があります。それを除けば、デザインは素晴らしいです。

Public Class Product

    Protected ProductName As String

    Public Sub New(ByVal product As String)
        ProductName = product
    End Sub

    Public Overridable Sub Display()

    End Sub

End Class

Public Class ProductA
    Inherits Product

    Public Overrides Sub Display()
        'Specific logic to display product A
    End Sub

End Class

また、宣言では、継承されたクラスを使用できます。

Dim p1 As ProductA
Dim p2 As ProductB
于 2013-02-11T21:23:03.767 に答える