最近想写一个基于wpf的客户端,想采用MEF插件的模式开发各个界面插件。界面的插件采用MVVM框架搭建。
先说一下MVVM,这里我有一点非常疑惑,M表示module,V表示view VM表示界面的数据绑定。但是实际开发中,我感觉module的作用好小。我可以直接在VM中处理这些工作啊,比如界面的消息处理,可以在VM里面处理,外部传递过来的数据,也可以在VM里面处理,为什么要Module呢?
这里我谈一下自己的想法,我觉得VM确实可以做M的所有工作,但是会使得VM的代码量变大,其实M可以理解为把大量逻辑代码从VM中抽取出来,这样整个结构变得更加简洁。这是我的理解。
然后就是这3个类直接如何管理?
我计划这么干,View类管理VM类,VM类管理M类
public partial class AControl_View : UserControl
{
public AControl_Vm AControl_Vm
{
get;
set;
}
public AControl_View()
{
InitializeComponent();
AControl_Vm = new AControl_Vm();
DataContext = AControl_Vm;
}
}
public class AControl_Vm: ObservableObject
{
AControl_Module m_AControl_Module = new AControl_Module();
string _SomeText="123";
public string SomeText
{
get { return _SomeText; }
set
{
UpdateProperty(ref _SomeText, value);
}
}
string _SomeText1="234";
public string SomeText1
{
get { return _SomeText1; }
set
{
UpdateProperty(ref _SomeText1, value);
}
}
public DelegateCommand BtnCommand => new DelegateCommand(BtnEventHandle);
private void BtnEventHandle(object obj)
{
string strTemp = SomeText1;
SomeText1 = SomeText;
SomeText = strTemp;
}
}
下面画一个框架的图
这里突然想起一个问题,当我有网络消息需要通知过来的时候?我应该通知哪个模块?本来想再Module里面直接绑定网络事件,但是由于这个模块是动态的增加以及减少的,可能存在多线程绑定事件的情况,不敢保证是否会出现问题,为了安全起见,我觉得在初始化的时候,直接绑定好网络事件,这样就不会出现动态增加,减少事件定于的情况。
为什么每个模块只有一个Module类呢?我感觉一个就足够了。如果与外部网络通信比较少,那就一个足够,如果与外部通信比较频繁,也可以逐步放到界面的其他控件里面去实现。
大家想要学习可以参考下面的地址: