更新包装对象的最佳方法

时间:2012-04-24 11:58:24

标签: c# java vb.net oop design-patterns

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

有更好的方法吗?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

如果ClassAAA隐藏并封装ClassBBB,则ClassAAA应该有内部更新ClassBBB的公共方法。 facade设计模式是一个很好的例子,可以很好,更优雅的方式解决您的问题。

答案 2 :(得分:1)

我认为你只需要为ClassBBB成员制作一个getter或者使update方法成为一个类方法而不是静态