MVVM框架解析(一)

   花了一点时间看了一下微软开源MVVM代码,受义很多!

  从代码整体上看,代码分为四大类,

从图中看不能明白我要表达的意思。显而意见!MainApplicationWindow.xaml是应用程序主窗口(V层),DocumentManager.cs是数据管理层,PersonViewModel.cs 是数据层(M层)。

DocumentManagerAdapter.cs可能有点难以明白,为什么DocumentManager.cs数据管理层,为什么还要Adapter层呢!其实这是分工更细化,DocumentManagerAdapter.cs是程序逻辑层(VM层)

从运行后窗口看,框架有两个tabItem多文档,从这里可以看出框架是多档,所以要DocumentManager.cs是数据管理层,将应用程序打开的所有文档进一步的管理,其实这层还是停留在M层。

整体了解了下,现在开始分析细节,四个类三层是怎样结合到一起的呢!

 1 namespace MvvmDemo {
 2
 3     /// <summary>
 4     /// Contains the <c>Main()</c> method that starts the application
 5     /// </summary>
 6     public static class MainMvvmDemonstrationApplication {
 7
 8         /// <summary>
 9         /// Starts the application
10         /// </summary>
11         /// <param name="args">The collection of program arguments.</param>
12         [STAThread]
13         public static int Main(string[] args) {        ......
25             try {
26 #endif
27            ........30
31                 //    Initializes an instance of your System.Windows.Application derived class
32                 var application = new MvvmDemo.View.App();
33
34                 //    Instantiates the main window class
35                 var mainWindow = new MvvmDemo.View.MainApplicationWindow();
36
37                 //    Initializes the view-model layer with the view layer’s document manager adapter
38                 // and tie it into the persistence layer
39             /**********************************************************************************/
40                 // 这两句很重要
41                 // docContainer是主窗口tab控件
42                 // adapter是tab的文档管理类
43                 var docContainer = mainWindow.MasterDocumentContainer;
44                 var adapter = new MvvmDemo.View.DocumentManagerAdapter(docContainer);
45                 /**********************************************************************************/
46          .......

52                 application.Run(mainWindow);
53
            ........
64         }
65
66
67     }//class
68
69 }//namespace

出点一些多途的代码,现在看条理就清楚多了。在Main定义了四个全局变量,

var application = new MvvmDemo.View.App();
 var mainWindow = new MvvmDemo.View.MainApplicationWindow();
 var docContainer = mainWindow.MasterDocumentContainer;
 var adapter = new MvvmDemo.View.DocumentManagerAdapter(docContainer);

这四个类型在前面已经说到了两个,对象 docContainer 是 mainWindow 对象中的变量,其实可以当作控件TabControl。对象application有一点编程经验的都知道,不明白可以到网上找找,我在这里不多讲了。

在前面不是说了还有一个DocumentManager.cs怎么在这里没有看到它呢,先别急,我先分析完对象 DocumentManagerAdapter这个对象里有一个引用mainWindow中的docContainer (相当于TabControl)其实DocumentManagerAdapter里还有一个DocumentManager对象,因为它是mainWindow和DocumentManager之间的桥梁(相当于VM层)这样理解还不如说docContainer (相当于TabControl)和Document这间要桥梁。

很晚了,有时间在接着下吧!代码在后文本加上。
				
时间: 2024-11-04 18:58:57

MVVM框架解析(一)的相关文章

VUE的MVVM框架解析

这篇文章主要介绍了MVVM模式中ViewModel和View.Model有什么区别?本文分别解释了它们的功能和作用,然后总结了它之间的区别,需要的朋友可以参考下 Model:很简单,就是业务逻辑相关的数据对象,通常从数据库映射而来,我们可以说是与数据库对应的model. View:也很简单,就是展现出来的用户界面. 基本上,绝大多数软件所做的工作无非就是从数据存储中读出数据,展现到用户界面上,然后从用户界面接收输入,写入到数据存储里面去.所以,对于数据存储(model)和界面(view)这两层,

迷你MVVM框架 avalonjs 入门教程(司徒正美)

迷你MVVM框架 avalonjs 入门教程 关于AvalonJs 开始的例子 扫描 视图模型 数据模型 绑定属性与动态模板 作用域绑定(ms-controller, ms-important) 模板绑定(ms-include) 数据填充(ms-text, ms-html) 类名切换(ms-class, ms-hover, ms-active) 事件绑定(ms-on,……) 显示绑定(ms-visible) 插入绑定(ms-if) 双工绑定(ms-duplex) 样式绑定(ms-css) 数据绑

迷你MVVM框架 avalonjs 沉思录 第2节 DOM操作的三大问题

jQuery之所以击败Prototype.js,是因为它自一开始就了解这三大问题,并提出完善的解决方案. 第一个问题,DOM什么时候可用.JS不像C那样有一个main函数,里面的逻辑不分主次.但JS是这样玩,并不意味着DOM也是这样.被JS自由惯了的人,于是傻眼了. 这涉及一个时间的概念.牛顿与爱因斯坦的差别,也是在于这个时间的引入.我们的脚本并不是一下子就引入,页面也不是一下加载完毕.前者引发脚本加载管理问题,后者就是DOMReady这个概念的导入.页面是从上到下生成,除了样式或图片在浏览器的

js架构设计模式——前端MVVM框架设计及实现(一)

前端MVVM框架设计及实现(一) 最近抽出点时间想弄个dom模块化的模板引擎,不过现在这种都是MVVM自带的,索性就想自己造轮子写一个简单的MVVM框架了 借鉴的自然还是从正美的avalon开始了,我记得还是去年6月写过一个系列的avalon源码分析的,不过那时候0.7版本,不够健全,现在已经好太多了 框架是面向一个领域,提供一套解决方案,那么我们用前端的MVVM能为我们带来什么便利? 关注点分离 操作数据即操作DOM 动态模板 关注点分离是MVVM与身俱来的,操作数据即操作DOM,是VM中的访

迷你MVVM框架 avalonjs1.5 入门教程

avalon经过几年以后,已成为国内一个举足轻重的框架.它提供了多种不同的版本,满足不同人群的需要.比如avalon.js支持IE6等老旧浏览器,让许多靠政府项目或对兼容性要求够高的公司也能享受MVVM的乐趣.avalon.modern.js支持IE10以上版本,优先使用新API,性能更优,体积更少.avalon.mobile.js在avalon.modern的基础提供了触屏事件的支持,满足大家在移动开发的需求.此外,它们分别存在avalon.xxx.shim版本,指无自带加载器版,avalon

Swift教程17-淡化MVC,使用MVVM框架开发轻巧便于维护的iOS/android app

MVVM是微软提出一种移动开发框架,旨在针对传统的MVC框架,解决传统的MVC框架的控制器的臃肿问题. M: Model模型,也就是数据模型;比如一条微博,对应的所有字段合成一条微博整体,这个整体就是Model V: View视图,只用来显示的视图,如 iOS的UIView,Cell;当然在 iOS中 Storyboard中,view总是和控制器关联,这并不是严格的view 如果我们纯手写代码定义一个view那么就是一个比较严格的view了 VM: ViewModel视图模型,是将一个 View

Android官方MVVM框架实现组件化之整体结构

一.google官方MVVM框架讲解 我前面对比了MVC和MVP<两张图看懂Android开发中MVC与MVP的区别>,可以相对于MVC我们的MVP是有多优越,但是Android开发现在已经开始流行了MVVM,前不久google官方发布了MVVM的正式库.官方的正式MVVM库主要包括下面四个: 其中只有ViewModel是MVVM结构中的一个组件,其他的三个都是辅助性质的. lifecycles 就是处理UI界面的生命周期,在26版本以后的Support库中,AppCompatActivity

MVVM框架理解

MVC框架 将整个前端页面分成View,Controller,Modal,视图上发生变化,通过Controller(控件)将响应传入到Model(数据源),由数据源改变View上面的数据. 整个过程看起来是行云流水,业务逻辑放在Model当中,页面渲染逻辑放在View当中,但在实际运用上却存在一个问题:那就是MVC框架允许View和Model直接进行通信!! 换句话说,View和Model之间随着业务量的不断庞大,会出现蜘蛛网一样难以处理的依赖关系,完全背离了开发所应该遵循的“开放封闭原则”.

mvvm框架根源

如果直接在html结构上绑定事件,事件处理函数无法获取到js中的作用域.想要获取T函数的作用域,必须在dom元素上绑定.将模板中的html解析dom树,然后遍历元素上的属性获取事件处理函数的标识,在进行绑定即可. 目前主流框架对事件绑定的实现思想大概有一下三类 1.特定的模板语法,使用Parser解析出来的AST(Abstract Syntax Tree在生成目标Dom树. 2.模板语法使用html,借助innerHTML让浏览器自己生成一个带有模板字符串的fakedomtree再生成DomTr