读软件设计的要素03概念的组合

news/2024/12/25 9:17:27/文章来源:https://www.cnblogs.com/lying7/p/18400454

1. 概念的组合

1.1. 概念不像程序那样,可以用较大的包含较小的

  • 1.1.1. 每个概念对用户来说都是平等的,软件或系统就是一组串联运行的概念组合

1.2. 概念是通过操作来同步组合的

  • 1.2.1. 同步并不增加新的概念操作,但会限制已有的操作,从而消除一些独立概念可能会出现的操作序列

1.3. 在自由组合中,概念彼此独立,仅受一些记录的约束,这些约束是为了确保概念对事物观点的一致性

1.4. 在合作组合中,概念共同工作,通过自动化提供新的功能

1.5. 在协同组合中,概念更加紧密地交织在一起,一些概念可以帮助另一些概念实现目的

1.6. 概念的组合为创造性设计提供了机会,即使其中的每个概念都是通用概念

  • 1.6.1. 协同组合常常是设计的精髓,简单组件的组合可以带来意想不到的力量

1.7. 同步是软件设计的重要组成部分

1.8. 全新的组合形式

  • 1.8.1. 在默认情况下,概念彼此是独立的

  • 1.8.1.1. 只要概念允许,可以采用任何顺序调用概念的操作

  • 1.8.2. 自动化并不能完成以前手动无法完成的事情,而只能自动完成那些不可避免的事情

2. 自由组合

2.1. 自由组合是最松散的组合形式,在这种组合中,概念被合并到一个软件中,但在大多数情况下每个概念依然独立运行

2.2. 标签概念

  • 2.2.1. 将标签与项目关联起来,并包含了一个查找(find)的操作,允许用户筛选带有给定标签的所有项目

  • 2.2.2. 在实践中,待办与标签概念可以提供更丰富的功能

2.3. 在自由组合中,概念在很大程度上是相互独立的,但仍然需要做一些记录,以排除一些无意义的操作

2.4. 同步并不会增加新的操作

  • 2.4.1. 同步只是清除了一些操作

  • 2.4.2. 同步的目的是确保从每个概念的角度来看都存在相同的一组事物,即标签概念不能引用待办概念中不存在的任务,也就是说这些概念是存在耦合的

2.5. 在自由组合中,软件通常由正交的概念组合而成,每个概念都有自己的功能,同步仅用于记录

3. 合作组合

3.1. 合作组合是更紧密的组合形式,能将多个概念连接在一起,提供两个概念本身都没有的新功能

3.2. 日志(Logging)

  • 3.2.1. 这是一个跟踪事件的概念,可以与其他概念合作组合使用

  • 3.2.2. 跟踪的目的可以是诊断故障,通过留存事件序列,在事故发生后分析导致故障的原因

  • 3.2.2.1. 可以是性能分析,检查服务的响应性能

  • 3.2.2.2. 可以是行为解析,收集服务中的用户数据及其行为模式

  • 3.2.2.3. 可以是入侵检测,根据请求模式,检测可能正在进行的攻击

  • 3.2.2.4. 可以是审计,例如记录医院中哪些员工访问了健康记录

3.3. 限制(Suppression)

  • 3.3.1. 访问限制的概念可以通过同步授权操作与被授权的行为,防止产生未经授权的用户操作

  • 3.3.1.1. 如果授权操作(由访问限制确定)没有发生,与之相关的操作也不会发生

  • 3.3.1.2. 在社交媒体软件中将朋友概念与帖子概念组合在一起,那么用户就只能阅读朋友的帖子

3.4. 分段(Staging)

  • 3.4.1. 可以将不同阶段的操作联系在一起

3.5. 通知(Notification)

  • 3.5.1. 大多数软件和服务都会向用户发送通知

  • 3.5.1.1. 日历发送日程提醒

  • 3.5.1.2. 论坛发送注册提醒

  • 3.5.1.3. 在线商店发送购买确认

  • 3.5.1.4. 快递公司发送物流状态更新

  • 3.5.1.5. 社交媒体软件发送更新提醒

