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