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

读软件设计的要素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安装…...

Python实战:构建个人古诗知识库,从古诗文网高效采集与存储

1. 为什么你需要一个古诗知识库? 作为一个诗词爱好者,我经常遇到这样的困扰:读到一首好诗想收藏,结果过几天就忘了出处;想查找某个主题的诗句,却记不清具体内容;看到喜欢的诗人作品,…...

Altium Designer 实战指南:高效创建与优化PCB封装库

1. Altium Designer封装库基础入门 刚接触PCB设计时,我最头疼的就是封装库的创建。记得第一次画板子,因为电阻封装画错导致整批板子返工,那种挫败感至今难忘。现在用Altium Designer做封装就像搭积木一样简单,关键是要掌握正确的方…...

大模型小白入门指南:从工作原理到实用技巧(收藏版)

本文深入解析了大语言模型(LLM)的核心工作原理,包括Transformer架构的自注意力机制和位置编码,以及预训练和指令微调的训练范式。同时,文章还提供了实用的提示工程技巧,帮助读者更好地与AI协作。此外&#…...

2016-2025年地级市链长制数据

在产业链现代化与协同治理进程中,“链长制”作为一项关键的制度创新,为破解产业链条松散、协同不足等问题提供了重要抓手,其政策效果与影响机制成为当前学术研究与政策制定的焦点议题。周钰丁、田思远在研究中指出,产业链“链长制…...

Cadence Allegro 17.4进阶技巧:PCB Editor中高效调整丝印的三大步骤

1. 丝印调整的核心价值与准备工作 在PCB设计流程中,丝印调整往往被新手工程师视为"收尾环节",但实际它直接影响着后续生产的可制造性和产品维护的便利性。Cadence Allegro 17.4的PCB Editor模块提供了完整的丝印处理工具链,我经手…...

单细胞测序入门(一):技术概览与数据获取实战

1. 单细胞测序技术全景解读 第一次接触单细胞测序时,我被这项技术的精妙设计深深震撼。想象一下,传统测序就像把水果榨成混合果汁检测成分,而单细胞测序则是把每个苹果、香蕉、葡萄分开榨汁分析——这就是单细胞分辨率带来的革命性视角。 核心…...

YOLOv8与SenseVoice-Small的多模态安防监控系统设计

YOLOv8与SenseVoice-Small的多模态安防监控系统设计 1. 系统设计背景与价值 在现代安防监控领域,单纯依靠视频分析已经无法满足复杂场景下的安全需求。传统的监控系统往往需要人工实时监控,不仅效率低下,而且容易遗漏关键信息。特别是在夜间…...

2026前端面试题

1.vue的通信方式Vue组件通信方式根据组件间的关系&#xff08;父子、兄弟、跨级、任意组件&#xff09;可分为多种方案。一、父子组件通信props&#xff08;父-子&#xff09;父组件通过属性向子组件传递数据&#xff0c;子组件通过defineProps接收<!-- 父组件 --> <C…...

Overleaf项目本地化实战:用VS Code插件管理、Git版本控制,再搭配Copilot提效

Overleaf项目本地化实战&#xff1a;用VS Code插件管理、Git版本控制&#xff0c;再搭配Copilot提效 对于经常使用LaTeX撰写学术论文或技术文档的用户来说&#xff0c;Overleaf无疑是一个强大的云端协作平台。然而&#xff0c;当项目规模扩大、需要更精细的版本控制时&#xff…...

MULTISIM仿真揭秘:如何设计高可靠性的光耦隔离PMOS驱动电路

1. 光耦隔离PMOS驱动电路的设计挑战 在工业控制和高压隔离场景中&#xff0c;PMOS驱动电路的设计往往面临诸多挑战。我曾在多个项目中遇到过MOS管因静电击穿而损坏的情况&#xff0c;也经历过因开关频率不足导致系统性能下降的尴尬。这些问题归根结底都与MOS管的特性有关。 MOS…...