当前位置: 首页 > article >正文

Unity QFramework 简介

目录

什么是MVC模式?

QFramework 架构提供了 Model 的概念

QFramework 架构引入 Command 的方式

QFramework 架构引入 Event事件机制

四个层:表现层、系统层、数据层、工具层

委托和回调函数的关系

命令和事件的区别

工具篇


QFramework整体基于MVC架构,实现了数据,操作,视图的解耦分层。在中间穿插了Command,Event,Architecture ,System这样的类作为扩展。表现层,数据层,系统层,

什么是MVC模式?

MVC(Model-View-Controller)框架通过​​数据、逻辑、交互的解耦​​,提升了代码的可维护性和扩展性。

在MVC架构中,​​交互逻辑​​和​​表现逻辑​​是数据与界面交互的两个核心流程,

交互逻辑,就是从用户输入开始到数据变更的逻辑 顺序是 View->Controller->Model

表现逻辑,就是数据变更到在界面显示的逻辑 顺序是 Model->Controller->View

View、Model 以及 Controller 的交互逻辑和表现逻辑形成了一个闭环。构成了完整的 MVC 闭环

MVC 可以结合多种设计模式

观察者模式(Model→View) + 命令模式(View→Controller) + 策略模式(Controller→Model)。

Model​​通过观察者模式通知​​View​​更新;

​Controller​​通过命令模式处理​​View​​的输入请求。

观察者模式用于模型和视图之间的通信,在模型数据变化时通知视图更新;

策略模式用于视图和控制器之间的解耦;

命令模式用于处理用户输入

QFramework 架构提供了 Model 的概念

Model 的引入是为了解决数据共享的问题 数据共享分两种:空间上的共享和时间上的共享。 空间的共享很简单,就是多个点的代码需要QFramework 架构提供了 Model 的概念访问 Model 里的数据。 时间上的共享就是存储功能,将上一次关闭 App 之前的数据存储到一个文件里,这次打开时获得上次关闭 App 之前的数据。 需要共享的数据放 Model 里,不需要共享的,能不放就不放。

QFramework 架构引入 Command 的方式

Controller 本身之所以臃肿,是因为,它负责了两种职责,即交互逻辑,表现逻辑

解决 Controller 臃肿用的是引入 Command 的方式,即引入命令模式,通过命令来分担 Controller 的交互逻辑的职责

通过引入 Command,帮助分担了 Controller 的交互逻辑。使得 Controller 成为一个薄薄的一层,在需要修改 Model 的时候,Controller 只要调用一句简单的 Command 即可。

QFramework 架构引入 Event事件机制

表现逻辑的代码目前看起来并不是很智能。 每次调用逻辑之后,表现逻辑部分都需要手动调用一次(UpdateView 方法)

在一个项目中,表现逻辑的调用次数,至少会和交互逻辑的调用次数一样多。因为只要修改了数据,对应地就要把数据的变化在界面上表现出来。 而这部分调用表现逻辑的代码也会很多,所以我们引入一个事件机制来解决这个问题。

事件机制的使用其实是和 Command 一起使用的,即通过 Command 修改数据,当数据发生修改后发送对应的数据变更事件,这个是简化版本的 CQRS 原则,读写分离原则

四个层:表现层、系统层、数据层、工具层

委托和回调函数的关系

命令和事件的区别

工具篇

相关文章:

Unity QFramework 简介

目录 什么是MVC模式? QFramework 架构提供了 Model 的概念 QFramework 架构引入 Command 的方式 QFramework 架构引入 Event事件机制 四个层:表现层、系统层、数据层、工具层 委托和回调函数的关系 命令和事件的区别 工具篇 QFramework整体基于M…...

C++ 日志系统实战第五步:日志器的设计

全是通俗易懂的讲解,如果你本节之前的知识都掌握清楚,那就速速来看我的项目笔记吧~ 本文项目代码编写收尾! 日志器类 (Logger) 设计(建造者模式) 日志器主要用于和前端交互。当我们需要使用日志系统打印 log 时&…...

@Docker Compose部署Alertmanager

文章目录 Docker Compose部署Alertmanager1. 准备工作1.1 系统要求1.2 目录结构准备 2. 配置文件准备2.1 创建docker-compose.yml文件2.2 创建Alertmanager配置文件 3. 部署Alertmanager3.1 启动服务3.2 验证服务状态3.3 检查日志 4. 服务验证4.1 访问Web UI 4.2 API健康检查5.…...

前端面试准备-3

1.let、const、var的区别 ①:let和const为块级作用域,var为全局作用域 ②:let和var可以重新赋值定义,而const不可以 ③:var会提升到作用域顶部,但不会初始化;let和const也会提升到作用不顶部…...

性能测试-jmeter实战1

课程:B站大学 记录软件测试-性能测试学习历程、掌握前端性能测试、后端性能测试、服务端性能测试的你才是一个专业的软件测试工程师 性能测试-jmeter实战1 为什么需要性能测试呢?性能测试的作用?性能测试体系性能测试基础性能测试工具性能监控…...

