0

我正在使用 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,使其仅在程序集中可见,即数据层,对客户端项目不可见。但这仍然感觉像是我在揭露班级的内部运作。

有更好的方法吗?

4

3 回答 3

3

我认为,简单的想法是在内部 ClassAAA创建一个公共更新方法,并让其他类按需调用它。这样您就不会暴露 的内部细节ClassAAA,但可以让其他人激活所需的功能。

于 2012-04-24T12:15:10.920 回答
2

如果一个ClassAAA隐藏和封装ClassBBB那么它ClassAAA应该有一个公共方法来内部更新ClassBBB外观设计模式是一个很好的例子,它以一种优雅而优雅的方式说明了您的问题的解决方案。

于 2012-04-24T12:18:44.243 回答
1

我认为您只需为 ClassBBB 成员创建一个 getter 或将更新方法设为类方法而不是静态的

于 2012-04-24T12:14:33.493 回答