2012-04-24 68 views
0

我使用VB.NET,但這個問題適用於任何OO語言 - Java,C#等。我用Java和C#標記了這個問題,但是如果認爲不合適,將會刪除。更新包裝對象的最佳方法

我有一個包含它的屬性之一ClassBBB參考實體類ClassAAA

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,以便它只在組件中可見,即數據層,並且對客戶端項目不可見。但這仍然讓我覺得我正在揭露班級的內部運作。

有沒有更好的方法呢?

回答

2

如果ClassAAA皮和封裝ClassBBB那麼ClassAAA應該有一個公共的方法來內部更新ClassBBBfacade設計模式是一個很好的例子,它以一種漂亮而優雅的方式來說明您的問題的解決方案。

+0

是的,你猜對了 - 我將不得不從共享/靜態CRUD方法轉移到實體類本身。 – CodeClimber 2012-04-26 08:35:32

1

我想你只需要做出ClassBBB成員getter或進行更新方法的類方法,而不是靜態的

+0

感謝您的回覆 – CodeClimber 2012-04-26 08:36:33

3

我認爲,簡單的想法是做一個公開的更新方法ClassAAA,並讓其他類按需求調用它。這樣您就不會暴露ClassAAA的內部細節,但可以讓其他人激活所需的功能。

+0

是的,有道理,謝謝你的回覆 – CodeClimber 2012-04-26 08:35:59

相關問題