读软件设计的要素06概念完整性
1. 概念完整性
1.1. 当概念组合成一个软件时,它们可以同步以便协调行为
-
1.1.1. 同步可能会消除一个概念的某些行为,但决不会添加与该概念的规范不一致的新行为
-
1.1.2. 在使用概念设计软件时,即使你没有精确定义同步,至少要说服自己,概念之间的每次交互至少在原则上都可以被视为同步
1.2. 如果概念组合的方式不正确,从特定概念的操作和结构来看,概念的行为可能会破坏它的规范
1.3. 概念违反完整性的行为会使用户感到困惑,因为他们针对概念行为的心智模型受到了破坏
1.4. 当一个由概念组成的系统运行时,每个概念也都作为一个“小机器”运行着,控制着操作发生的时间及其对概念状态的影响
- 1.4.1. 同步使一个概念的操作与另一个概念的某些操作同时发生,这能进一步约束操作
1.5. 一个概念不能直接改变另一个概念的状态,也不能以某种方式改变概念的某个操作行为
1.6. 如果概念的实现框架允许它们以其他方式交互,或者代码中出现错误,那么一个概念可能会以一种违反它自身规范的方式运行
- 1.6.1. 一些调整可能会在保留概念规范的基础上添加一些新的功能,也有一些调整可能会直接破坏概念规范
1.7. 当一个概念与其他概念组合时,保持概念的完整性至关重要
1.8. 如果你在使用软件或分析可用性问题时遇到问题,并发现某个概念的行为方式比较异常,请想想这是否能归咎于另一个概念的干扰
1.9. 为了保证概念完整性,请确保一个看似通用的概念确实是通用的
2. 预订
2.1. 假设有一个餐厅的老板因餐厅的综合评级较低而感到十分沮丧,他决定入侵该软件来惩罚恶意差评的顾客
2.2. 他修改了软件设置以便恶意差评的顾客在后续预订时,即使没有取消预订,当他们到达餐厅时也没有预订记录,因此没有餐桌供他们使用
-
2.2.1. 行为不符合任何合法的同步原则
-
2.2.1.1. 不仅将两个概念结合在一起,还破坏了预订这个概念
-
2.2.1.2. 违反概念完整性的行为
-
2.3. 假设报复顾客的餐厅老板入侵了该软件,使得任何顾客只要发布差评就会失去在任何餐厅的任何预订
-
2.3.1. 可怜的顾客尽管从未打算取消预订,但仍可能收到取消通知,因为预订概念与通知概念同步
-
2.3.2. 在给出通知的情况下取消预订不侵犯预订概念的完整性,因为从预订概念的规范来看,它是完全可以理解的
2.4. 预订概念的规范没有提及谁可以取消预订
3. 字体格式
3.1. 文本格式有三个简单的属性:粗体(Bold)、斜体(Italic)和下划线(Underline)
3.2. 真正的印刷体斜体从来不是罗马式斜体,而是更流畅和有书法效果的经典版本
3.3. 有了这些丰富的字体,所有的麻烦都烟消云散了,但格式切换概念也不再有效
- 3.3.1. 字体概念的扩展破坏了格式切换概念
4. Google Drive
4.1. 同步的目的是保持两个文件夹之间的一致性,其操作原则是一个文件夹中的任何改动也会作用于另一个文件夹
4.2. 与备份概念不同,同步概念也会传递删除操作,这会让文件井井有条
4.3. 同步概念的一个基本属性是两个集合中的文件副本完全一致
5. 战略家、分析师和技术顾问
5.1. 识别概念及其价值是最重要的,而设计单个概念的细节则是次要的
5.2. 考虑的问题
-
5.2.1. 有哪些关键概念
-
5.2.1.1. 关键概念是什么
-
5.2.1.2. 通过构建概念清单,你将获得概念功能的“鸟瞰图”,即思考战略行动的视角
-
5.2.1.3. 构建这些概念的依赖关系图,看看它们如何相互关联,以及哪些概念处于核心位置
-
-
5.2.2. 概念是否发生了变化
- 5.2.2.1. 当你查看现有系统中的概念时,确定每个概念是何时引入的,并研究它们是否随时间的推移发生了变化或持续保持稳定
-
5.2.3. 最有价值的概念是什么
- 5.2.3.1. 是否有一个杀手级的概念
-
5.2.4. 是否有让人困惑的概念
-
5.2.5. 定义软件系列的共享概念是什么
-
5.2.5.1. 共享同一概念的不同软件彼此一致,还是存在随机的微小差异?
-
5.2.5.2. 如果将多个软件中出现的概念统一起来,它们将来可能会有共享概念
-
-
5.2.6. 每一个概念的目的分别是什么
-
5.2.7. 是否有缺失的概念
-
5.2.8. 竞争对手的概念是什么
- 5.2.8.1. 看看同一领域的竞争软件,盘点一下它们的关键概念
6. 交互设计师和产品经理
6.1. 还需要关注单个概念的设计和实现问题,以及概念的可用性问题
6.2. 考虑的问题
-
6.2.1. ①传达给用户的概念是否一致
- 6.2.1.1. 你的软件是否通过它的用户界面、用户手册和帮助指南等支持材料,将概念成功地传达给了用户
-
6.2.2. ②如何解释概念
- 6.2.2.1. 令人信服地展示了每个概念实现其目的的设计方式?
-
6.2.3. ③是否有可用性问题
-
6.2.4. ④软件都有哪些概念
-
6.2.5. ⑤是否有冗余概念
-
6.2.6. ⑥是否有概念过载
-
6.2.7. ⑦概念可以被分解吗
-
6.2.8. ⑧是否有效使用了熟悉的概念
-
6.2.9. ⑨概念是如何同步的
-
6.2.9.1. 是否存在同步不足的情况
-
6.2.9.2. 是否存在同步过度的情况
-
-
6.2.10. ⑩是否在利用协同效应
-
6.2.11. ⑾概念是否能有效地映射到用户界面
-
6.2.12. ⑿是否分析过概念的依赖关系
-
6.2.13. ⒀概念是否可以完整地组合在一起
- 6.2.13.1. 每个概念单独来看都是合理的,但当与软件中的其他概念组合在一起时,单个概念的合理性可能会被削弱
-
6.2.14. ⒁概念的知识是否有安全的文档记录
-
6.2.14.1. 一个概念设计可能经过多年的演变,积累了几代设计师的大量修正和完善
-
6.2.14.2. 如果这些知识只能体现在代码中,那么一旦一个新程序员没有意识到其中的微妙之处而修改了这些代码,这些知识就会丢失
-
6.2.14.3. 记录一个软件的设计知识是很重要的,从中可以跟踪一个概念的发展
-
7. 支持材料编写者、培训师和营销人员
7.1. 用户可以通过这些材料熟悉软件并在遇到困难时寻找解决之道
7.2. 考虑的问题
-
7.2.1. 支持材料是否围绕概念组织
-
7.2.2. 概念是否具有清晰明确的目的
-
7.2.3. 概念的操作原则是否能解释清楚
-
7.2.4. 概念的解释是否合理
8. 程序员和架构师
8.1. 依赖关系图可以用于划分开发阶段,也可用于规划版本升级路线
8.2. 考虑的问题
-
8.2.1. 哪些概念集合可用于构建最小可行产品
-
8.2.2. 哪些概念实现起来很有挑战性
-
8.2.3. 能避免重蹈覆辙吗
-
8.2.4. 是否在适当的地方使用了标准库概念
-
8.2.5. 概念是否尽可能通用
- 8.2.5.1. 是否使用了不必要的特殊数据类型
-
8.2.6. 能否将概念模块化
- 8.2.6.1. 概念之间是否存在可以消除的代码依赖关系,使得概念更容易被修改和重用
-
8.2.7. 概念之间是否存在复杂的同步
-
8.2.8. 有些概念操作是否涉及复杂的条件
9. 研究人员和软件哲学家
9.1. 考虑的问题
-
9.1.1. 概念目录应该如何构建
-
9.1.1.1. 概念目录或手册既有助于设计师记录他们的专业知识,也可使新手更容易获得这些专业知识
-
9.1.1.2. 概念目录对概念的重用也大有裨益,能够帮助设计师避免已知的陷阱
-
-
9.1.2. 是否存在复合概念
- 9.1.2.1. 一个概念被分解成更小的概念时,这个概念是否仍然拥有自身的权益和目的呢?
-
9.1.3. 是否存在不同种类的目的
-
9.1.3.1. 一个概念的目的决定了是否应当设计该概念
-
9.1.3.2. 标签概念和文件夹概念的目的都是整理文件,这个目的使得它们都可以被纳入设计,但只有标签概念才有过滤文件的目的
-
-
9.1.4. 通用概念的实例化会产生什么问题
-
9.1.5. 操作同步是否足够
-
9.1.6. 如何阐述映射原则
-
9.1.7. 关于用户行为的假设在概念设计中扮演什么角色
-
9.1.7.1. 有些概念只有在用户做出某种特定行为时才能实现其目的
9.1.7.1.1. 只有当用户设置高强度密码、记住自己的密码并且不共享密码时,密码概念才能提供有效的身份验证
-
-
9.1.8. 概念可以实现完全模块化吗
- 9.1.8.1. 微服务架构可能是实现概念的一个有用基础,其中每个微服务架构代表一个单独的概念,或许被称为“纳米服务”更合适
-
9.1.9. 可以在代码中检测到概念设计缺陷吗
-
9.1.9.1. 不规范的概念不仅让用户困惑,也让程序员困惑
-
9.1.9.2. 当概念不清楚时,代码就会更混乱和有更多缺陷
-
-
9.1.10. ⑩概念能否应用于API设计
-
9.1.10.1. 概念是面向用户的
-
9.1.10.2. 程序内部使用服务或API时产生的许多问题与用户面对的问题很相似
-
相关文章:

