panel = new Panel(backend);
你這樣做,在該例程類似
Public Sub Panel(ByVal BackEnd as BackEnd)
Me.MyBackEnd = BackEnd
BackEnd.MyPanel = Me
End Sub
你不需要BackEnd.SetPanel
最好是使用代理服務器。代理通過引發事件將一個對象鏈接到另一個對象。父母將孩子交給代理人。當孩子需要父母時,它會在代理上調用GetRef方法。然後,代理引發父母用來將自己返回給代理的事件,然後將代理交給孩子。
使用Event/Delegate機制避免了任何循環引用問題。
所以,你必須(假設後端是「父」在這裏)
Public Sub Panel(ByVal BackEnd as BackEnd)
Me.MyBackEnd = BackEnd.Proxy
BackEnd.MyPanel = Me
End Sub
Public Property MyBackEnd() as BackEnd
Set (ByVal Value as BackEnd)
priBackEndProxy = BackEnd.Proxy
End Set
Get
Return priBackEndProxy.GetRef
End Get
End Property
這裏是一個循環引用的問題更詳細的討論。雖然它專注於在Visual Basic 6.0中修復它。
Dynamic Memory Allocation
另外另一溶液聚集板和後端成另一個對象。如果兩個元素都是UI控件並且需要以協調方式運行,這很常見。
最後,就MVC而言,我推薦使用模型視圖展示器方法。
基本上你有你的表單實現一個IPanelForm接口。它向一個名爲Panel的類註冊自己,它完成所有的UI邏輯。 BackEnd應該具有面板可以在模型更改時掛鉤的事件。 Panel處理事件並通過IPanelForm接口更新表單。
用戶點擊一個按鈕
的形式傳遞到面板,該用戶點擊一個按鈕
面板處理按鈕並檢索從後端數據
面板格式數據。
面板使用IPanelForm接口在窗體上顯示數據。
您的後端/數據層不需要知道任何關於您的表示層。事實上,它應該沒有UI層的概念。讓它們像這樣耦合只會導致很多問題。 – 2008-12-16 16:00:31