【WPF系列】基础学习-WPF设计模式概览
引言
“设计模式”这个让程序员提起来就“酷”的东东,着实让让初学设计模式的programer自我陶醉一番。太多的经历,告诉我们“凡事都要个度,要学会适可而止”,否则过犹不及。“设计模式”也一样,切莫为了“模式”而模式(初学者demo除外),那就失去了GOF 等老前辈提出设计模式的初衷(可复用面向对象软件的基础)。
常见应用程序中的三层架构

三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。
1、表现层(UIL):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。
2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。
3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、查找等。
更多关于三层架构参考:什么是三层架构?
WPF在经典三层架构中的位置:
如果用WPF代替传统的Web和Winform,在经典三层架构中应该处于什么位置呢?

图片来源:http://www.cnblogs.com/KnightsWarrior/archive/2010/11/01/1866641.html
如感兴趣,可继续看这个有WPF参与的三层应用程序的架构的变体,如下图:

这里:
- WPF作为展示层 ,
- WCF service和Bussiness component做为业务层,
- EntityFramework是数据库访问层。
WPF应用程序常用到展示层设计模式MVVM
技术层面上,WPF带来了诸如Binding、 Dependency Property、Routed Events、Command、Attached Behavior(依赖属性体系间接实现)、DataTemplate、ControlTemplate等新特性,如何能够将WPF的这些特性发挥到极致,人们提出了MVVM设计模式。MVVM(Model-View-ViewModel)框架的由来便是MVP(Model-View-Presenter)模式与WPF结合的应用方式时发展演变过来的一种新型架构框架。
模式演变过程:MVC—>MVP—>MVVM
顺带提下常用到展示层设计模式:
更多细节参考http://www.codeproject.com/Articles/66585/Comparison-of-Architecture-presentation-patterns-M
MVVM模式关系示意图