读软件设计的要素06概念完整性
1. 概念完整性 1.1. 当概念组合成一个软件时,它们可以同步以便协调行为 1.1.1. 同步可能会消除一个概念的某些行为,但决不会添加与该概念的规范不一致的新行为 1.1.2. 在使用概念设计软件时,即使你没有精确定义同步,至少要说服自…...

Java 每日一刊(第2期):搭建开发环境
文章目录 JVM、JRE、JDKJVM(Java Virtual Machine,Java 虚拟机)JRE(Java Runtime Environment,Java 运行时环境)JDK(Java Development Kit,Java 开发工具包)JVM、JRE、JD…...

探索EasyCVR与AI技术深度融合:视频汇聚平台的新增长点
随着5G、AI、边缘计算、物联网(IoT)、云计算等技术的快速发展,万物互联已经从概念逐渐转变为现实,AIoT(物联网人工智能)的新时代正在加速到来。在这一背景下,视频技术作为信息传输和交互的重要手…...

IBM中国研发部调整:全球化与本土化的新平衡
如何看待IBM中国研发部裁员? 近日,IBM中国宣布撤出在华两大研发中心,引发了IT行业对于跨国公司在华研发战略的广泛讨论。这一决定不仅影响了众多IT从业者的职业发展,也让人思考全球化背景下中国IT产业的竞争力和未来发展方向。面对…...

