过去我在WPF / Windows窗体等中编写了几个具有很多字段的复杂屏幕并且这些字段彼此连接的项目(它们的值依赖于相关逻辑).
这些项目在实施后已经采取了,我发现很多事件/数据绑定地狱 – 我的意思是,因为所有这些领域都取决于他们实现了INotifyPropertyChanged,而其他字段正在被修改为结果.这导致相同的字段被更新5-6次,当屏幕加载和字段填充的顺序导致可怕的错误. (例如,日期是在作业类型之前设置的,而不是在作业类型之后设置,所以我最终得到不同的作业费用.)
更糟糕的是,在UI事件上实现了一些黑客(例如,DropDown更改为更新字段X),而其他的则在UI绑定到的域模型中.
基本上,这是一个巨大的混乱,我只是想知道什么最好的方式来实现这样的是如果我从头开始.还是首先避免这样复杂的屏幕是个好主意?
解决方法
首先,如果一个计算需要几个属性,我会写一个进行计算的方法,并在适当的时候调用该方法.例如.如果属性值的所有不同组合都有意义,可以调用每个属性的setter中的方法,确保在其中一个属性发生更改时运行相同的代码.如果您只能评估属性值的特殊组合,则可以实现命令,让用户决定何时计算结果更改,或者您可以通过验证提供反馈,并且只有在组合有效时才评估属性更改.如果有几个相互依赖的属性,我经常使用一个“ChangeInitiator”变量来指示什么属性已经改变,所以在计算方法中很清楚哪个属性是负责更改的,哪些属性应该改变.基本上,这与在每个属性设置器中进行一部分计算相同,但是我发现如果关系的不同部分都在一个方法中,那么它可以帮助我保持对事物的概述.
在一个程序中,我写了一次,我有一些计算在周期性的后台线程运行,所以我只需要设置一个标志,只要一个数据被改变需要一个新的计算,并且每秒钟做基于定时器的所有更新…也可以帮助您更直观地获取逻辑,并避免对一组相关更改进行多次计算运行.
关于变更通知,我真的只尝试使用它来进行UI数据绑定.