MVVM是Model-View-ViewModel的简写,将应用程序的业务和表示逻辑与用户界面 (UI) 清晰分离
MVVM: Model-View-ViewModel :
在原来MVC的基础上增加了一个ViewModule的中间件,将项目结构区分成,
- View :视图层
- Module :模型层 (实体层)
- ViewModule :模型实体交互逻辑层
- Service : 实体与数据库交互层。
进一步拆分
1. 对View拆分
1.1 :用户看见的 **Pages** 进行单元模块拆分,比如某一页分为**上中下**三级
/1.1.1 :在这里的上中下 拆分成三层 上 , 中 , 下 。**Controls中**
每一级当中也对应的拆分成最小单元控件,以方便解耦,重构替换。
1.2.1 上中下,若为多组件组合,则将上中下,定义的组件放在**Dialogs**目录下定义成 ,上组件组合元素页面, 中组件组合元素页面,下组件组合元素页面
// 1.1.2 如果是存在页面可共用的属性 例如:文件导入,文件解析 则存放在分层层级**Controls中**的Abstracts中。
///1.1.3如果是页面特有元素,例如对本页面去进行组合的元素则放在分层层级**Controls中**XXX页面文件夹中定义。
// 1.1.4 工具组件例如:多语言转换 ,字符串转换等工具则也单独定义在一个文件夹内。
**至此对View完成拆分**
在这里应该完成 前端UI页面对 ViewModule的数据绑定,以及方法绑定。
2. 对ViewModule进行拆分
/ 2.1 声明注入Module层。形成数据上下文
[ObservableProperty]
public ErrorCreateContext errorContext;
public ErrorCreateViewModel(IMediator mediator, ILangManager langManager)
: base(mediator, langManager)
{
ErrorContext = App.Current.GetService<ErrorCreateContext>();
ErrorContext.UpdateEnabledEdit(true);
}
/ 2.2 前端**View页面**的数据绑定,方法的声明
public Func<HandlerResult<string>> FuncForGenerateSuffix { get; private set; }
public Func<HandlerResult> FuncForLegalCreateCode { get; private set; }
public void SetFuncForGenerateSuffix(Func<HandlerResult<string>> funcForGenerateSuffix)
{
FuncForGenerateSuffix = funcForGenerateSuffix;
}
public void SetFuncForLegalCreateCode(Func<HandlerResult> funcForLegalCreateCode)
{
FuncForLegalCreateCode = funcForLegalCreateCode;
}
// 2.3 对命令的响应
[RelayCommand]
public void SelectErrorModule(ErrorModuleData errorModuleData)
{
ErrorContext.UpdateErrorModuleData(errorModuleData);
}
[RelayCommand]
public void UpdateCodeNumber()
{
ErrorContext.UpdateCodeNumber();
}
/ 2.4 对页面属性的绑定
protected override string GetYesDescription()
{
return "创建";
}
protected override string GetTitle()
{
return "创建编码";
}
3. 对Contexts ,Module的拆分
- 对于ViewModule针对View,存在 多对一的关系 :即 一个View页面 分割成了不同的ViewModule,不同ViewModule对应不同的Contexts 以及命令响应。则系统架构设计上更为清晰。合理。