用户界面软件05

news2025/1/13 6:49:25

已知应用

几乎所有的流行的用户界面架构都使用这种模式。我在这里举三个例子:

1. Seeheim 用户界面架构的特点是有一个应用核心的领域层和一个用户界面层。后者
被分为两层,叫做表示层和对话控制层。因为这个架构和面向事务系统有渊源,没有从应用
核心到用户界面的回调机制。

2. 可能最流行的例子是模型-视图-控制器(MVC)架构[BMR+96]。视图和控制器
类构成用户界面层,而模型类构成领域层。视图和控制器可以发送特定消息给模型,反之则
不行。一个观察者(Observer)提供从模型到视图的回调机制。

IBM Visual Age for SmallTalk 允许程序员用部件(parts)构成应用程序,这个架构中有可视
化部件(Visual Parts),例如菜单,树状图,窗体,还有非可视化部件包装了一般的SmallTalk 类。

有条理地使用的话,可视化部件对应于用户界面层,而非可视化部件则对应于领域层。
参考 [BMR+96]对层状架构进行了深入的讨论。

子系统架构

在你决定使用用户界面层(User Interface Layer)后,工作才刚刚开头。牢记分层的主要目的:封装复杂的用户界面。所以,通常情况下,将整个用户界面层实现为一块并不是一个好办法。因此,下一步就是寻找子系统。

有四个子系统组成了整个架构:分离转换(Separate Transformation),配件模型(Widget Model),域层存取(Domain Layer Access),以及上下文支持(Context Support)。你几乎可以在每个用户界面架构里面找到Separate Transformation, Widget Model, Domain Layer Access 的影子,但Context Support 则视环境而言。

分离转换(Separate Transformation)

概要 将信息显示在屏幕上和处理用户的动作是两件复杂的不同任务。所以将用户动作到领域层调
用的转换,和同领域信息到屏幕信息的转换分离。

上下文 在你决定使用一个用户界面层(User Interface Layer)之后,工作才刚刚开始。你得定义用户界面的详细结构,通常输入和输出会很清楚地分开考虑。特别是当你使用直接操作,和
Tool-Material 隐喻时。显示信息和处理操作都是非常复杂的。因此……

问题 如何将输入和输出过程分配给子系统?

要得到一个解决方案,你需考虑几个约束:

约束 可视化和操作是复杂的任务,但是它们是紧紧联系在一起的。

让我们来看一下一个新闻阅读器在不同线索下的树状图。它由几个不同的图形元素,如线条,
图标等构成。所有的这些图形元素显示领域层的信息,比如状态等。对这些表示的控制需要一些
很棒的复杂的软件。除了外观之外,这个窗体还要能用多种方式阅读帖子,进行标记,回帖,或者保存。用户使用弹出菜单或下拉菜单,以及拖放技术来完成大部分的动作。控制这些动作,以
及将这些动作转到领域层也是复杂的任务。所以,将可视化和操作分离的话,很有吸引力。不过,
这个办法行得通吗?两部分都相互紧紧地联系在一起:首先,它们都在同样的领域层对象上,比
如一个新闻帖子;另外,同一界面实体可能同时代表可视化和操作。比如每个作者名字前面的小
菱形,在可视化方面表示目前我还没有阅读过这个帖子(尽管早应该读了),如果你点击一下它,
阅读器就将相应的帖子标记为已读,这很明显是是一个操作任务。

可视化和操作强调了领域层的不同特性……但通常工作在同样的领域层对象上。

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

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

相关文章

虚拟文件系统 VFS

目录 虚拟文件系统 VFS 文件系统挂载过程 虚拟文件系统 VFS 统一标准的系统调用接口: VFS定义了一组标准的文件操作API,如open(), read(), write(), close()等,使得用户空间的应用程序无需关心底层文件系统的具体类型。 下层文件系统必须实现…

conda 批量安装requirements.txt文件

通常可以用下面conda命令安装requirements.txt文件 conda install --yes --file requirements.txt 但是,一旦遇到某个包安装失败,就会停止安装后续的包。 下面这条命令能解决上面出现的不执行后续包的问题,需要在CMD窗口执行: 点…

Auto-CoT:自动构建大模型的思维链提示

今天分享的是由上海交通大学发表的一篇文章:Auto-COT 论文题目:AUTOMATIC CHAIN OF THOUGHT PROMPTING IN LARGE LANGUAGE MODELS 论文链接:https://arxiv.org/pdf/2210.03493 代码地址:https://github.com/amazon-science/aut…

算法练习7——拦截导弹的系统数量求解

题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。 假设某天雷达捕捉到敌国的导弹来袭。由于该系统还在试用…

命令行中打印二维码

前公司中登录设备时,需要下发密钥,密钥是通过扫描终端中的二维码获得的,终端中的二维码类似这样: 当时没理解原理,现在研究了下如何在命令行中打印二维码。主要介绍其中一些开源工具: 1. qrencode 简介 …

Android车机DIY开发之软件篇(八)单独编译

Android车机DIY开发之软件篇(八)单独编译 1.CarLauncher单独编译 CarLauncher源码位于 packages/apps/Car/Launcher 用Eclipse ADT 谷歌定制版编译而成,.mk .bp编译 Android13目录如下: alientekalientek:~/packages/apps/Car$ ls Calendar …