View绑定到ViewModel,然后执行一些命令在向它请求一个动作。而反过来,ViewModel跟Model通讯,ViewModel告诉Model更新来响应UI。
这样便使得为应用构建UI外观设计相对独立,也非常容易替换UI设计(“随心所欲”设计你的界面)。同时,当UI和功能越来越松耦合的时候,功能的可测试性就越来越强。
常用开源MVVM框架
基于WPF前台XAML和后台代码分开的结构, MVVM是WPF应用程序推崇的最佳设计模式,现在MVVM模式框架也有不少:
| Microsofts MVVM Toolkit | 现在不再更新,感兴趣可以看下源码 |
|
|
现在不再更新 MVVM最初实现 |
|
MVVM Light Toolkit |
看名字就知道是轻量级的MVVM框架,现在在移动客户端也有不少应用 |
https://caliburn.codeplex.com/ |
框架比较大,但现在也有个精简版,并且主推精简版 |
patterns & practices: Prism |
微软的开源代码,持续更新中, 微软主推,当然优势是天生的. |
更多细节参考:http://www.cnblogs.com/KnightsWarrior/archive/2010/11/01/1866641.html
至于这些框架该怎么选择,后续深入研究。
目前由于笔者只选择了Prism来开发,其他框架后续慢慢接触。
参考文献
http://www.codeproject.com/Articles/66585/Comparison-of-Architecture-presentation-patterns-M
http://www.cnblogs.com/KnightsWarrior/archive/2010/11/01/1866641.html
Model-View-ViewModel (MVVM) Explained
【WPF系列】基础学习-WPF设计模式概览的更多相关文章
- [WPF系列]基础学习(一) WPF是什么?
引言 学习之前,我们首先大概了解下WPF诞生的背景以及它所能解决的问题或者新颖之处.WPF作为微软新一代的用户界面技术, WPF简介 WPF的全称是WindowsPresentationFound ...
- 【WPF系列】基础学习-WPF架构概览
引言 WPF从.net framewok3.0加入以来,经历了很多跟新.每次更新都给用户带来了新的功能或者优化性能.下面我们首先看下WPF再.netFramework中的位置,接着介绍下WPF的架构框 ...
- Node.js系列基础学习-----回调函数,异步
Node.js基础学习 Node.js回调函数 Node.js异步编程的直接体现就是回调,异步编程依托回调来实现,但不是异步.回调函数在完成任务后就会被调用,Node有很多的回调函数,其所有的API都 ...
- Node.js系列基础学习----安装,实现Hello World, REPL
Node.js基础学习 简介 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台.Node.js是一 ...
- [WPF系列]基础Combox
示例 参考 WPF combobox SelectedValue binding to string Confused with wpf ComboBox DisplayMemberPath, ...
- [WPF系列]-基础系列 Property Trigger, DataTrigger & EventTrigger
So far, we worked with styles by setting a static value for a specific property. However, using trig ...
- [WPF系列]-基础系列 TabControl应用
引言 Tabcontrol控件也是我们在项目中经常用到的一个控件,用它将相关的信息组织在一起分类显示. 简介 ========================================= ...
- [WPF系列]基础 Listening to Dependency Property change notifications of a given Element
I want to share this great post from Anoop that shows a easy way to add a notification system to dep ...
- [WPF系列]从基础起步学习系列计划
引言 WPF技术已经算不什么新技术,一搜一大把关于WPF基础甚至高级的内容.之前工作中一直使用winform所以一直没有深入学习WPF,这次因项目中使用了WPF技术来实现比较酷的展示界面.我在这里只是 ...
随机推荐
- Windows 10预览版14316开启Bash命令支持
00x0 前言 4月7日凌晨,微软推送了最新的Windows 10一周年更新预览版14316,其中重要的是原生支持Linux Bash命令行支持. 00x1 问题 如何开启Linux Bash命令行? ...
- 异步编程系列第05章 Await究竟做了什么?
p { display: block; margin: 3px 0 0 0; } --> 写在前面 在学异步,有位园友推荐了<async in C#5.0>,没找到中文版,恰巧也想提 ...
- 10个调试Java的技巧
调试不仅可以查找到应用程序缺陷所在,还可以解决缺陷.对于Java程序员来说,他们不仅要学会如何在Eclipse里面开发像样的程序,更需要学会如何调试程序.本文介绍了Java程序员必知的10个调试技巧, ...
- iOS开发之CocoaPods的安装与使用
前言部分 iOS开发时,项目中会引用许多第三方库,CocoaPods(https://github.com/CocoaPods/CocoaPods) 可以用来方便的统一管理这些第三方库. 一.安装 由 ...
- 谁在关心toString的性能?
谁在关心toString的性能?没有人!除非当你有大量的数据在批量处理,使用toString产生了许多日志.然后,你去调查为何如此之慢,才意识到大部分的toString方法使用的是introspect ...
- 基于 Eclipse 的 MapReduce 开发环境搭建
文 / vincentzh 原文连接:http://www.cnblogs.com/vincentzh/p/6055850.html 上周末本来要写这篇的,结果没想到上周末自己环境都没有搭起来,运行起 ...
- 新建 .NET Core 项目 -- Hello World!
一.开发工具安装 1.可选模式一 (不推荐,此为Windows开发方式) 安装 Visual Studio 2015 / Visual Studio 2015 Update 3 / .NET Core ...
- Ionic + Cordova 跨平台移动开发环境配置
1.下载安装JDK(根据各自系统选择32位或64位下载),安装完成之后需要做以下环境变量配置 在“系统变量”中,设置3象属性,JAVA_HOME,PATH,CLASSPATH(大小写无所谓),如果已经 ...
- ArcGIS安装错误1402
以前出遇到过在安装ArcGIS软件的时候出现1402错误,错误原因是因为权限不足,具体是什么造成权限不足还不清楚,估计是安装了什么软件后造成. 错误信息 解决方法 找到相应的注册表,在项上右键设置权限 ...
- centos虚拟机复制移动后网络配置无效
移植Centos虚拟机后无法联网解决1.迁移以后,会存在其中一个网卡无法启动(eth0 or eth1) [root@ ~]# ifup eth0 WARNING: Deprecated config ...