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

用户界面软件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&#xff0c;应该使用 v-bind 指令 <template><div v-bind:id"dynamicId" v-bind:class"dynamicClass">…...

FFmpeg音视频流媒体,视频编解码性能优化

你是不是也有过这样一个疑问&#xff1a;视频如何从一个简单的文件变成你手机上快速播放的短片&#xff0c;或者是那种占满大屏幕的超高清大片&#xff1f;它背后的法宝&#xff0c;离不开一个神奇的工具——FFmpeg&#xff01;说它强大&#xff0c;完全不为过&#xff0c;它在…...

16_Redis Lua脚本

Redis Lua脚本是Redis提供的一种强大的扩展机制。 1.Redis Lua脚本介绍 1.1 基本概念 Redis Lua脚本允许开发者将一段Lua语言编写的代码发送给Redis服务器执行。这项功能自Redis 2.6版本引入以来,为用户提供了强大的灵活性和扩展能力,使得可以在Redis内部直接处理复杂的业…...

Redis为 List/Set/Hash 的元素设置单独的过期时间

一.业务简介 我们知道&#xff0c;Redis 里面暂时没有接口给 List、Set 或者 Hash 的 field 单独设置过期时间&#xff0c;只能给整个列表、集合或者 Hash 设置过期时间。 这样&#xff0c;当 List/Set/Hash 过期时&#xff0c;里面的所有 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) 防火墙&#xff08;Firewall&#xff09; 和 入侵检测系统&#xff08;IDS, Intrusion Detection System&#xff09; 都是网络安全的关键组件&#xff0c;但它们的作用、功能和工作方式有所不同。 防火墙 防火墙是网络安全的一种设备或软件&#…...

KG-CoT:基于知识图谱的大语言模型问答的思维链提示

一些符号定义 知识图谱实体数量&#xff1a; n n n 知识图谱中关系类型数量&#xff1a; m m m 三元组矩阵&#xff1a; M ∈ { 0 , 1 } n n m \textbf{M} \in \{0, 1\}^{n \times n \times m} M∈{0,1}nnm&#xff0c; M i j k 1 M_{ij}^k 1 Mijk​1则说明实体 i i i和实…...

【JMeter】多接口关联

1. 同一线程组内,如何实现多接口关联 非加密的值 前置接口的返回单条数据使用Json提取器提取前置接口的返回多条数据使用Json提取器+逻辑控制器Loop Controller前置接口的返回多条数据使用Json提取器+逻辑控制器forEach加密的值 前置接口的返回值使用Beanshell后置提取器存储为…...

2020 年 12 月青少年软编等考 C 语言五级真题解析

