当前位置: 首页 > 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安装…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

华为云AI开发平台ModelArts

华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...