【发布时间】:2013-10-25 13:52:21
【问题描述】:
我只是在学习 MVVM,我正在尝试研究如何显示计算属性的更改,因为计算属性的值发生了变化。到目前为止我看到的所有解决方案都严重违反封装,我想知道是否有更好的解决方案。
假设我需要显示的一件事是复杂税收计算的结果。计算(可能还有它的依赖关系)会不时改变,所以我想严格封装。
这里最常提供的解决方案似乎是获取税值所依赖的所有属性,以在 ModelView 中为属性本身调用 PropertyChanged以及依赖于它的每个属性。这意味着每个属性都需要知道使用或可能使用它的所有内容。当我的税收规则发生变化,使得计算依赖于它以前不依赖的事物时,我需要触及所有那些进入我的计算的新属性(可能在其他类别中,可能不在我的控制之下),以让他们为税值调用 PropertyChanged。这完全破坏了封装的任何希望。
我能想到的最佳解决方案是让进行计算的类接收 PropertyChanged 事件,并在计算中发生任何变化时为税值引发一个新的 PropertyChanged 事件。这至少保留了 class 级别的封装,但它仍然违反 method 封装:类不必知道方法如何工作。
所以,我的问题是,有没有更好的方法(如果有,它是什么)?或者表示封装(MVVM)会阻止业务逻辑的封装?我面临一个非此即彼的选择吗?
【问题讨论】:
-
我不知道这里有“正确/错误”的答案。此外,ViewModel 中的封装是否存在很大问题?无论您如何处理,VM 仍处于封装状态,并且从 View 的角度来看是一个“黑匣子”。
-
我对封装的担忧是对可扩展性的担忧。我真的在考虑具有复杂 UI 和多个 ViewModel 的情况。