我正在编写PRISM/MVVM/WPF应用程序.它是一个LOB应用程序,因此存在许多复杂的规则.我注意到View Model开始变得臃肿.有两个主要问题.
一个是为了维护MVVM,我做了很多让我感觉很烦的事情就像在我的VM中添加一堆属性一样.视图绑定到这些属性以跟踪视图特定信息的感觉.例如,布尔值跟踪VM中长时间运行的进程的状态,因此视图可以在长时间运行的进程工作时禁用其某些控件.我已经读过这个问题可以用Attached Behaviors解决.我会更多地了解这一点.在网上看到的示例MVVM应用程序中,这并不是什么大问题,因为它们过于简化了.
另一个问题是我的VM中的命令数量.现在有四个命令.我使用Josh Smith的RelayCommand(基本上是PRISM中的DelegateCommand)在VM中定义命令,因此所有业务逻辑都存在于VM中.我考虑将每个命令移动到单独的工作单元中.我不确定最好的方法.
您使用哪种模式来保持VM清洁?我已经可以感觉有人回答"你的观点和虚拟机太复杂,你应该将它们分解成许多视图/虚拟机".从Ux的角度来看,它肯定不是太复杂 - 有2个按钮,一个组合框和一个列表框.此外,从逻辑的角度来看,它是一个有凝聚力的领域.话虽如此,我很想知道其他人是如何处理这类问题的.
感谢您的输入.
我感受到你的痛苦。在开发 MVVM 应用程序时,我经常遇到此类问题。有一天,我会发布一份问题清单,以获取像您一样的其他人的意见。
我倾向于非常担心 ViewModel 基类中的“膨胀”,但在具体的 ViewModel 子类中则不太担心。通常很容易将 2-3 个 ViewModel 使用的依赖项放入基类中,但应该避免这样做。
虽然我不能假设知道你对臃肿的想法是什么,但我可以说我不认为在虚拟机中处理“繁忙”属性或命令是不好的。您可能需要考虑的一件事是 ViewModel 是否可以同时忙于执行多件事。如果是这样,您可能需要继续思考如何打破它。虽然我个人没有在实践中见过它,但您可能可以将单个、内聚的视图和几个 ViewModel 绑定到它。
如果您的命令很长,或者它们可以在不同的目标上执行,我认为使命令自动执行单元是一个好主意。但最好与这种方法保持一致,以避免让以后使用它的任何人感到困惑。例如,如果您有一个大约有 10 行代码的 SaveCustomerCommand 类,您可能不想将 RelayCommand 用于其他所有内容。
如果这类东西有硬性和快速的规则,那就太好了,但我认为框架和模式目前仍处于进化阶段。
| 归档时间: |
|
| 查看次数: |
1318 次 |
| 最近记录: |