汽车高速通信的EMC挑战

随着“软件定义汽车”的理念全面渗透,中国汽车行业正加速向集中式电子电气架构(E/E架构)转型。SOA(面向服务的架构)理念推动下,整车开始围绕中央计算平台(OIB)与分布式域控制器(VIU)构建,硬件平台具备前所未有的数据处理能力,能掌控整车控制与实时感知决策。 一、…...

[SC]SystemC在CPU/GPU验证中的应用(五)

SystemC在CPU/GPU验证中的应用(五) 摘要:下面分享50个逐步升级SystemC编程能力的示例及建议的学习路线图。您可以一次一批地完成它们——从前五个基础的例子开始,然后转向channels, TLM, bus models, simple CPU/GPU kernels等等。在每个阶段掌握之后,再进行下一组…...

[蓝桥杯C++ 2024 国 B ] 立定跳远(二分)

题目描述 在运动会上,小明从数轴的原点开始向正方向立定跳远。项目设置了 n n n 个检查点 a 1 , a 2 , ⋯ , a n a_1, a_2, \cdots , a_n a1​,a2​,⋯,an​ 且 a i ≥ a i − 1 > 0 a_i \ge a_{i−1} > 0 ai​≥ai−1​>0。小明必须先后跳跃到每个检查…...

现代网络安全攻防技术与发展现状

1. 引言 随着数字化转型进程的加速,全球信息化程度不断深入,网络安全问题日益凸显。根据最新的统计数据,2022年全球范围内的网络攻击事件较前一年增长了约41%,造成的经济损失高达超过6万亿美元。在这个背景下,了解现代…...

杏仁海棠花饼的学习日记第十四天CSS

一,前言 第二天,今天看CSS。 二,CSS简介及导入方式 CSS简介 CSS(层叠样式表,Cascading Style Sheets)是一种用于描述 HTML 或 XML(包括 SVG、XHTML 等)文档呈现效果的样式语言。…...

ESP8266远程控制:实现网络通信与设备控制

概述: 最近一直在弄esp8266的网络通信,但是一直都还没搞懂到底esp8266可不可以通过连接一个网络过后,在很远的地方使用网络将其关掉 在网上找了两个教程都有程序,都跑通了 第一个 第二个找不到了,但是程序有 CSDN上放文…...

RabbitMQ监控:关键技术、技巧与最佳实践

RabbitMQ作为企业级消息中间件的核心组件,其稳定性和性能直接影响分布式系统的可靠性。有效的监控不仅能帮助快速定位问题,还能优化系统资源分配,预防潜在故障。本文基于RabbitMQ官方文档,深入探讨其监控的技术方案、实践技巧及最…...

【机器学习基础】机器学习入门核心算法:隐马尔可夫模型 (HMM)

机器学习入门核心算法:隐马尔可夫模型 (HMM) 一、算法逻辑与核心思想二、算法原理与数学推导核心问题与算法推导 三、模型评估四、应用案例1. 语音识别 (Speech Recognition)2. 自然语言处理 (Natural Language Processing - NLP)3. 手写体识…...

zookeeper 操作总结

zookeeper 中的节点类型 节点类型命令选项说明‌持久节点‌无选项(默认)永久存在,除非手动删除。‌临时节点‌-e与客户端会话绑定,会话结束自动删除(‌不能有子节点‌)。‌顺序节点‌-s节点名自动追加递增…...

golang 实现基于redis的并行流量控制(计数锁)