C++入门基础篇
引言 说到编程语言常常听到的就是C语言C Java 。C语言是面向过程的,C是和Java是面向对象的,那么什么是面向对象呢?什么又是面向过程呢?C是什么?封装、继承、多态是什么?且听我絮絮叨叨。 C入门基础 1.命名…...

Qt QListWidget 代码范例,以及Qt 天坑:setStyleSheet失效问题
一、坑之所在 1.写了StyleSheet的QString并进行了设置 this->setStyleSheet(styleSheet_M);2.注释后,将StyleSheet换到UI form里去,然后又手动清理了UI form里的StyleSheet 重新使用代码设置,此时代码设置失效了 二、根本解决 1.手动从…...

Unity AnimationClip详解(1)
【动画片段】 前文我们介绍了骨骼动画,在Unity中骨骼动画的部分静态数据存储在SkinedMeshRender中,而另一部分动态的关键帧数据就是存储在AnimationClip中的。 关键帧数据来自与FBX、OBJ等动画模型文件,可以在动画导入后的Animation选项卡中…...

在这12种场景下会使Spring事务失效--注意防范
在某些业务场景下,如果一个请求中,需要同事写入多张表的数据,但为了保证操作的原子性(要么同事插入数据成功,要么同事插入失败),例如,当我们创建用户的时候,往往会给用户…...