目录 T1. 漫漫回国路思路分析T2. 装箱问题思路分析T3. 鸣人和佐助思路分析T4. 分成互质组思路分析T1. 漫漫回国路 2020 年 5 月,国际航班一票难求。一位在美国华盛顿的中国留学生,因为一些原因必须在本周内回到北京。现在已知各个机场之间的航班情况,求问他回不回得来(不考…...

前端实时显示当前在线人数的实现

实时显示当前在线人数的实现 本文档提供了在网页上实时显示当前在线人数的多种实现方法&#xff0c;包括使用 WebSocket 实现实时更新和轮询方式实现非实时更新。 方法一&#xff1a;使用 WebSocket 实现实时更新 服务器端设置 通过 Node.js 和 WebSocket 库&#xff08;如 …...

Linux第一个系统程序---进度条

进度条---命令行版本 回车换行 其实本质上回车和换行是不同概念&#xff0c;我们用一张图来简单的理解一下&#xff1a; 在计算机语言当中&#xff1a; 换行符&#xff1a;\n 回车符&#xff1a;\r \r\n&#xff1a;回车换行 这时候有人可能会有疑问&#xff1a;我在学习C…...

vscode 无法使用npm, cmd命令行窗口可以正常执行

解决方法&#xff1a; 执行命令获得命令的位置 get-command npm 得到如下 然后删除或者修改 npm.ps1文件 让其不能使用就行。然后重启vscode即可。 pnpm 同理即可 另外加速源 国内镜像源&#xff08;淘宝&#xff09;&#xff1a; npm config set registry https://regist…...

Leetcode 967 Numbers With Same Consecutive Differences

题意 给定n&#xff0c;代表整数的长度&#xff0c;给定k代表两个相邻数字之间的间隔。求所有的值构成的组合 题目链接 https://leetcode.com/problems/numbers-with-same-consecutive-differences/description/ 题解 dfs&#xff0c;有k位置要选&#xff0c;第一个位置我…...

node.js中实现token的生成与验证

Token&#xff08;令牌&#xff09;是一种用于在客户端和服务器之间安全传输信息的加密字符串。在Web开发中&#xff0c;Token常用于身份验证和授权&#xff0c;确保用户能够安全地访问受保护的资源。 作用与意义 身份验证&#xff1a;Token可以用来验证用户的身份&#xff0…...

[C++11]_[初级]_[工作线程如何监听主线程条件变量wait_for方法的使用]

场景 在开发多线程程序时&#xff0c;有时候需要启动一个线程来监听外部进程的执行情况&#xff0c;并且在指定时间如果还没运行结束就强制结束外部线程。那么C标准库有这种监听线程并能在超时时提示的方法吗&#xff1f; 说明 在C11的<condition_variable>里就可以用…...

Openstack持久存储-Swift,Cinder,Manila三者之间的区别

总结不易&#xff0c;给个三连吧&#xff01;&#xff01;&#xff01; 补充&#xff1a; 文件共享存储服务Manila 在OpenStack生态系统中&#xff0c;Cinder和Manila分别提供了两种不同类型的存储服务&#xff0c;类似于传统的SAN&#xff08;存储区域网络&#xff09;和NAS&…...

深度学习第三弹:python入门与线性表示代码

一、python入门 1.熟悉基础数据结构——整型数据&#xff0c;浮点型数据&#xff0c;列表&#xff0c;字典&#xff0c;字符串&#xff1b;了解列表及字典的切片&#xff0c;插入&#xff0c;删除操作。 list1 [1, 2, 3, 4, 5] for each in list1:print(each) print(list1[1…...

解决报错记录:TypeError: vars() argument must have __dict__ attribute

解决报错记录&#xff1a;manager_pyplot_show vars(manager_class).get(“pyplot_show“) TypeError: vars() argument must 1.问题引申 在pycharm中调用matplotlib函数批量绘制维度图时&#xff0c;抛出异常&#xff1a; manager_pyplot_show vars(manager_class).get(&…...

软件下载网站地址/深圳企业网站制作

点击上方“Python进击者”&#xff0c;选择“星标”公众号重磅干货&#xff0c;第一时间送达数据分析不是一门课&#xff0c;更多的是一种能力&#xff01;前言Hello&#xff0c;各位小伙伴&#xff0c;今天开始我们来学习数据分析、处理相关的知识。有一部分读者知道我主要学习…...

免费网站模板源码/互联网推广平台

联合编译C版本gdal编译过程文档gdal联合编译C版本proj.4、geos、hdf4、hdf5、netcdf各依赖库源代码版本及下载地址gdalProj.4geosHDF4HDF5netCDF编译环境及工具版本编译安装1、 编译geos2、 编译proj.43、 修改gdal的编译配置文件make.opt4、 编译gdal编译及运行过程中可能出现…...

建设银行网站介绍/一站式网络推广服务

##JSON-RPC ---------- JSON-RPC是一个轻量级的远程调用协议&#xff0c;简单易用。 **请求数据体**: { "method": "getName", "params": ["1"], "id": 1 } method: 远端的方法名 params: 远程方法接收的参数列表 id: 本次请…...

三端互通传奇手游找服网站/最有效的15个营销方法

在使用电脑的时候&#xff0c;如果我们需要将一个分区的全部资料进行转移&#xff0c;放置在新的分区中&#xff0c;往往需要很长时间来复制粘贴&#xff0c;效率很低。那么如何才能快速的转移资料到新分区呢?其实&#xff0c;我们可以通过克隆分区的方式来进行分区资料的快速…...

一级a做爰片免费网站孕交视频教程/2023年8月新闻热点事件

numpy模块中的矩阵对象为numpy.matrix&#xff0c;包括矩阵数据的处理&#xff0c;矩阵的计算&#xff0c;以及基本的统计功能&#xff0c;转置&#xff0c;可逆性等等&#xff0c;包括对复数的处理&#xff0c;均在matrix对象中。 class numpy.matrix(data,dtype,copy):返回一…...

wordpress被攻击/花关键词排名系统

Requests 获取响应内容1&#xff0c;Requests 获取响应内容1&#xff0c;Requests 获取响应内容 url.text 响应内容url.encoding 文本编码 #!/usr/local/bin/python3 import requests url requests.get(https://filscan.io:8700/v0/filscan/BaseInformation)print ("He…...