【发布时间】:2012-04-24 11:58:23
【问题描述】:
我使用的是 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 以便它仅在程序集中可见,即数据层,对客户端项目不可见。但这仍然感觉像是我在揭露班级的内部运作。
有更好的方法吗?
【问题讨论】:
标签: c# java vb.net oop design-patterns