3.6. 减轻(Mitigation)

  • 3.6.1. 有时自由组合给用户提供了太多的自由度,导致了一些不良行为,这时就可以通过合作组合来减少不良行为

  • 3.6.2. 许多社交媒体平台将帖子概念和投票概念组合,让用户对帖子进行评价

  • 3.6.2.1. 如果帖子概念允许编辑行为,则会产生一种困境,因为用户可以在收到很多评价后,再完全更改帖子内容,让人误以为这些评价是针对新内容的

  • 3.6.2.2. 一种常见的解决方法是为已编辑的帖子添加一个永久的标记

  • 3.6.2.3. 另一种方法是将帖子概念中的编辑操作与另一个撤销评价的操作同步

3.7. 推理(Inference)

  • 3.7.1. 有时用户并不直接执行某些操作,而是通过其他操作间接执行

  • 3.7.2. 大多数通信软件会区分已读和未读项目,并允许用户切换它们的状态

3.8. 连接分离的关注点(Bridging separated concerns)

  • 3.8.1. 采用自由组合的方式将关注点分离,通常会提高软件中概念的清晰度和可用性

  • 3.8.2. 蜂窝概念和WiFi概念允许用户独立管理蜂窝数据和本地网络的使用,以及管理使用这些数据和网络的软件

3.9. 在合作组合中,同步在提供自动化的概念间建立连接,从而产生一些单个概念不具备的新功能

4. 协同组合

4.1. 协同组合更精妙

  • 4.1.1. 在自动化间建立连接

  • 4.1.2. 通过更紧密的同步概念,一个概念的功能会增强另一个概念的功能

  • 4.1.3. 组合的整体价值超过了概念价值的总和

4.2. Gmail标签和废纸篓

4.3. Moira列表和组

4.4. 免费样品和购物车

4.5. Photoshop的通道、蒙版和选区

4.6. 废纸篓与文件夹的美妙协同

  • 4.6.1. 最初,废纸篓只是一个已删除文件的集合,如果你删除了一个文件夹,文件夹中的文件将零散地位于废纸篓中

  • 4.6.2. 现在的废纸篓设计可以理解为由废纸篓和文件夹这两个显著概念构成的巧妙组合

  • 4.6.3. 废纸篓概念的基本思路是,恢复已删除文件,或通过清空废纸篓永久删除它们

4.7. 难以完美的协同

  • 4.7.1. 完美实现不同概念的功能协同几乎是不可能的,因此大多数协同都需要付出一些代价

5. 同步

5.1. 在开始设计概念时,同步是整个软件设计的重要部分

  • 5.1.1. 同步太多会使用户失去控制权,一些概念的自由组合允许的场景可能不会出现

  • 5.1.2. 如果同步太少,一些本可以自动完成的工作却成为用户的负担,有时还会带来意外和不当行为,甚至是灾难性的后果

5.2. 同步过度

  • 5.2.1. 日历软件的最初设计却因为“删除邀请”而给用户带来了困扰

  • 5.2.1.1. 用户无法在不通知事件发起者的情况下拒绝事件,因为删除概念与拒绝概念是绑定的

  • 5.2.1.2. 如果你只是想清理日历的空间,这一设计可能会让你冒犯朋友

  • 5.2.1.3. 如果向你发送事件邀请的是垃圾邮件,情况会更糟

  • 5.2.1.4. 解决这个问题的唯一笨办法是再创建一个新日历,将事件移至其中,然后再将新日历中的事件全部删除

  • 5.2.2. Tumblr的不良设计

  • 5.2.3. Twitter的回复

  • 5.2.4. 不需要的谷歌同步

  • 5.2.5. 爱普生强横的打印机驱动程序

5.3. 同步不足

  • 5.3.1. 该小组是否可以出现在组目录(Group directory)中取决于另一个设置菜单

  • 5.3.1.1. 除非此小组的可见性设置为“网络上的任何人”(Anyone on the web),否则该小组不仅被排除在组目录之外,而且用户根本无法访问该组,甚至无法申请加入该小组

  • 5.3.1.2. 原因是,权限概念中确定谁可以申请加入的操作与组概念中设置可见性的操作缺乏同步

  • 5.3.2. Lightroom的导入功能

  • 5.3.3. Google Forms、Google Sheets和数据可视化

  • 5.3.4. Zoom的举手功能

  • 5.3.5. Therac-25放射治疗机

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/793472.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

南沙信C++陈老师解一本通题: 1101:不定方程求解

