Prism介绍

Prism介绍

Prism是一个框架,用于在WPF、Xamarin Forms、Uno Platform和WinUI中构建松散耦合、可维护和可测试的XAML应用程序。
设计目标
为了实现下列目的:
创建能够由模块组成的程序,这些模块能够被单独地编写、组装、部署,并且对于程序来说是可选的
最小化团队之间的依赖,让每个团队专注与特定的领域。比如UI、逻辑代码实现或者是架构代码的开发。
通过架构提高不同团队之间的复用能力
通过抽象团队通用服务提高程序质量
迭代添加新的功能

Prism被设计用来帮助你设计和实现丰富、灵活、易于维护的WPF程序。Prism实现了多种设计模式,突出架构设计的松耦合、关注点分离等原则。使用设计模式和Prism提供的额能力,你可以通过独立开发的松耦合组件轻松的集成到整个应用程序中,从而开发一个应用程序。
Prism围绕架构原则的分散关注点和松耦合原则而设计的。这使得Prism提供能一下的好处:
重用。Prism通过允许组件和服务能够轻松的被开发、测试、集成到一个或多个程序来实现重用。组件级别的复用是通过依赖注入来轻松地发现和集成单元测试级别的组件。应用级别的复用是重用封装了应用级别能力的模块。
可扩展。Prism通过管理组件依赖,允许组件在运行时很容易地被集成或者被其他实现所替换,使得程序能够很容易地被扩展。并且将程序分解到模块,使得模块能够独立地更新和部署。Prism库中的许多组件本身就可以被扩展或者是替换。
灵活。Prism通过允许像开发集成新能力一样更新功能。Prism还允许WPF程序使用通用服务和组件开发,允许程序以最适当地方式去部署和使用。还允许程序基于不同的角色和配置,提供不同的使用功能。
团队开发。Prism促进团队开发,通过允许不同的团队单独开发甚至部署不同的应用程序部分。通过让团队专注于不同的功能领域或业务功能领域来减少团队之间的依赖。
质量。Prism通用让开发团队充分地测试服务和组件提高程序质量。此外,由于通用服务和组件都被完全地测试过了,开发团队能够专注于程序需求而不是如何实现和测试基础代码。

IoC:是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

按照以上思想设计的框架都叫IoC,它只是这一类框架的总称。IoC的框架有很多种例如MEF、Autofac、Castle Windsor、Unity。

初学可简单理解为有两个部分组成一个业务容器,和若干个业务模块组成。都塞到容器中进行管理。

Plug:是业务划分独立出的模块,里面具体的业务实现和常规的MVVM一样。

在这里插入图片描述

前置知识点

后续学习需掌握以下知识点:

Prism概念: Shell、 Modules、 Region、 Navigation、MVVM、 EventAggregator、 Services等。(本系列会学习这些)

IoC概念:需要知道整个框架是如何组成,思想是什么。

其他概念:C#、WPF、 MVVM。(默认已掌握)

Prism概览

在这里插入图片描述

  • Application:我们开发应用程序,初始化Bootstrapper。
  • Bootstrapper:是用来初始化应用程序级别的组件和服务,它也被用来配置和初始化module catalog和Shell 的View和View Model。
  • Modules:是能够独立开发、测试、部署的功能单元,Modules可以被设计成实现特定业务逻辑的模块(如Profile Management),也可以被设计成实现通用基础设施或服务的模块。
  • Shell是宿主应用程序(host application),modules将会被load到Shell中。Shell定义了应用程序的整体布局和结构,而不关心寄宿其中的Module,Shell通常实现通用的application service和infrastructure,而应用的逻辑则实现在具体的Module中,同时,Shell也提供了应用程序的顶层窗口。
  • Services:是用来实现非UI相关功能的逻辑,例如logging、exception management、data access。Services可以被定义在应用程序中或者是Module中,Services通常被注册在依赖注入容器中,使得其它的组件可以很容易的定位这个服务。
  • Container:注入服务、其他模块依赖。

在这里插入图片描述
需结合建好的Prism项目结构进行理解。
在这里插入图片描述

