在MVVM控制器中不存在物理?这是否违反了关注分离原则?

时间:2011-04-10 13:17:29

标签: wpf silverlight architecture frameworks

我看不到它

http://msdn.microsoft.com/en-us/library/gg405484(v=pandp.40).aspx

如果控制器与视图模型混合,您希望如何分离关注点?控制器不仅仅是数据绑定,还有命令。

我的意思是如果MVVM也具有控制器的责任,那么这种设计违反了关注点分离的原则。保持视图的状态和编排View和Model的逻辑显然是两个应该分开的大任务,这就是MVC背后的原因

那么如果我想拥有一个单独的控制器怎么办呢:WPF和silverlight会让GUI首先加载而不允许隐藏类首先像控制器一样加载然后管理视图和模型?

1 个答案:

答案 0 :(得分:1)

你是不是在关注MVC模式而不是在关注角度分离中看这个?我看到它的方式,你的问题将MVVM与MVC进行比较。

MVVM有不同的方法:View-First,ViewModel first和Marriage类型。我是婚姻类型,你可以拥有另一个将View和ViewModel结合在一起的类。所述类首先加载,然后实现View和ViewModel,然后两者结合。

public class SomeScreen : ScreenBase, IScreen
    {
        [Import(typeof(ISomeViewModel))]
        public IViewModel ViewModel
        {
            get { return this.GetPropertyValue(ApplicationProperties.ViewModel); }
            set {
                this.SetPropertyValue(ApplicationProperties.ViewModel, value);
                RaisePropertyChanged(ApplicationProperties.ViewModel);
            }
        }

        #region Constructor
        public MainScreen()
        {
            CompositionInitializer.SatisfyImports(this);
        }
        #endregion

        #region Methods
        public override IView GetViewToDisplay()
        {
            IView view = new MainView();
            //Or maybe have a mechanism here based on settings which view to pair up with this.
            view.ViewModel = this.ViewModel;
            this.ViewModel.View = view;
            return view;
        }
        #endregion
    }

通过这个例子,由于接口的原因,它们之间会完全分离并且没有依赖关系,你也可以在屏幕/控制器上添加很多功能。