SOPC:Nios II Processor -> Vectors
Reset Vector——复位向量 Exception Vector——执行向量 两个向量地址都存储着程序 1.Reset Vector 当FPGA进行复位时,FPGA就重新开始执行程序,这时就需要从EPCS中读取程序。由于FPGA的程序存放在EPC…...

golang学习笔记11——Go 语言的并发与同步实现详解
推荐学习文档 基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总golang学习笔记01——基本数据类型golang学习笔记02——gin框架及基本原理golang学习笔记03——gin框架的核心数据结构golang学习笔记04——如何真正写好Golang代码&…...

关于汽车加油是加200还是加满的思考
车子快开了1万公里了,每个月保险会送一个200-15的加油优惠券,所以之前一直是每次加200的习惯, 最近突然觉得经常去加油很麻烦,而且很浪费时间, 需要重新评估一下, 一次加200 or 一次加300 or 一次加满&am…...

C# 去掉字符串最后一个字符的5种方法
C# 去掉字符串最后一个字符的 5 种方法 (1)Substring string original "Hello!"; string result original.Substring(0, original.Length - 1); Console.WriteLine(result); // 输出: Hello (2)Remove string o…...

[Redis] Redis中的String类型
🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…...

Transiting from CUDA to HIP(三)
一、Workarounds 1. memcpyToSymbol 在 HIP (Heterogeneous-compute Interface for Portability) 中,hipMemcpyToSymbol 函数用于将数据从主机内存复制到设备上的全局内存或常量内存中,这样可以在设备端的内核中访问这些数据。这个功能特别有用&#x…...

基于SpringBoot+Vue+MySQL的垃圾分类回收管理系统
系统展示 用户界面 管理员界面 系统背景 二十一世纪互联网的出现,改变了几千年以来人们的生活,不仅仅是生活物资的丰富,还有精神层次的丰富。在互联网诞生之前,地域位置往往是人们思想上不可跨域的鸿沟,信息的传播速度…...