3 前端: Web开发相关概念 、HTML语法、CSS语法

文章目录 前言:导学1 Web开发相关概念2 Web标准(网页标准)3 软件架构(CS/BS)(1)C/S: Client/Server 客户端 / 服务器端(2)B/S: Browser/Server 浏览器 / 服务器端VSCode配置前段开发环境一、HTML概念1 概念2 HTML快速入门(1)语法快速入门(2)VSCode一个 !(快捷键…

Redis:内存管理

1. 最大内存限制 (maxmemory) 简介 概念:maxmemory 参数用于设置 Redis 实例允许使用的最大内存量。作用:当 Redis 使用的内存达到这个限制时,它会根据配置的淘汰策略来决定如何处理新的写入请求或移除现有数据。示例 # 设置最大内存为2GB maxmemory 2gb注意事项 合理规划…

C语言进阶——1数据的存储

目录 1. 数据类型介绍1.1 类型的基本归类:1.1.1 整形家族1.1.2 浮点型家族1.1.3 构造类型:1.1.4.指针类型1.1.5 void 表示空类型(无类型) 2. 整形在内存中的存储2.1 原码、反码、补码2.1.1 示例 20在计算机中的存储 2.2 大小端2.2…

OpenAI 故障复盘 - 阿里云容器服务与可观测产品如何保障大规模 K8s 集群稳定性

本文作者: 容器服务团队:刘佳旭、冯诗淳 可观测团队:竺夏栋、麻嘉豪、隋吉智 一、前言 Kubernetes(K8s)架构已经是当今 IT 架构的主流与事实标准(CNCF Survey[1])。随着承接的业务规模越来越大,用户也在使…

【微服务】面试 1、概述和服务发现

微服务面试题 课程内容架构 Spring Cloud 部分 服务注册:重点讲解(Nacos)和(Eureka),这是微服务架构中实现服务发现与注册的关键组件,确保服务间能够相互定位与通信。负载均衡:涵盖…

Mybatis冲冲冲00(含如何配置模版文件)

官方网站:mybatis – MyBatis 3 | 入门 mybatis安装方式1.下jar包(网址在上),2.Maven(代码也由上可找) 两个核心配置文件 1.核心主配置文件:configuration.xml(文件名自定义),通常设置为mybatis-config.xml 2.SQL映射文件:mapper.xml(文件名自定义),通常设置为:实体类名.xml…

【Rust】引用与借用

目录 思维导图 1. 引用与借用的基本概念 1.1. 引用示例 2. 借用的规则 2.1. 可变借用示例 2.2. 借用的限制 3. 引用的生命周期 思维导图 1. 引用与借用的基本概念 引用的定义:引用是一种指向数据的指针,但与裸指针不同,Rust的引用在编…

django网上商城系统

Django网上商城系统是一种基于Django框架构建的电子商务解决方案,它充分利用了Django框架的强大功能,为开发者提供了一个快速构建在线商店的平台。 一、系统架构与技术栈 Django网上商城系统采用MVC(模型-视图-控制器)架构&…

Node.js - 模块化与包管理工具

1. 前言 模块化是代码组织的方式,而包管理工具是管理模块的工具。在现代项目开发中,模块化和包管理工具几乎是不可分割的一部分,它们一起构成了高效的开发工作流。 包代表了一组特定功能的源码集合,包管理工具可以对包进行下载安…

贪心算法汇总

1.贪心算法 贪心的本质是选择每一阶段的局部最优,从而达到全局最优。 如何能看出局部最优是否能推出整体最优 靠自己手动模拟,如果模拟可行,就可以试一试贪心策略,如果不可行,可能需要动态规划。 如何验证可不可以…

leetcode-最长递增子序列

300. 最长递增子序列 - 力扣(LeetCode) 动态规划的题目我真的不想看题解,题解都是直接推出来动态转移方程,我就很纳闷,到底是怎么推出来的呢?什么样的智慧,上来分析问题就是那么的清晰有条理。我…

Qt 5.14.2 学习记录 —— 십일 QLCDNumber、ProgressBar、QCalendarWidget

文章目录 1、QLCDNumber2、ProgressBar3、QCalendarWidget 1、QLCDNumber 写一个倒计时程序。拖一个LCD Number到界面: 定时器用Qt的QTimer类,这个类的对象会产生一个timeout信号,通过start方法来开启定时器,并且参数中设定触发ti…

VDN 微服务架构搭建篇(二)服务注册与配置中心Nacos

VDN 微服务架构搭建篇(二):服务注册与配置中心 Nacos 本文将介绍如何使用 Spring Cloud Alibaba 和 Nacos 搭建服务注册与配置中心,重点讲解如何实现微服务架构中的服务发现、自动注册、配置管理以及动态配置刷新等功能。通过整合…

高等数学学习笔记 ☞ 单调性、凸凹性、极值、最值、曲率

1. 单调性 1. 单调性定义:设函数在区间上有定义,对于区间上任意两点,若: ①:当时,恒有,则称函数在区间上单调递增。 ②:当时,恒有,则称函数在区间上单调递减…