Region、 RegionManager、RegionAdapter

Region是应用程序UI的逻辑区域(具体的表现为容器控件),Views在Region中展现,很多种控件可以被用作Region:ContentControl、ItemsControl、ListBox、TabControl。Views能在Regions编程或者自动呈现,Prism也提供了Region导航的支持。这么设计主要为了解耦让内容显示灵活具有多样性。
在这里插入图片描述
RegionManager主要实现维护区域集合、提供对区域的访问、合成视图、区域导航、定义区域。

区域定义方式有两种:

· Xaml实现
<ContentControl x:Name=“ContentCtrl” prism:RegionManager.RegionName="ContentRegion" />RegionManager.SetRegionName(ContentCtrl,”ContentRegion”);· C#实现
public MainWindowViewModel(IRegionManager regionManager)
{_regionManager = regionManager;_regionManager.RegisterViewWithRegion("ContentRegion", typeof(MainWindow));
}

区域访问:

var contentRegion = _regionManager.Regions["ContentRegion"];

RegionAdapter(区域适配)主要作用为特定的控件创建相应的Region,并将控件与Region进行绑定,然后为Region添加一些行为。

因为并不是所有的控件都可以作为Region的,需要为需要定义为Region的控件添加RegionAdapter。
一个RegionAdapter需要实现IRegionAdapter接口,如果你需要自定义一个RegionAdapter,可以通过继承RegionAdapterBase类来省去一些工作。

Prism为开发者提供了几个默认RegionAdapter:

ContentControlRegionAdapter: 创建一个SingleActiveRegion并将其与ContentControl绑定
ItemsControlRegionAdapter: 创建一个AllActiveRegion并将其与ItemsControl绑定
SelectorRegionAdapter: 创建一个Region并将其与Selector绑定
TabControlRegionAdapter: 创建一个Region并将其与TabControl绑定

Module

具有特定功能,且独立存在则称为成为模块。
在这里插入图片描述
注册/发现模块:1.怎么发现? 2.哪里发现? 3.发现什么?
加载模块
初始化模块
在这里插入图片描述

Navigation – 视图导航

当用户与丰富的客户端应用程序交互时,其用户界面 (UI)将不断更新,以反映用户正在处理的当前任务和数据。随着时间的推移,随着用户与应用程序内的交互并完成各种任务,UI 可能会发生相当大的变化。应用程序协调这些 UI 更改的过程通常称为导航,这一过程由INavigationAware做支撑。
应用场景:View之间传值、需要在导航过程做操作(例如及时释放资源)。

在这里插入图片描述

  • OnNavigatedFrom: 导航离开当前页面前, 此处可以传递过来的参数以及是否允许导航等动作的控制。
  • IsNavigationTarget: 是否创建新示例。为true的时候表示不创建新示例,页面还是之前的;如果为false,则创建新的页面。
  • OnNavigatedTo: 导航到当前页面前, 此处可以传递过来的参数以及是否允许导航等动作的控制。

Navigation – 确认导航(拦截)

您经常会发现您需要在导航操作期间与用户进行交互,以便用户可以确认或取消它。例如,在许多应用程序中,用户可能会尝试在输入或编辑数据时进行导航。在这些情况下,您可能需要询问用户是否希望保存或丢弃在继续从页面中导航之前已输入的数据,或者用户是否希望完全取消导航操作。

  • 这些特性由IConfirmNavigationRequest做支撑,它融入了AOP(面向切面编程)的思想。
  • 应用场景:权限管理、检测用户行为(页面停留多久、哪个模块访问次数最多等)、日志记录等。
    在这里插入图片描述

Navigation - 导航日志

导航日志其实就是对导航系统的一个管理功能,理论上来说,我们应该知道我们上一步导航的位置、以及下一步导航的位置,包括我们导航的历史记录。以便于我们使用导航对应用程序可以灵活的控制。类似于我们熟知的双向链表结构。

导航日志由IRegionNavigationJournal提供支撑。

IRegionNavigationJournal接口有如下功能:

