用户界面软件04
后果 使用这种架构很容易对两个层面的非功能性需求进行优化,但是你仍然需要小心不要将功能
需求重复实现。
现在,两个层面可能有完全不同的设计。比如,用户界面层可能使用配件模型(Widget Model),
以大量的视图来支撑,而领域层则基于分析模型。当布局设计发生变化时只会局部影响界面层,
但是性能需求的变化则集中在领域模型上。但是,又有新的地方需要注意:如果在两个层面冗余
地实现功能性需求的话,是有很大的风险的。例如,当一个对话框中没有符合业务规则的相关内容时,“OK”按钮要被禁止使用。我们会很希望将这个业务规则放在对话框类里面,令一方面,
在你的领域逻辑模型中也需要这样的标准(规则)。现在,当这个规则发生变化时,事情就乱套
了:你得在两个或更多地方进行修改。为了避免这些风险,域模型经常会提供这个领域的亚信息。
有效性方法(Availability Method)和领域层面类型(Domain Level Type)就处理这个问题。
层状设计让我们可以对它们分开考虑……但仍然需要一些预防措施,使得两个层面耦合,可
控。
经过这种模式的严格训练,你可以确保将表示部分和领域层面部分严格分离。当你为职责分
配(比如,应该放在界面部分呢,还是领域部分时)而举棋不定时,关键问题是:如果我将用户
界面换成批处理方式,这个功能还需要不需要?作为一个大致的规则,如果答案是“需要”,可
能将其放入领域层更合适一些;如果答案是“不需要”,你可能逮着了一个用户界面职责(功能)。
但是,在最后在两个层面间还有一个很广的接口。这些信息可以如下分类:
用户当前在使用的对象的只读上下文信息,
• 格式化规则,
• 关于某个特定动作能否在当前上下文中执行的信息,
• 领域层面的状态和进度信息,
• 触发行为(事务),以及
• 错误信息
领域层面存取(Domain Layer Access)讨论这些话题。
两个层面之间的实际信息流量依用户界面风格而定。假如你的用户界面是基于对话框的,有
一系列的表单,通常情况下就比“工具加材料”的模式上下文信息少一些。这就是为什么基于Web
的应用程序和大型机系统通常使用表单而好的基于PC 的系统则经常使用tool-material 隐喻的
深层次原因。
不是所有的现代开发环境都支持这种架构,假如支持的话,通常也需要更多的工作……然而,
这种层次架构仍然使得你能自由地对同一个系统进行不同的表示。
很多流行的框架(Framework)采用以用户界面为中心的方案。当用户点击了一个按钮,框
架就会调用相应的按钮对象的“点击”方法。至于在这个方法里面的动作则是程序员的事情。通
常情况下,是没有标准的过程甚至类来管理和领域层的通信的。所以,就需要通过训练来保证分
层-这不容易,特别是在进度安排紧张的情况下。但是,当你需要另外的表示时一个干净利落的
分层可以节省很多工作。你只需要将图形用户界面类替换为批处理方式类,或者一个CORBA 接口。
即使你不打算使用CORBA 接口,你也在分析操作时可以很快地给同一个领域层以不同的表示。例
如,很多界面支持通过剪贴板和拖放(Drag & Drop)来复制。两者都要求有不同的用户界面活
动和相同的领域层功能。
额外的层面可以使得用户界面适应一群用户的特别需求……但仍然不能把稻草变为黄金。
假如在领域层面使用了这个领域的元模型,顶层可以使用这些信息来组成一个界面,来组合
成一个用户的思维模型。例如,你可以表示域对象的硬编码属性,用同样的方法表示属性列表,
然后在用户面前隐藏这个属性列表。然而,领域层还必须支持转换。以一个面向事务系统的图形
界面化为反例:很多客户想,用一系列的HTML 表单来处理3270 个基于主机系统的表单,来形成
一个“现代的”用户界面已经足够。然而,一个成功的基于窗体的用户界面却来源于完全不同的
范式。现代界面不对业务过程建模,但提供一个工具集由用户自己来修改业务元素。显示在屏幕
上的大部分信息和用户在使用的特定业务过程没有关系――只是辅助用户的额外信息。从技术观
点来看,这意味着需要要比传统的系统提供更多的信息,在传统的系统里面用户知道其业务代码,
能正确地输入系统所需的数据。结果是这些系统的领域层被优化来处理事务,而不是提供所有的
额外信息。在最好的情况下,你会撞上性能问题,在最坏的情况下,你不得不重写整个系统。
相关文章:
用户界面软件04
后果 使用这种架构很容易对两个层面的非功能性需求进行优化,但是你仍然需要小心不要将功能 需求重复实现。 现在,两个层面可能有完全不同的设计。比如,用户界面层可能使用配件模型(Widget Model), 以大量的…...
C#,数值计算,矩阵相乘的斯特拉森(Strassen’s Matrix Multiplication)分治算法与源代码
Volker Strassen 1 矩阵乘法 矩阵乘法是机器学习中最基本的运算之一,对其进行优化是多种优化的关键。通常,将两个大小为N X N的矩阵相乘需要N^3次运算。从那以后,我们在更好、更聪明的矩阵乘法算法方面取得了长足的进步。沃尔克斯特拉森于1…...
linux:文件的创建/删除/复制/移动/查看/查找/权限/类型/压缩/打包
关于文件的关键词 创建 touch 删除 rm 复制 cp 权限 chmod 移动 mv 查看内容 cat(全部); head(前10行); tail(末尾10行); more,less 查找 find 压缩 gzip ; bzip 打包 tar 编辑 sed 创建文件 格式: touch 文件名 删除文件 复制文件 移动文件 查看文…...
SQL Server查询计划操作符——查询计划相关操作符(3)
7.3. 查询计划相关操作符 19)Collapse:该操作符对更改处理进行优化。当执行一个更改时,其能被劈成(用Split操作符)一个删除和一个插入。其参数列包含一个确定一系列键值字段的GROUP BY:()子句。如果查询处理器遇到删除和插入相同键值的毗邻行,其将用一个更高效的更改操作…...
【Notepad++】Notepad++如何删除包含某个字符串所在的行
Notepad如何删除包含某个字符串所在的行 一,简介二,操作方法三,总结 一,简介 在使用beyoundcompare软件进行对比的时候,常常会出现一些无关紧要的地方,且所在行的内容是变化的,不方便进行比较&…...
Android 来电白名单 只允许联系人呼入电话
客户需求只允许通讯录中联系人可以呼入电话。参考自带的黑名单实现 CallsManager.java类中的onSuccessfulIncomingCall方法有一些过滤器,可以仿照黑名单的方式添加自己的过滤器。 packages/services/Telecomm/src/com/android/server/telecom/CallsManager.java …...
【计算机网络】lab3 802.11 (无线网络帧)
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀计算机网络_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2.…...
单片机(MCU)-简单认识
简介: 内部集成了CPU,RAM,ROM,定时器,中断系统,通讯接口等一系列电脑的常用硬件功能。 单片机的任务是信息采集(依靠传感器),处理(依靠CPU)&…...
全面教程:Nacos 2.3.2 启用鉴权与 MySQL 数据存储配置
全面教程:Nacos 2.3.2 启用鉴权与 MySQL 数据存储配置 1. 配置 Nacos 开启鉴权功能 1.1 修改 application.properties 配置文件 在 Nacos 2.3.2 中,开启鉴权功能需要修改 conf/application.properties 文件。按照以下方式配置: # 开启鉴权…...
软件23种设计模式完整版[附Java版示例代码]
一、什么是设计模式 设计模式是在软件设计中反复出现的问题的通用解决方案。它们是经过多次验证和应用的指导原则,旨在帮助软件开发人员解决特定类型的问题,提高代码的可维护性、可扩展性和重用性。 设计模式是一种抽象化的思维方式,可以帮助开发人员更好地组织和设计他们…...
国标GB28181-2022视频平台EasyGBS小知识:局域网ip地址不够用怎么解决?
在局域网中,IP地址不足的问题通常不会在小型网络中出现,但在拥有超过255台设备的大型局域网中,就需要考虑如何解决IP地址不够用的问题了。 在企业局域网中,经常会出现私有IP地址如192.168.1.x到192.168.1.255不够用的情况。由于0…...
PHP 循环控制结构深度剖析:从基础到实战应用
PHP 循环控制结构深度剖析:从基础到实战应用 PHP提供了多种控制结构,其中循环控制结构是最常见的结构之一。它们使得我们能够高效地重复执行一段代码,直到满足某个条件为止。本文将从PHP循环的基础知识出发,逐步分析其在实际项目…...
vue的属性绑定
重建一个新的项目 App.vue main.js HelloWorld.vue 属性绑定 双大括号不能在 HTML attributes 中使用。想要响应式地绑定一个 attribute,应该使用 v-bind 指令 <template><div v-bind:id"dynamicId" v-bind:class"dynamicClass">…...
FFmpeg音视频流媒体,视频编解码性能优化
你是不是也有过这样一个疑问:视频如何从一个简单的文件变成你手机上快速播放的短片,或者是那种占满大屏幕的超高清大片?它背后的法宝,离不开一个神奇的工具——FFmpeg!说它强大,完全不为过,它在…...
16_Redis Lua脚本
Redis Lua脚本是Redis提供的一种强大的扩展机制。 1.Redis Lua脚本介绍 1.1 基本概念 Redis Lua脚本允许开发者将一段Lua语言编写的代码发送给Redis服务器执行。这项功能自Redis 2.6版本引入以来,为用户提供了强大的灵活性和扩展能力,使得可以在Redis内部直接处理复杂的业…...
Redis为 List/Set/Hash 的元素设置单独的过期时间
一.业务简介 我们知道,Redis 里面暂时没有接口给 List、Set 或者 Hash 的 field 单独设置过期时间,只能给整个列表、集合或者 Hash 设置过期时间。 这样,当 List/Set/Hash 过期时,里面的所有 field 元素就全部过期了。但这样并不…...
鸿蒙中调整应用内文字大小
1、ui Stack() {Row() {ForEach([1, 2, 3, 4], (item: number) > {Text().width(3).height(20).backgroundColor(Color.Black).margin(item 2 ? { left: 8 } : item 3 ? { left: 7 } : { left: 0 })})}.width(97%).justifyContent(FlexAlign.SpaceBetween).padding({ ri…...
计算机网络之---防火墙与入侵检测系统(IDS)
防火墙与入侵检测系统(IDS) 防火墙(Firewall) 和 入侵检测系统(IDS, Intrusion Detection System) 都是网络安全的关键组件,但它们的作用、功能和工作方式有所不同。 防火墙 防火墙是网络安全的一种设备或软件&#…...
KG-CoT:基于知识图谱的大语言模型问答的思维链提示
一些符号定义 知识图谱实体数量: n n n 知识图谱中关系类型数量: m m m 三元组矩阵: M ∈ { 0 , 1 } n n m \textbf{M} \in \{0, 1\}^{n \times n \times m} M∈{0,1}nnm, M i j k 1 M_{ij}^k 1 Mijk1则说明实体 i i i和实…...
【JMeter】多接口关联
1. 同一线程组内,如何实现多接口关联 非加密的值 前置接口的返回单条数据使用Json提取器提取前置接口的返回多条数据使用Json提取器+逻辑控制器Loop Controller前置接口的返回多条数据使用Json提取器+逻辑控制器forEach加密的值 前置接口的返回值使用Beanshell后置提取器存储为…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
HubSpot推出与ChatGPT的深度集成引发兴奋与担忧
上周三,HubSpot宣布已构建与ChatGPT的深度集成,这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋,但同时也存在一些关于数据安全的担忧。 许多网络声音声称,这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...
