Prism 6

简介

Prism需要.Framework4.5,包含MVVM(Model-View-ViewModel)模式,Navigation,和MEF(Managed Extensibility Framework)

前期准备

学习Prism需要一些WPF的概念,需要了解和熟悉

  • XAML(Extensible Application Markup Language)。在WPF应用程序中以声明方式定义和初始化用户界面的语言。
  • 数据绑定(Binding)。这就是UI元素如何连接到WPF中的组件和数据。
  • 资源(Resources)。这些是在WPF中创建和管理样式,数据模板和控件模板的方式。
  • 命令(Commands)。这些是用户手势和输入连接到控件的方式。
  • 用户控件(User Controls)。这些是提供自定义行为或自定义外观的组件。
  • 依赖属性(Dependency properties)。这些是公共语言运行时(CLR)属性系统的扩展,用于启用属性设置和监视,以支持数据绑定,路由命令和事件。
  • 行为(Behaviors)。行为是封装交互功能的对象,可以轻松应用于用户界面中的控件。

关键概念

Prism提供了您可能不熟悉的功能和设计模式,特别是如果您是设计模式和复合应用程序开发的新手。本节简要概述了Prism背后的主要概念,并定义了您将在整个文档和代码中使用的一些术语。

  • 模块Modules)。模块是可以独立开发,测试和(可选)部署的功能包。在许多情况下,模块由不同的团队开发和维护。典型的Prism应用程序由多个模块构建。模块可用于表示特定的业务相关功能(例如,配置文件管理),并封装实现该功能所需的所有视图,服务和数据模型。模块还可用于封装可在多个应用程序中重用的常见应用程序基础结构或服务(例如,日志记录和异常管理服务)。
  • 模块目录Module catalog)。在复合应用程序中,必须由主机应用程序在运行时发现和加载模块。在Prism中,模块目录用于指定要加载哪些模块,何时加载以及按什么顺序加载。模块目录由ModuleManagerModuleLoader组件使用,如果模块是远程的,则负责下载模块,将模块的程序集加载到应用程序域中,以及初始化模块。Prism允许以不同方式指定模块目录,包括以编程方式使用代码,以声明方式使用XAML或使用配置文件。如果需要,您还可以实现自定义模块目录。
  • Shell)。shell是加载模块的宿主应用程序。shell定义了应用程序的整体布局和结构,但它通常不知道它将托管的确切模块。它通常实现常见的应用程序服务和基础结构,但大多数应用程序的功能和内容都是在模块中实现的。shell还提供顶级窗口或可视元素,然后将托管由加载的模块提供的不同UI组件。
  • 视图Views)。视图是UI控件,用于封装应用程序的特定功能或功能区域的UI。视图与MVVM模式结合使用,MVVM模式用于在UI与应用程序的表示逻辑和数据之间提供关注点的清晰分离。视图用于封装UI并定义用户交互行为,从而允许独立于底层应用程序功能更新或替换视图。视图使用数据绑定与视图模型类交互。
  • 视图模型View models)。视图模型是封装应用程序的表示逻辑和状态的类。它们是MVVM模式的一部分。View模型封装了应用程序的大部分功能。视图模型定义属性,命令和事件,视图中的控件可以对其进行数据绑定。
  • 模型Models)。模型类封装了应用程序数据和业务逻辑。它们用作MVVM模式的一部分。模型封装了数据以及任何相关的验证和业务规则,以确保数据的一致性和完整性。
  • 命令Commands)。命令用于封装应用程序功能,允许独立于应用程序的UI定义和测试它们。它们可以在视图模型中定义为命令对象或命令方法。Prism提供DelegateCommand类和CompositeCommand类。后者用于表示一起调用的命令集合。
  • 地区Regions)。区域是在应用程序的UI(在shell或视图中)中定义的逻辑占位符,其中显示视图。区域允许更新应用程序UI的布局,而无需更改应用程序逻辑。许多常用控件可用作区域,允许视图自动显示在控件中,例如ContentControlItemsControlListBoxTabControl。可以以编程方式或自动方式在区域内显示视图。Prism还为实施区域导航提供支持。区域可以通过RegionManager组件由其他组件定位,该组件使用RegionAdapterRegionBehavior组件,以协调特定区域内的视图显示。
  • 导航Navigation)。导航定义为应用程序通过其与应用程序或内部应用程序状态更改进行交互而更改其UI的过程。Prism支持两种导航样式:基于状态的导航,其中现有视图的状态被更新以实现简单的导航场景;以及视图切换导航,其中创建新视图并在应用程序的UI内替换旧视图。视图切换导航使用基于统一资源标识符(URI)的导航机制与Prism区域相结合,以允许实现灵活的导航方案。
  • 事件聚合EventAggregator)。复合应用程序中的组件通常需要以松散耦合的方式与应用程序中的其他组件和服务进行通信。为了支持这一点,Prism提供了EventAggregator组件,它实现了pub-sub事件机制,从而允许组件发布事件和其他组件来订阅这些事件,而不需要引用另一个事件。所述EventAggregator经常被用来允许在不同的模块中定义的部件彼此通信。
  • 依赖注入容器Dependency injection container)。整个Prism使用依赖注入(DI)模式来允许管理组件之间的依赖关系。依赖注入允许在运行时实现组件依赖性,并且它支持可扩展性和可测试性。Prism旨在与Unity或MEF一起使用,或通过ServiceLocator与任何其他依赖注入容器一起使用。
  • 服务Services)。服务是封装非UI相关功能的组件,例如日志记录,异常管理和数据访问。服务可以由应用程序定义,也可以在模块内定义。服务通常在依赖注入容器中注册,以便它们可以根据需要定位或构造,并由依赖于它们的其他组件使用。
  • 控制器Controllers)。控制器是用于协调要在应用程序UI中的区域中显示的视图的构造和初始化的类。控制器封装了表示要显示哪些视图的表示逻辑。控制器将使用Prism的视图切换导航机制,该机制提供可扩展的基于URI的导航机制,以协调区域内视图的构造和放置。Application Controller模式定义了映射到此职责的抽象。
  • 引导程序Bootstrapper)。该引导程序组件应用程序使用来初始化各个棱镜组件和服务。它用于初始化依赖注入容器,以便向其注册任何应用程序级组件和服务。它还用于配置和初始化模块目录以及shell的视图和视图模型或演示者。

