一、分离关注点

目的是确保每一个模块值有单一的,明确的目的,不需要去负责其他的功能。单一的目的也称为关注点。

1.1依赖

引用程序集对于依赖来说不是必须的。依赖关系可能也存在于一个代码单元要知道另一个单元,如果是一个类需要使用另外一个类,那么前者就是依赖于后者,特别的依赖还存在于类的方法,属性,以及构造器。强烈建议把类的接口和实现分开。

上面两端代码是实现同样的目的,实现画出一个形状

/*唯一能画出来的是一个圆,每次图形改变时,有可能需要画矩形,DrawShape必须改变,这样增加了维护成本*还有个不足是,画圆形是,我可以根据圆心和半径画,可能不想这样画,我想根据一段弧来画,那么必须改变*画内部的方法。 */public class ShapeRenderer{private IGraphicsContext _graphicsContext;public void DrawShape(Circle circleShape){_graphicsContext.DrawCircle(circleShape.Position, circleShape.Radius);}}//可以画出多个形状,只需要把形状继承Ishape接口,然后在画的时候中传入绘画时的方法//就可以达到了控制反转的效果了public class ShapeRenderer{private IGraphicsContext graphicsContext;public void DrawShape(IShape shape){shape.Draw(graphicsContext);}}

下面的方法比上面的方法更抽象一下,没有第一种直观,但是可以符合多种情况的使用。减少了维护的成本。以上的例子说明如果让用户操作看做最高层,各个对象看做最底层时,不应该让高层依赖底层,应该让高层的依赖于低层的代码。

ViewModel主要从Model获取他需要的数据,经过加工数据,然后实现View可以理解和使用的接口。View的改变完全和Model不相干的。因为Model的心里完全没有View的概念。Model的改变对View影响也通过ViewModel变得很缓和了,因为ViewModel是直接为View所用的。

通常来讲,Model是对立的,既不依赖与ViewModel,也不依赖与View

二、Model

Model不仅对于wpf或者silverlight程序是很有用的,对于其他应用程序也是很有用的。

2.1封装

封装就是用来隐藏信息,其最佳实践目标是保持封装,避免信息被肉眼看到。在代码中,信息是由类及其公共方法属性,字段,和构造器组成,这些数据有些事只读的,有些是可写的。如果在类中的数据可以直接的可以写,这说明类存在潜在的问题。

封装其实就是类内部的信息被其他对象访问,但是类内部的实现,只有自己知道。

2.2不要欺骗自己

复制代码是一种罪过,当如果重复的赋值代码时,就应该改变代码了。因为如果复制的代码修改了,就要修改两次或者多次。如果第二个没有修改,就意味着bug的已经进入你的应用程序了。

三、ViewModel

public class SampleViewModel : INotifyPropertyChanged{/** 最常用的public元素放在最顶端和常用的字段放在最低端* 在此例子中ViewModel不负责计算的过程,而是通过Model来实现的* 属性是View中要使用的* */#region Constructorspublic SampleViewModel(){_model = new SampleModel();}#endregion#region Properties//也是可读写的属性,但是只有ViewModel可以Set//由于ViewModel变化时要通知View所以,会在值改变时//调用PropertyChanged事件public double Result{get { return _result; }private set{if(_result != value){_result = value;if (PropertyChanged != null){PropertyChanged(this, new PropertyChangedEventArgs("Result"));}}}}//可以读写的原因是我们要让用户来写内容,从而使员我们的ViewModel来读取public double Number{get;set;}public ICommand CalculateSquareRootCommand{get{if (_calculateSquareRootCommand == null){_calculateSquareRootCommand = new RelayCommand(param =>this.CalculateSquareRoot());}return _calculateSquareRootCommand;}}#endregion#region Methodsprivate void CalculateSquareRoot(){Result = _model.CalculateSquareRoot(Number);}#endregion#region Fieldspublic event PropertyChangedEventHandler PropertyChanged;private double _result;private RelayCommand _calculateSquareRootCommand;private SampleModel _model;#endregion}

pro mvvm 读书笔记相关推荐

  1. pro git读书笔记

    pro git读书笔记 起步 三种区域以及三种状态 Git 项目有三个工作区域的概念:工作目录,暂存区域以及Git 仓库 工作目录是我们用来修改文件的目录,是对项目的某个版本独立提取出来的内容 暂存区 ...

