考虑这个班
WindowA
数据库
哪里
数据库
实现弱同步事件的选项有:
-
WindowA
将委托附加到上的自定义事件
数据库
,cusom事件逻辑检查调用线程的SynchronizationContext.Current,并将其存储,以便稍后在引发事件时,可以通过SynchronizationContext调用委托。或:
-
备选案文2:
工具
ProxyC
,作为
数据库
. 目标方法
实现同步和弱引用逻辑,并将调用转发给
WindowA
WindowA
可以被垃圾收集,但是
ProxyC
必须先将自身从所有事件中分离,然后才能对其进行垃圾收集。或:
-
备选案文3:
WindowA
SharpObservation
)在将代理附加到上的事件之前,使代理变弱并同步
.
即。:
DataB.PropertyChanged+=新的PropertyChangedEventHandler(WindowA.HandlePropertyChanged).Make软弱()
首先。。。选项1有什么优点吗?虽然它是实现弱引用和同步逻辑的方便地方,但它似乎打破了单一责任模式,迫使数据对象意识到同步和引用语义。
选项2看起来很好,很干净。我在各个方面都喜欢它,除了它需要额外的工作来创建一个额外的类来处理弱引用。即使如此,除非代理知道如何删除以其为目标的代理,否则会出现内存泄漏。
选项3允许代理自己承担同步和弱引用的责任,但有一个限制,即附加事件的代码必须调用实用程序方法。据我所知,大多数UI数据绑定技术不允许您控制数据绑定如何附加到上的事件
数据库
(因此选择1的alure)。
最大的问题是。。。
这里有适合所有人的款式吗?是否有一种比所有其他模式都好的单一模式?