GoBack() : 返回上一页
CanGoBack: 是否可以返回上一页
GoForward(): 返回后一页
CanGoForward: 是否可以返回后一页

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/586512.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十三:爬虫-Scrapy框架(下)

一&#xff1a;各文件的使用回顾 1.items的使用 items 文件主要用于定义储存爬取到的数据的数据结构&#xff0c;方便在爬虫和 Item Pipeline 之间传递数据。 items.pyimport scrapyclass TencentItem(scrapy.Item):# define the fields for your item here like:title scr…

jmeter函数助手-常用汇总

一.函数助手介绍 1.介绍及作用 介绍&#xff1a; jmeter自带的一个特性&#xff0c;可以通过指定的函数规则创建后进行调用该函数&#xff0c;在后续接口请求参数中进行调用 作用 &#xff08;1&#xff09;做参数化。 2.如何使用 jmeter工具栏-->工具-->函数助手…

LabVIEW在大型风电机组状态监测系统开发中的应用

LabVIEW在大型风电机组状态监测系统开发中的应用 风电作为一种清洁能源&#xff0c;近年来在全球范围内得到了广泛研究和开发。特别是大型风力发电机组&#xff0c;由于其常常位于边远地区如近海、戈壁、草原等&#xff0c;面临着恶劣自然环境和复杂设备运维挑战。为了提高风电…

DockerCompose - 容器编排、模板命令、compose命令、Pottainer 可视化界面管理(一文通关)

目录 一、DockerCompose 容器编排 1.1、简介 1.2、Docker-Compose 安装 1.2.1、在线安装 1.2.2、离线安装 1.3、docker-compose.yml 中的模板命令 前置说明 模板命令 1.4、DockerCompse 命令 前置说明 up down exec ps restart rm top pause暂停 和 unpause恢…

linux下的进程布局与ububtu操作系统下的proc文件夹学习笔记一

相关内容我写在公众号&#xff0c;写的挺详细的&#xff0c;欢迎关注我的公众号。请使用鼠标右键&#xff0c;新建标签页打开&#xff0c;直接点击显示参数错误&#xff0c;不知道怎么回事&#xff1f;linux下的进程布局与ububtu操作系统下的proc文件夹学习笔记 (qq.com)https:…

Windows下配置GCC(MinGW)环境

一、下载并安装MinGW 步骤1&#xff1a;下载MinGW安装器 前往MinGW的官方下载源&#xff0c;通过以下链接可以获取到最新版的MinGW安装程序&#xff1a; 网页地址&#xff1a;https://sourceforge.net/projects/mingw/files/ [MinGW 下载地址](https://sourceforge.net/proj…

二级路由的配置以及注意项

二级路由 比如说LayOut组件是父亲&#xff0c;LayOut和ArtComp是儿子&#xff0c;那我们怎么给儿子配路由呢&#xff1f; 1、首先在router下的index.js导入组件&#xff0c;配置规则&#xff0c;详细如下 // 导入路由相关组件 import LayOut from /views/LayOut import UserC…

页面布局--Flexbox的自动边距

标题页面布局–Flexbox的自动边距 通过简单的margin:auto&#xff0c;我们就能实现元素的多种对齐方式。 假设我们在盒子模型里有四个元素&#xff1a; 先给容器使用flex布局&#xff1a; .container {display: flex;justify-content: flex-start;align-items: center;gap: 6…

STM32F407-14.3.10-表73具有有断路功能的互补通道OCx和OCxN的输出控制位-00x00

如上表所示&#xff0c;MOE0&#xff0c;OSSI0&#xff0c;CCxE0&#xff0c;CCxNE0时&#xff0c;OCx与OCxN的输出状态取决于GPIO端口上下拉状态。 ---------------------------------------------------------------------------------------------------------------------…

Windows环境安装和运行shell脚本,值得收藏!

1. 安装步骤 1.1 下载安装包 官网下载地址Git - Downloads&#xff0c; 我们选择 Windows 版本&#xff1b; CSDN下载地址&#xff1a;windows版本下载&#xff1b; 1.2 环境变量配置 在系统变量中找到Path&#xff0c;将git安装目录下的bin&#xff08;我的安装路径&#x…