  2. Pro Git 读书笔记

    一. 起步 1. 集中式版本控制缺点:中央服务器的单点故障. 分布式版本控制优点:客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来. 这么一来,任何一处协同工作用的服务器发生故障,事后 ...

  3. 【转】Pro Android学习笔记(一):Android 平台 2013.6.4

    本系列是阅读<Pro Android4>的读书笔记,也包括网络阅读资料的整理,以及个人心得. 由于智能手机引入AP(应用处理器),Android在某种意义上是个人计算机,具有桌面计算机的完 ...

  4. 现代前端技术解析读书笔记

    思维导图链接:http://v3.processon.com/view/link/5f7ec592762131119546c899 取材自<现代前端技术解析> 本文只是个人读书笔记,更多详 ...

  5. 计算机图形学(第四版)-第一个画线例子- 读书笔记P30

    说明:内容为计算机图形学(第四版)这本书的读书笔记,会记录这本书的一些编码知识和其他内容,目标:将厚书读薄yeah~ 1.OpenGL基本语法: 2.附加库: 3.OpenGL的安装和环境配置: 参考 ...

  6. 《Python神经网络编程(Make Your Own Neural Network)》读书笔记

    声明 这是作者在CSDN上的第二篇博客,关于阅读塔里克·拉希德的著作<Python神经网络编程(Make Your Own Neural Network)>之后的读书笔记.跟诸位大牛相比, ...

  7. 《MAC OS X 技术内幕》读书笔记第一章:MAC OS X的起源

    <MAC OS X 技术内幕>读书笔记第一章:MAC OS X的起源 前言 1 System x.x系列 1.1System 1.0(1984年1月24日) 1.2System 2.x(1 ...

  8. JavaScript设计模式读书笔记(一)= 创建型设计模式

    全系列目录 JavaScript设计模式读书笔记(一)=> 创建型设计模式 JavaScript设计模式读书笔记(二)=> 结构型设计模式 JavaScript设计模式读书笔记(三)=&g ...

  9. JavaScript设计模式读书笔记(四)= 技巧型设计模式

    全系列目录 JavaScript设计模式读书笔记(一)=> 创建型设计模式 JavaScript设计模式读书笔记(二)=> 结构型设计模式 JavaScript设计模式读书笔记(三)=&g ...

最新文章

  1. 集成学习VotingClassifier、HistGradientBoostingClassifier、Stacking、Blending
  2. jQuery Mobile数据属性
  3. java开发资源分享(视频,源码,项目)
  4. 如何基于Weex实现创新交互体验?手淘开源技术BindingX案例解析
  5. Spring注解编程基石(一)
  6. linux下ARP防御
  7. 远程注入【注入分类】
  8. ASP.NET小收集:Word的编码是Unicode
  9. 性能提升一个数量级,大杀器来了!| 文内福利
  10. Linux中常用的命令
  11. spring REST中的内容协商(同一资源,多种展现:xml,json,html)
  12. 哈理工计算机学院学生会技术部,计算机与信息学院学生会简介
  13. caffe dataset
  14. 提交json数据给Java_java 实现通过 post 方式提交json参数操作
  15. 《Java游戏编程原理与实践教程》读书笔记(第3章——Java图形处理和Java 2D)
  16. android系统存储空间不足怎么办,手机内存不足怎么办?手机内存不足如何清理?...
  17. 用c#实现简单的登录和注册功能
  18. Go语言-复合数据结构(map)
  19. FPGA的基本电路-计数器
  20. 史上最简单的 MySQL 教程(十二)「列属性 之 唯一键」

热门文章

  1. docker进阶-搭建私有企业级镜像仓库Harbor
  2. Java基础知识:IO
  3. Maven构建Struts2框架的注意事项
  4. AngularJS学习笔记一:简单入门
  5. 解决apktool d file.apk出现Error occured while disassembling class以及apktool源码编译
  6. 多图 | 600岁“网红”的10亿+营收变现(结尾有彩蛋)
  7. 产品方法论之:菜鸟做加法,高手做减法!
  8. Python3 图片(jpg、bmp、png)转PDF
  9. 配置_DruidDataSource参考配置
  10. linux的find命令