C# 准备耦合性差且必须以某种方式相互作用的ViewModel的最佳实践是什么

C# 准备耦合性差且必须以某种方式相互作用的ViewModel的最佳实践是什么,c#,wpf,mvvm,C#,Wpf,Mvvm,用例: 假设有一个以WPF+MVVM方式构建的工具 说到它的外观,可以将它与VisualStudioIDE或其他IDE进行比较 它包含两个可固定的工具 它包含菜单操作和一些附加的页脚信息,这些信息可以根据不同的操作进行更改,例如,当项目成功加载时 如果使用加载另一个项目,则应在不同视图上重新加载一些数据 我想知道如何实现良好的关注点分离,同时实现模块、视图模型之间的交互 建议的已知解决方案: 所有东西都可以组合在一个核心的MainViewModel中——不幸的是,它并没有给出concrns

用例:

  • 假设有一个以WPF+MVVM方式构建的工具
  • 说到它的外观,可以将它与VisualStudioIDE或其他IDE进行比较
  • 它包含两个可固定的工具
  • 它包含菜单操作和一些附加的页脚信息,这些信息可以根据不同的操作进行更改,例如,当项目成功加载时
  • 如果使用加载另一个项目,则应在不同视图上重新加载一些数据
  • 我想知道如何实现良好的关注点分离,同时实现模块、视图模型之间的交互
建议的已知解决方案:

  • 所有东西都可以组合在一个核心的MainViewModel中——不幸的是,它并没有给出concrns的分离,代码也不干净,可以与God对象反模式相比较
  • 另一种选择是使用Messenger或EventAggregator,例如嵌入MVVM light toolkit中的Messenger之类的东西,但根据我的经验,这并不是最好的解决方案
  • 我曾考虑过Prism框架,但也许它有点过头了
  • 另一个选择是将模块划分为功能视图模型,其中一些模块应该注入到另一个模块中,但这并不容易实现
你知道什么好的建议吗

目标:

  • 关注点分离
  • 每个视图模型的单一功能职责
  • 可测试性

我过去曾用于视图模型之间的交互。它基本上允许您有许多“同事”(视图模型),他们对信息和更改感兴趣,并可以通过中介相互提醒。

Messenger作为中介模式实现是一个不错的选择。在Xamarin中使用这种方式,效果非常好