【华为机试】2023年真题B卷(python)-计算最大乘积

一、题目 题目描述&#xff1a; 给定一个元素类型为小写字符串的数组&#xff0c;请计算两个没有相同字符的元素长度乘积的最大值&#xff0c;如果没有符合条件的两个元素&#xff0c;返回0。 二、输入输出 输入描述: 输入为一个半角逗号分隔的小写字符串的数组&#xff0c;2 &…

数字PID算法基础

数字PID是由编程语言实现的PID算法并烧录到控制芯片中&#xff0c;控制芯片与电机驱动连接&#xff0c;将PID控制算法的输出转换为PWM控制信号发送给电机驱动电路&#xff0c;电机驱动电路与直流电机相连并将PWM控制信号转换为具有相同占空比的PWM供电电压&#xff0c;通过对输…

Jmeter之从CSV文件获取数据

新建csv文件 新建一个excel&#xff0c;填充业务数据&#xff0c;然后导出csv格式文件。 添加一个CSV数据文件 使用

认识K8S的基本概念和原理

K8S&#xff1a;Kubernetes8个字母省略就是k8s 自动部署&#xff0c;自动扩展和容器化部署的应用程序的一个开源系统 k8s是负责自动化运维管理多个容器化程序的集群。是一个功能强大的容器编排工具。分布式和集群化的方式进行容器管理。 k8s的版本&#xff1a;1.15或1.18。使…

RO-NeRF论文笔记

RO-NeRF论文笔记 文章目录 RO-NeRF论文笔记论文概述Abstract1 Introduction2 Related Work3 Method3.1 RGB and depth inpainting network3.2 Background on NeRFs3.3 Confidence-based view selection3.4 Implementation details 4 Experiments4.1 DatasetsReal ObjectsSynthe…

YOLOv5算法进阶改进(9)— 引入ASPP | 空洞空间金字塔池化

前言:Hello大家好,我是小哥谈。ASPP是空洞空间金字塔池化(Atrous Spatial Pyramid Pooling)的缩写。它是一种用于图像语义分割任务的特征提取方法。ASPP通过在不同尺度上进行空洞卷积操作,从而捕捉到图像中不同尺度的上下文信息。ASPP的主要思想是在输入特征图上应用多个不…

华为服务器安装银河麒麟V10操作系统(IBMC安装)

iBMC是华为面向服务器全生命周期的服务器嵌入式管理系统。提供硬件状态监控、部署、节能、安全等系列管理工具&#xff0c;标准化接口构建服务器管理更加完善的生态系统。 服务器BMC IP&#xff1a;192.168.2.100 一、准备工作 1、确保本机和服务器BMC管理口在同一网络 2、银…

浅层神经网络时间序列预测和建模

目录 时间序列网络 NARX 网络 NAR 网络 非线性输入-输出网络 定义问题 使用神经网络时间序列拟合时间序列数据 使用命令行函数拟合时间序列数据 选择数据 选择训练算法 创建网络 准备要训练的数据 划分数据 训练网络 测试网络 查看网络 分析结果 闭环网络 向…

第七课:计算机网络、互联网及万维网(WWW)

第七课&#xff1a;计算机网络、互联网及万维网&#xff08;WWW&#xff09; 第二十八章&#xff1a;计算机网络1、局域网 Local Area Networks - LAN2、媒体访问控制地址 Media Access Control address - MAC3、载波侦听多路访问 Carrier Sense Multiple Access - CSMA4、指数…

Stable Diffusion 系列教程 - 5 ControlNet

ControlNet和LORA的定位都是对大模型做微调的额外网络。作为入门SD的最后一块拼图是必须要去了解和开发的。为什么ControlNet的影响力如此的大&#xff1f;在它之前&#xff0c;基于扩散模型的AIGC是非常难以控制的&#xff0c;扩散整张图像的过程充满了随机性。这种随机性并不…