我正在使用VB.NET,但是此问题适用于任何OO语言-Java,C#等。我已经用Java和C#标记了该问题,但是如果认为不合适,则将其删除。

我有一个实体类ClassAAA,其中包含对ClassBBB的引用作为其属性之一:

Public Class ClassAAA

    Private Property _blah As ClassBBB = Nothing
    Private Property _somethingElse As String
    Private Property _anotherthing As String

    ' Make it private so cannot instantiate class without supplying ClassBBB '
    Private Sub New()
    End Sub

    Public Sub New(ByRef value As ClassBBB)
        _blah = value
    End Sub

    Public Property ImportantAttribute As String
        Get
            Return _blah.Imp
        End Get
        Set(ByVal value As String)
            _blah.Imp = value
        End Set
     End Property

      ' other stuff '
End Class


我不想在实体类之外公开ClassBBB。这是我的问题:我想对ClassAAA进行更新,并且我想使用ClassBBB的静态/共享更新方法。最好的方法是什么?

Public Shared Sub UpdateClassAAA(byRef value as ClassAAA)

   ' XXX Cannot do this because ClassBBB reference is private XXX '
    ClassBBBDAO.update(value._blah)

    ' Do other updates on other ClassAAA attributes '

End Sub


我可以将ClassBBB引用公开(或提供一个公共的getter方法),但这将暴露ClassAAA的内部工作原理。

我正在考虑做的是使ClassBBB引用Friend使其仅在程序集中即数据层中可见,而对客户项目不可见。但这仍然让我觉得自己正在暴露课堂的内部运作方式。

有更好的方法吗?

最佳答案

如果ClassAAA隐藏并封装ClassBBB,则ClassAAA应该具有公共方法来内部更新ClassBBBfacade设计模式是一个很好的示例,它以优美而优雅的方式说明了您的问题的解决方案。

09-13 04:35