​ 【题目描述】给定正整数a,b,c。求不定方程 ax+by=c关于未知数x和y的所有非负整数解组数。【输入】一行,包含三个正整数a,b,c 两个整数之间用单个空格隔开。每个数均不大于1000。【输出】一个整数,即不定方程的非负整数解组数。【输入样例】 2 3 18 【输出样例】 4 #in…

musl libc 与 glibc 在 .NET 应用程序中的兼容性

musl Linux 和 glibc 是两种不同的 C 标准库实现,它们在多个方面存在显著差异。历史和使用情况:glibc 是较早且广泛使用的 C 标准库实现,具有较长的开发历史和广泛的社区支持。它被大多数 Linux 发行版采用,特别是在桌面和服务器环境中。 musl 是一个相对较新的实现,旨在提…

JDBC,SQL注入,事务,C3P0于Druid连接池(最详细解析)

JDBCJDBC(Java DataBase Connectivty,Java数据库连接)API,是一种用于执行Sql语句的Java API,可以为关系型数据库提供统一的访问,其由一组Java编写的类和接口组成.JDBC驱动程序起初,SUN公司推出JDBC API希望能适用于所有数据库,但实际中是不可能实现的,各个厂商提供的数据库差异…

Redis 入门 - 安装最全讲解(Windows、Linux、Docker)

最全的Redis安装教程,本文介绍了Redis在Windows(官方建议、脚本、可执行文件方式)、Linux(apt包管理器、源码编译)及Docker下的安装过程,详细步骤包括命令执行、文件操作等。经过上一章节的介绍,相信大家对Redis已经有了大致的认知,今天主要给大家详细讲解Redis在Windo…

WPF在UserControl使用MVVM模式实现窗体移动,最大化,最小化,关闭

1、在WPF中,我们移动窗体,可以使用MouseDown或者MouseLeftButtonDown去触发DragMove方法 2、当我们使用UserControl的时候,它是没有DragMove方法的,这个时候怎么办 我们改为命令的形式,可以直接调出当前的窗体,或者将窗体当参数传入到ViewModel,也没问题 我写了 <i:I…

ATTCK红队评估(红日靶场2)CS篇

靶机介绍红队实战系列,主要以真实企业环境为实例搭建一系列靶场,通过练习、视频教程、博客三位一体学习。本次红队环境主要Access Token利用、WMI利用、域漏洞利用SMB relay,EWS relay,PTT(PTC),MS14-068,GPP,SPN利用、黄金票据/白银票据/Sid History/MOF等攻防技术。关…

esp32笔记[18]-使用汇编在riscv架构的esp32c3点灯

使用esp-idf工具链编译汇编程序实现在riscv架构的esp32c3点灯. Compiling an assembly program using the esp-idf toolchain to blink an LED on the RISC-V based ESP32-C3.摘要 使用esp-idf工具链编译汇编程序实现在riscv架构的esp32c3点灯. Abstract Compiling an assembly…

一、编程语言简介与C++

编程语言是编程的工具 计算机系统是分层的编程语言是软件,也i是分层的

AI证件照,抠图、换背景、任意尺寸...有了这个神器,证件照通通自己搞定(本地化部署教程)

最近有个Github开源的AI证件照神器火了,以后再也不用专门跑一趟照相馆拍证件照了! 你随手一张日常生活照或自拍,上传到它那里,分分钟就能帮你换上。 蓝底、白底,抠掉杂乱的背景,生成各种尺寸规格的证件照。 这款名叫HivisionIDPhotos的开源工具,它不仅能帮你便捷地制作出免冠白…

软件工程导论作业 2:python实现论文查重

github项目地址这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13229这个作业的目标 通过Python开发个人项目,实现项目单元测试1.PSP表格PSP2.1 Personal Software P…

【工具推荐】Jeecg_Tools v1.0(最新版) - jeecg框架一键漏洞利用getshell

工具介绍: Jeecg_Tools是一款jeecg框架漏洞利用工具。本工具为jeecg框架漏洞利用工具非jeecg-boot! 下载链接: 链接:https://pan.quark.cn/s/9a1016a03402使用说明 运行于jdk8环境 java -jar Jeecg_Tools-1.0-java8.jar功能: 包含poc: 登录绕过检测 jeecgFormDemo文件上传…