Prism的设计使您可以单独使用任何前述功能和设计模式,也可以根据您的要求和应用场景一起使用。您可以以任意组合使用MVVM模式,模块化,区域,命令或事件,而无需采用所有这些模式。当然,如果您想充分利用分离关注点和松散耦合提供的好处,您通常会将Prism的许多功能和设计模式相互结合使用。下图显示了典型的Prism应用程序体系结构,并展示了Prism的所有各种功能如何在多模块复合应用程序中协同工作。

使用Prism库的典型复合应用程序架构

大多数Prism应用程序由一个shell应用程序组成,该应用程序定义用于显示顶级视图的区域和可由加载的模块访问的共享服务。shell定义了一个合适的目录,以指定在启动时加载哪些模块(如果适用)。还定义了依赖注入容器,其允许在运行时实现组件依赖性。应用程序启动时,Bootstrapper在容器中注册共享服务和组件。

各个模块封装了整个应用程序功能的一部分,并使用分离的表示模式(如MVVM)定义视图,视图模型,模型和服务组件。加载模块时,模块中定义的视图将显示在shell定义的区域内。初始化完成后,用户然后使用基于状态或视图切换的导航在应用程序内导航,以协调应用程序区域内的新视图的可视更新或显示。

Prism_简介(1)的更多相关文章

  1. ASP.NET Core 1.1 简介

    ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...

  2. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

  3. Cassandra简介

    在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...

  4. REST简介

    一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...

  5. Microservice架构模式简介

    在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...

  6. const,static,extern 简介

    const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...

  7. HTTPS简介

    一.简单总结 1.HTTPS概念总结 HTTPS 就是对HTTP进行了TLS或SSL加密. 应用层的HTTP协议通过传输层的TCP协议来传输,HTTPS 在 HTTP和 TCP中间加了一层TLS/SS ...

  8. 【Machine Learning】机器学习及其基础概念简介

    机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  9. Cesium简介以及离线部署运行

    Cesium简介 cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎,一款开源3DGIS的js库.cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区 ...

随机推荐

  1. 2019年12道RabbitMQ高频面试题你都会了吗?(含答案解析)

    RabbitMQ 面试题 1.什么是 rabbitmq 2.为什么要使用 rabbitmq 3.使用 rabbitmq 的场景 4.如何确保消息正确地发送至 RabbitMQ? 如何确保消息接收方消费 ...

  2. pytho GUI编程之Tkinter

    摘录 python核心编程s GUI(Graphical User Interface)图形用户界面. Tcl.Tk和Tkinter Tkinter是python的默认GUI库.它基于Tk工具包,该工 ...

  3. Spring基础——IOC九种bean声明方式

    Spring简介 Spring不是服务于开发web项目的功能,或业务.而是服务于项目的开发,方便各层间的解耦调用,方便对类的批量管理,是提高软件开发效率,降低后期维护成本的框架. Spring的核心思 ...

  4. Java工作流引擎jflow对流程的结束大总结

    关键字: 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 表单引擎 工作流功能说明  工作流设计 工作流快速开发平台   业务流程管理   bpm工作流系统  java工 ...

  5. react---css3动画 react-transition-group的使用

    react中可以通过state状态值来控制类名,来达到动画效果 父组件代码: import React from 'react'; import SubComponent from "./s ...

  6. 12-19 js

    js是一个脚本语言  可插入到HTML网页文件中 在浏览器中执行 1 如何插入到网页中 1. 内部穿插 script 标签 type属性在网页中使用 2. 外部引入 script src属性引用js文 ...

  7. day 26-1 property、绑定与非绑定方法

    property property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值:就是把一个函数属性的访问方式变成像访问数据属性的方式一样. 我们首先来看一个对比效果 例一:在调用 bmi ...

  8. SpringBoot集成swagger2.0

    最近项目里要用到SpringBoot + swagger,查了其他小伙伴们的资料,或多或少有点问题,在此我再梳理一遍. 1.maven依赖 <parent> <groupId> ...

  9. 基于Git的数据库sql文件的管理——完美解决团队sql操作协同问题

    目录 基于Git的数据库sql文件的管理--完美解决团队sql操作协同问题 1.产生背景 2.之前没用Git管理数据库出现的问题 2.1 用同一个库调试带来的问题 3.解决方案 3.1 Sql文件的创 ...

  10. 搭建Nginx四层反向代理

    需求背景: 前段时间公司因为业务需求需要部署一个正向代理,我已经分享出来了https://www.cnblogs.com/Dfengshuo/p/11911406.html,现有因架构个更改,需要再加 ...