在vb.net中找到正确的子类的最佳实践

时间:2015-06-01 16:54:38

标签: vb.net inheritance

我有一个抽象类Artifact和2个类Requirement and Feature,它们是Artifact的子元素。 这将是实现一个方法的最佳方法,其中输入是artifactID,输出将是Artifact的正确子类。

我的代码就是这个:

Public MustInherit Class Artifact
    Public ReadOnly ID As String

    Public Sub New(ID As String)
        Me.ID = ID
    End Sub

    Public Shared Function [New](ID As String) As Artifact
        If ID.StartsWith("FE_") Then
            Return New Feature(ID)
        ElseIf ID.StartsWith("RQ_") Then
            Return New Requirement(ID)
        Else
            Throw New InvalidArtifactIDException("ID does not match to a known Artifacttype")
        End If
    End Function

End Class

Public Class Feature
    Inherits Artifact

    Public Requirements As List(Of Requirement)

    Sub New(ByVal FeatureID As String)
        MyBase.New(FeatureID)
    End Sub
End Class

Public Class Requirement
    Inherits Artifact

    Public Name As String

    Sub New(ByVal ReqID As String)
        MyBase.New(ReqID)
    End Sub
End Class

我不知道该怎么想"覆盖" " New" -Keyword as methodname但它是我的第一个想法^^

感谢您的回复!

1 个答案:

答案 0 :(得分:2)

通常,基类(Artifact)甚至不应该知道派生类(Feature和Requirement)存在。 Artifact的构造函数应仅处理其自己的字段和属性的初始化,而派生类处理特定于那些的任何内容(参见"最少知识原则"以及相关原则here)。 / p>

正如@Tim所提到的,这将是Factory pattern的完美候选人。听起来你已经走上了正确的轨道 - 你可以将它实现为一个名为ArtifactFactory的新类,其中包含GetArtifact()方法(包含代码示例中[New]方法的逻辑),并可选择添加如果你也需要GetFeature()和GetRequirement()方法。

如果你有时间,请进一步阅读: