0

根据我在大学所学的“最佳实践”类型课程,我倾向于尽可能地支持组合而不是继承。我正在查看应用程序中的一些代码,如下所示:

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 类中的 name 的初始化上面写了“这不好”。我相信他写这个评论的原因是由于业务规则,而不是他在 D 类中分配了 a.Name 的值这一事实。但是,我想检查上面的代码是否有任何问题。a.Name 由所有子类共享。B、C 和 D 类包含许多重载方法,所以我相信在这种情况下继承是正确的设计选择。

我希望以前的开发人员留下更多的文档。

4

1 回答 1

1

如果不破坏父类型的预期行为,那么在派生类中为父属性赋值并没有什么不好(参见Liskov 替换原则)。您示例中的类型 D 仍然可以视为 A 类。如果更改 Name 属性不是 A 类的禁止行为(我相信不是,因为该属性有一个设置器),那么分配可能不是问题。

也许之前的开发人员在他的评论中解决的问题是直接从数据层而不是从业务层获取值?

于 2013-04-03T10:16:38.673 回答