在业务开发中,有时需要对某个操作在整个集群中限制并发度,例如限制大模型对话的并行数。基于redis zset实现计数锁,做个笔记。 关键词:并行流量控制、计数锁 package redisutilimport ("context""fmt""…...

Leetcode 2819. 购买巧克力后的最小相对损失

1.题目基本信息 1.1.题目描述 现给定一个整数数组 prices,表示巧克力的价格;以及一个二维整数数组 queries,其中 queries[i] [ki, mi]。 Alice 和 Bob 去买巧克力,Alice 提出了一种付款方式,而 Bob 同意了。 对于…...

AI炼丹日志-25 - OpenAI 开源的编码助手 Codex 上手指南

点一下关注吧!!!非常感谢!!持续更新!!! Java篇: MyBatis 更新完毕目前开始更新 Spring,一起深入浅出! 大数据篇 300: Hadoop&…...

AnyConv OGG 转换器:轻松转换音频格式

在数字音频世界中,不同的文件格式适用于不同的场景和设备。OGG 是一种开放、免费的音频格式,具有高压缩率和良好的音质。然而,有时我们需要将 OGG 文件转换为其他格式,或者将其他格式转换为 OGG。这就是 AnyConv OGG 转换器发挥作用的地方。 什么是 AnyConv OGG 转换器? …...

C# 类和继承(使用基类的引用)

使用基类的引用 派生类的实例由基类的实例和派生类新增的成员组成。派生类的引用指向整个类对象,包括 基类部分。 如果有一个派生类对象的引用,就可以获取该对象基类部分的引用(使用类型转换运算符把 该引用转换为基类类型)。类…...

进程间通信(消息队列)

目录 一 原理 二 API 1. ftok 2. msgget 3. msgctl 4. msgsnd 5. msgrcv 三 demo代码 四 基于责任链模式和消息队列对数据处理 1. 什么是责任链模式 2. 下面基于责任链模式来对消息队列获取的消息进行处理 前置 其实system v 版本的进程间通信,设计的接…...

Linux gron 命令使用详解

简介 gron 是一个独特的命令行工具,用于将 JSON 数据转换为离散的、易于 grep 处理的赋值语句格式。它的名字来源于 “grepable on” 或 “grepable JSON”,主要解决在命令行中处理复杂 JSON 数据的难题。 核心价值 gron 的核心是将 JSON 数据展平为类…...

Nginx--手写脚本压缩和切分日志(也适用于docker)

原文网址:Nginx--手写脚本压缩和切分日志(也适用于docker)_IT利刃出鞘的博客-CSDN博客 简介 本文介绍nginx如何手写脚本压缩和切分日志。 1.创建切分日志的脚本 创建脚本文件:/work/tmp/nginx-log_sh(后边要用run-…...

OpenCv高阶(十八)——dlib人脸检测与识别

文章目录 一、dlib库是什么?二、opencv库与dlib库的优缺点对比1、opencv优缺点2、dlib库优缺点 三、dlib库的安装1、在线安装2、本地安装 四、dlib库的人脸检测器1. 基于 HOG 的检测器2. 基于 CNN 的检测器 五、dlib人脸检测的简单使用1、导入必要库2、初始化人脸检…...

中山大学无人机具身导航新突破!FlightGPT:迈向通用性和可解释性的无人机视觉语言导航

作者:Hengxing Cai 1 , 2 ^{1,2} 1,2, Jinhan Dong 2 , 3 ^{2,3} 2,3, Jingjun Tan 1 ^{1} 1, Jingcheng Deng 4 ^{4} 4, Sihang Li 2 ^{2} 2, Zhifeng Gao 2 ^{2} 2, Haidong Wang 1 ^{1} 1, Zicheng Su 5 ^{5} 5, Agachai Sumalee 6 ^{6} 6, Renxin Zhong 1 ^{1} …...

WIN11+CUDA11.8+VS2019配置BundleFusion

参考: BundleFusion:VS2019 2017 ,CUDA11.5,win11,Realsense D435i离线数据包跑通,环境搭建 - 知乎 Win10VS2017CUDA10.1环境下配置BundleFusion - 知乎 BundleFusionWIN11VS2019 CUDA11.7环境配置-CSDN博客 我的环境:Win 11…...

WPF prism

Prism Prism.Dryloc 包 安装 Nuget 包 - Prism.DryIoc 1. 修改 App.xaml 修改 App.xaml 文件&#xff0c;添加 prism 命名空间, 继承由 Application → PrismApplication&#xff0c;删除默认启动 url, StartupUri“MainWindow.xaml” <dryioc:PrismApplicationx:Class…...

实时同步缓存,与阶段性同步缓存——补充理解《补充》

根据 Redis 缓存的数据与 DBMS 中数据的同步性划分&#xff0c;缓存一般可划分为两类&#xff1a;实时同步缓存&#xff0c;与阶段性同步缓存。 实时同步缓存是指&#xff0c;DBMS 中数据更新后&#xff0c;Redis 缓存中的存放的相关数据会被立即清 除&#xff0c;以促使再有对…...

[Redis] Redis:高性能内存数据库与分布式架构设计

标题&#xff1a;[Redis] 浅谈分布式系统 水墨不写bug 文章目录 一、什么是Redis&#xff1f;一、核心定位二、核心优势三、典型应用场景四、Redis vs 传统数据库 二、架构选择与设计1、单机架构&#xff08;应用程序 数据库服务器&#xff09;2、应用程序和数据库服务器分离3…...

Mobaxterm解锁Docker

Mobaxterm是一款功能强大的终端模拟器和SSH客户端&#xff0c;它支持Windows、Linux和Mac操作系统&#xff0c;对于使用Docker的开发者和运维人员来说&#xff0c;Mobaxterm是一个非常有用的工具。本文将深入解析Mobaxterm&#xff0c;并分享一些使用Docker时的高效技巧。 Mob…...

React 第四十九节 Router中useNavigation的具体使用详解及注意事项

前言 useNavigation 是 React Router 中一个强大的钩子&#xff0c;用于获取当前页面导航的状态信息。 它可以帮助开发者根据导航状态优化用户体验&#xff0c;如显示加载指示器、防止重复提交等。 一、useNavigation核心用途 检测导航状态&#xff1a;判断当前是否正在进行…...