Prism框架研究(一)
从今天起开始写一个Prism框架的学习博客,今天是第一篇,所以从最基本的一些概念开始学习这个基于MVVM的框架的学习,首先看一下Prism代表什么,这里引用一下比较官方的英文解释来看一下:Prism was the code name for the guidance formally known as the Composite Application Guidance for WPF and Silverlight. For brevity and conciseness, and due to customer demand, this guidance is now referred to simply as Prism.Prism主要是用来开发具有多界面,丰富用户交互以及数据可视化特点的WPF以及Sliverlight的应用程序的具体呈现和商业逻辑,具体了解到了其基本概念之后,我们再来学习新的内容。
一 为什么要使用Prism框架?
在回答这个问题之前,我们不得不了解关于使用WPF或Siverlight开发客户端程序所面临的挑战。
1 我们知道在软件开发的过程中,应用程序的需求是随着时间的推移发生重大改变的,在这个过程中会面临技术的不断更新,并且在开发周期中我们还会遇到用户的不断反馈,最终导致用户需求的不断变化,所以说在开发一个应用程序中如何构建一个随着时间的推移能够轻易去修改并且去扩展的应用程序就显得非常重要了,这甚至需要架构师去构建一个各个部分之间彼此独立,能够单独就行开发和测试,并且能够顺利进行更新和修改的模块化程序,而且其中的任意一个模块能够做到不影响其他的任意一个部分的逻辑功能,这个是非常重要的。
2 另外一方面就是在一个企业级的应用开发可能涉及到多人协作开发,这里可能涉及到前台UI开发者,后台逻辑实现者,这么多人大家如何去协作开发,彼此独立,互不影响,并且最终能够组合成一个完整的项目,这对程序的开发者提出了一个巨大的挑战,所以Prism的出现为这些问题提供了一个高效的解决方案。
3 对于一个大的并且耦合度非常高的应用程序,由于程序之间彼此没有明显的隔离,所以造成想要给应用程序添加或者更改一些特性变得非常困难,并且在这种系统中,如果想修复程序中其它部分的bug想要不影响整个系统的其它部分,这个是非常重要的。
Prism的出现正是出于解决上面的一些问题,为构建一个:可重复利用的、可扩展的、灵活的、可以团队开发的、高质量的应用程序提供了一个很好的解决方案。
二 Prism框架中一些非常重要的概念
Modules:Modules是能够独立开发、测试、部署的功能单元,Modules可以被设计成实现特定业务逻辑的模块(如Profile Management),也可以被设计成实现通用基础设施或服务的模块 (如Logging、Exception Management)。
Module Catalog:在Prism中,Module Catalog指明了要Load哪些Module,和用什么样的顺序去Load这些Module。
Shell:Shell是宿主应用程序(host application),modules将会被load到Shell中。Shell定义了应用程序的整体布局和结构,而不关心寄宿其中的Module,Shell通常实现通用的application service和infrastructure,而应用的逻辑则实现在具体的Module中,同时,Shell也提供了应用程序的顶层窗口。
Views:Views是应用中展现特定功能的视图,它展现UI、定义交互行为,并且通过数据绑定的方式与ViewModel进行交互。
View Model和Presenters:View Model用来封装应用程序的UI逻辑及其状态。
Model:Model被用来封装数据和相应的验证,以及相关的业务规则来保证数据的一致性和正确性。
Commands:Command被用来封装应用程序功能,Prism提供了Delegate Command和CompositeCommand两个类。
Regions:Regions是应用程序UI的逻辑区域,它很像一个PlaceHolder,Views在Regions中展现,很多种控件可以被用作Region:ContentControl、ItemsControl、ListBox、TabControl。Views能在Regions编程或者自动呈现,Prism也提供了Region导航的支持。
Shell、Region和View的关系如图所示:
Navigation:Prism支持两种导航:state-based导航和view-switching导航。
EventAggregator:组件通常要和其它的组件或者服务进行通信。为此,Prism提供了EventAggregator组件,这个组件实现pub-sub事件机制,允许一些组件发布事件,另一些组件去订阅事件而无需两个组件之间的引用。
Dependency Injection container:Prism使用依赖注入模式来管理组件之间的依赖,Prism被设计使用Unity、Mef等依赖注入容器。
Services:Services是用来实现非UI相关功能的逻辑,例如logging、exception management、data access。Services可以被定义在应用程序中或者是Module中,Services通常被注册在依赖注入容器中,使得其它的组件可以很容易的定位这个服务。
Controllers:Controller被用来控制在Region中哪个View将会被呈现,同时控制这个View的创建和初始化。
Bootstrapper:Bootstrapper用来初始化应用程序级别的组件和服务,它也被用来配置和初始化module catalog和Shell 的View和View Model。功能如图:
Prism框架研究(一)的更多相关文章
- Prism框架研究(三)
这一篇主要用来介绍一下基于Prism Library中的核心服务以及如何配置Container,还有一个重要的部分是如何管理各个组件之间的依赖性,下面就这些内容来做一一的介绍. 1 Prism中的核心 ...
- Prism框架研究(二)
首先在介绍本节内容之前,首先来看看官方文档来如何描述Prism 应用的初始化吧!A Prism application requires registration and configuration ...
- 在Prism 框架中,实现主程序与模块间 UI 的通信
背景: 在模块的UI中包含 TreeView 控件,在该树形控件的每一节点前面定义了一个复选框,如图 需求: 在两个不同的应用程序中使用该控件,而它在不同应用程序中的外观则并不一致,按照本例,即一个显 ...
- 【.NET6+WPF】WPF使用prism框架+Unity IOC容器实现MVVM双向绑定和依赖注入
前言:在C/S架构上,WPF无疑已经是"桌面一霸"了.在.NET生态环境中,很多小伙伴还在使用Winform开发C/S架构的桌面应用.但是WPF也有很多年的历史了,并且基于MVVM ...
- WPF Step By Step 系列-Prism框架在项目中使用
WPF Step By Step 系列-Prism框架在项目中使用 回顾 上一篇,我们介绍了关于控件模板的用法,本节我们将继续说明WPF更加实用的内容,在大型的项目中如何使用Prism框架,并给予Pr ...
- WPF Prism框架下基于MVVM模式的命令、绑定、事件
Prism框架下的自定义路由事件和命令绑定 BaseCode XAML代码: <Button x:Class="IM.UI.CommandEx.PrismCommandEx" ...
- Prism框架中加载类库中时其中第三方类dll提示无法加载程序集
Prism框架是采用一种依赖注入的方式动态加载程序集,能够在程序需要加载的时候将程序集注入到里面去,实现程序的热插拔效果,而且采用这种框架能够让我们进行一个大项目的独立开发,在最近的一个项目中在独立开 ...
- ASP.NET Web API 框架研究 ASP.NET Web API 路由
ASP.NET Web API 核心框架是一个独立的.抽象的消息处理管道,ASP.NET Web API有自己独立的路由系统,是消息处理管道的组成部分,其与ASP.NET路由系统有类似的设计,都能找到 ...
- 项目中使用Prism框架
Prism框架在项目中使用 回顾 上一篇,我们介绍了关于控件模板的用法,本节我们将继续说明WPF更加实用的内容,在大型的项目中如何使用Prism框架,并给予Prism框架来构建基础的应用框架,并且 ...
随机推荐
- [matlab] 16.多约束非线性规划 ga工具箱解决 [带不等式约束]
下面举例说明如何运用GA工具箱求解多约束非线性规划问题: function f =fitness(x) f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2 ...
- day1 计算机组成、操作系统
一:编程与编程的目的 1.什么是语言?什么是编程语言? 语言是一个事物与另一个事物沟通的介质. 编程语言是程序员与计算机沟通的介质. 2.什么是编程?为什么要编程? 编程是程序员将自己想要让计算机做的 ...
- day93之微信推送
python之微信推送详解 用什么推送 -邮件 -微信推送 -短信推送微信推送 -公众号(不能主动给用户发消息) -认证的公众号:需要营业执照,需要交钱,可以发多篇文章 - ...
- vi十六进制编辑
指定行:n 光标行之前或之后的n个字符nl 之后 2l 光标位置两个字符后nh 之前 2h 光标位置两个字符前 光标行之上或之下的n个字符nk 之上 1k 光标位置1个字符之上nj 之下 1j 光标位 ...
- 【原创】研发应该懂的binlog知识(上)
引言 为什么写这篇文章? 大家当年在学MySQL的时候,为了能够迅速就业,一般是学习一下MySQL的基本语法,差不多就出山找工作了.水平稍微好一点的童鞋呢还会懂一点存储过程的编写,又或者是懂一点索引的 ...
- 《React Native 精解与实战》书籍连载「Node.js 简介与 React Native 开发环境配置」
此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...
- OO博客作业4:第13-14周作业总结
一.论述测试与正确性论证的效果差异,比较其优缺点 测试是设计若干组测试用例,运行程序并检验其是否完成预期功能.测试是一种直接发现BUG的方法,可以准确断定什么样的BUG会发生,并通过辅助调试进一步确定 ...
- H5 62-浮动元素字围现象
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 把玩Alpine linux(一):安装
导读 Alpine Linux是一个面向安全应用的轻量级Linux发行版.它采用了musl libc和busybox以减小系统的体积和运行时资源消耗,同时还提供了自己的包管理工具apk.Alpine ...
- atcoderI - Coins ( 概率DP)
I - Coins Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement Let NN b ...