继承 - 子类中的变量初始化

时间:2013-04-02 19:22:32

标签: vb.net design-patterns

基于我在大学学习的“最佳实践”类型课程,我倾向于赞成作文而不是继承。我正在查看应用程序中的一些代码,如下所示:

Public Class A
    Protected _Name As String
    Public Property Name() As String
        Get
            Return _Name
        End Get
        Set(ByVal value As String)
            _Name = value
        End Set
    End Property
End Class

Public Class B
    Inherits A
End Class

Public Class C
    Inherits B
End Class

Public Class D
    Inherits C

    Public Sub SomeMethod()
       'This isn't good
       Name = "Ian"
    End Sub

    Public Shared Sub Main()
        Dim d As New D
        d.SomeMethod()
    End Sub

End Class

在上面的示例中:D类正在使用A类中的公共属性。之前的开发人员在D类名称的初始化之上写了“这不好”。我相信他写这篇评论的原因是由于业务规则而不是他在D类中分配了a.Name的值这一事实。但是,我想检查上面的代码是否有任何问题。 a.Name由所有子类共享。类B,C和D包含许多重载方法,所以我认为在这种情况下继承是正确的设计选择。

我希望前一位开发人员留下更多文档。

1 个答案:

答案 0 :(得分:1)

如果不会破坏父类型的预期行为(参见Liskov substitution principle),那么在派生类中为父属性赋值是没有什么不妥。您的示例中的类型D仍然可以被视为类A.如果更改Name属性不是A类的禁止行为(我认为不是,因为该属性有一个setter),那么赋值可能不是问题

上一位开发人员在评论中提到的问题可能是直接从数据层获取值而不是从业务层获取值?

相关问题