游戏的3C,Al
在游戏开发中,“3C”通常指的是三个重要的组成部分:Character(角色)、Camera(摄像机)和Control(控制)。这三者对于创建沉浸式和流畅的游戏体验至关重要。而AI(人工智能&a…...

深度学习基础案例4--运用动态学习率构建CNN卷积神经网络实现的运动鞋识别(测试集的准确率84%)
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 前几天一直很忙,一直在数学建模中,没有来得及更新,接下来将恢复正常这一次的案例很有意思:在学习动态调整…...
tekton pipeline workspaces
tekton pipeline workspace是一种为执行中的管道及其任务提供可用的共享卷的方法。 在pipeline中定义worksapce作为共享卷传递给相关的task。在tekton中定义workspace的用途有以下几点: 存储输入和/或输出在task之间共享数据secret认证的挂载点ConfigMap中保存的配置的挂载点…...

[git操作] git创建仓库上传github报错
操作流程如下 使用 git init使用 git remote add origin 项目ssh链接git add . 报错如下 Bus error (core dumped)然后执行任何别的操作都会报错: fatal: Unable to create path .. /.git/index.lock: File exists.Another git process seems to be running in …...

飞牛fnOS安装KDE桌面
飞牛fnOS安装KDE桌面 这段时间新出的nas系统飞牛os真不错,基于debian的可折腾性又高了不少,今天就来给这个系统装个桌面,插上显示器也能当个电脑自己进自己的管理界面,播放下视频,上上网啥的。 文章目录 飞牛fnOS安装…...

运维Tips | 如何安全的移除系统中旧的Linux内核?
[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 如何安全的删除系统中旧的 Linux 内核? 描述:如果更新了 Linux 操作系统,那么你会注意到,每次升级 Linux 内核后,GRUB 菜单都会添加一个新的引导条…...

基于JAVA+SpringBoot+Vue的工程教育认证的计算机课程管理平台
基于JAVASpringBootVue的工程教育认证的计算机课程管理平台 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末附源码下载链接…...

软件质量保障:故障演练介绍
目录 背景:架构变化带来的问题 什么是故障演练 为什么需要故障演练 故障演练场景有哪些 不同演练类型和目标 如何对工具进行评估 功能评测项 告警评测项 观测指标评测项 总结 背景:架构变化带来的问题 随着架构越来越复杂、应用越来越多样&…...

Vue3可编辑表格插件
插件亮点: 通过可自定义单元格内容。可控的状态控制,例如只读、禁止编辑行等配置。可控的状态交互,例如框选单元格、框选行等配置。可控的推拽顺序,例如拖拽行、推拽列。方便的单元格数据验证配置。方便的快捷右键菜单,…...

RedisTemplate操作Redis
文章目录 1. String 命令1.1 添加缓存1.2 设置过期时间(单独设置)1.3 获取缓存值1.4 删除key1.5 顺序递增1.6 顺序递减1.7 常用的 2. Hash命令2.1 添加缓存2.2 设置过期时间(单独设置)2.3 添加一个Map集合2.4 提取所有的小key2.5 提取所有的value值2.6 根据key提取value值2.7 获…...

Web安全:SQL注入实战测试.(扫描 + 测试)
Web安全:SQL注入实战测试. SQL注入就是 有些恶意用户在提交查询请求的过程中 将SQL语句插入到请求内容中,同时程序的本身对用户输入的内容过于相信,没有对用户插入的SQL语句进行任何的过滤,从而直接被SQL语句直接被服务端执行&am…...

猜测、实现 B 站在看人数
猜测、实现 B 站在看人数 猜测找到接口参数总结 实现 猜测 找到接口 浏览器打开一个 B 站视频,比如 《黑神话:悟空》最终预告 | 8月20日,重走西游_黑神话悟空 (bilibili.com) ,打开 F12 开发者工具,经过观察…...

网络编程(UDP)
UDP编程 UDP:全双工通信、面向无连接、不可靠 UDP(User Datagram Protocol)用户数据报协议,是不可靠的无连接的协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。 适用场景 发送小尺寸…...

CENet及多模态情感计算实战(论文复现)
CENet及多模态情感计算实战(论文复现) 本文所涉及所有资源均在传知代码平台可获取 文章目录 CENet及多模态情感计算实战(论文复现)概述研究背景主要贡献论文思路主要内容和网络架构数据集介绍性能对比复现过程(重要&am…...

备战秋招60天算法挑战,Day34
题目链接: https://leetcode.cn/problems/coin-change/ 视频题解: https://www.bilibili.com/video/BV1qsvDeHEkg/ LeetCode 322.零钱兑换 题目描述 给你一个整数数组coins,表示不同面额的硬币;以及一个整数amount,表…...