- 内容提要
- 序 1:程序里的世界
- 序 2:最后一层表象
- 关于本书
- 致谢
- 引言:简单的本源
- 篇一:计算系统
- 第 1 章 数,以及对数据的性质的思考
- 第 2 章 逻辑
- 第 3 章 抽象
- 篇二:语言及其面临的系统
- 第 4 章 语言
- 第 5 章 从功能到系统
- 篇三:程序设计的核心思想
- 第 6 章 数据结构:顺序存储
- 第 7 章 数据结构:散列存储
- 第 8 章 执行体与它在执行过程中的环境
- 第 9 章 语法树及其执行过程
- 第 10 章 对象系统:表达、使用与模式
- 篇四:应用开发基础
- 第 11 章 应用开发的背景与成因
- 第 12 章 应用开发技术
- 第 13 章 开发视角下的工程问题
- 第 14 章 应用程序设计语言的复杂性
- 篇五:系统的基础部件
- 第 15 章 分布
- 第 16 章 依赖
- 第 17 章 消息
- 第 18 章 系统
- 篇六:系统的基本组织方法与原理
- 第 19 章 行为的组织及其抽象
- 第 20 章 领域间的组织
- 附一:主要编程范式 及其语言特性关系
- 附二:继承与混合,略谈系统的构建方式
- 附三:像大师们一样思考——从 UML 何时死掉 谈起
- 附四:VCL 已死,RAD 已死
11.3 寻找第一个有意义的功能,是探索用户需求的起点
对于“张三”这个户籍管理员来说,第一个真正有意义的功能是什么呢?答案是: 查看身份档案 。
应用开发必须站在用户视角来看问题。张三的日常工作之一是查看身份档案,这也就是他的功能需求。这项需求可能需要分成三个实现过程:
- 过程一:列举身份档案
- 过程二:调出身份档案
- 过程三:显示身份档案
我们需要明确,张三所需功能其实是第三项,即显示身份档案。这可以实现为在用户操作环境中的图形化界面,或是可以进行交互操作的文字框等。而过程一,其实是一个附带的需求,因为从 用户操作流程 上来讲,张三可能 6 需要先看到一个列表,然后才能选择到某个 User_IdCard
。
过程二则是一个从计算机角度来看待问题的结果。也就是说,对于计算机的数据系统来说,“显示身份档案”是“调出身份档案”之后的一个后续行为。从计算机的角度来看问题,对于张三有意义的功能是第二项;但从张三的角度来说,他只关心第三项功能。
在实际开发中,我们讨论的将是类似如下的代码 7 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
|
在这个示例中,我们严格地将“程序员视角下的过程”与“用户操作视角下的过程”区隔开来:只有当 TShowCardForm.Create()
并 ShowModal()
发生时 8 ,整个程序才是用户交互相关的。这一示例典型地将业务逻辑与用户交互逻辑分离开来,使得观察“什么是用户需求”成为显而易见的事情。
对应于过程一和过程二所述的需求,就其功能的实现来看,其实包括了在三个层次(机器数据层、基础数据层和应用数据层)上对数据的所有操作。其中:
TIdCards
等类型的设计,以及 Card 作为可操作数据的内存分配与管理等,这些是与计算环境相关,针对 机器数据层 的设计;- Cards 基于有序编号(fromId)、Cards 是否存储在数据库或本地结构化文件中,以及针对上述存储的存取过程等,这些与系统相关的、内在的设定构成了 基础数据层 ;
CurrentCard
作为单例的存在,TUserAction
以及它与TModalResult
之间的关系等,这些是 应用数据层 的设定——基本上来说,将应用数据层整体去掉之后,基础数据层仍然足以支撑其他的用户需求与业务。
注意一些高级语言在应用开发中刻意地屏蔽了这里提出的三个数据层次中的多数细节 。例如在 Java 中可以直接使用对象来表达 IdCard,并用内置的 ObjectList 来实现 IdCards 列表,因此开发人员并不需要接触到机器数据层和基础数据层,例如不必了解对象结构,以及它们在 32 位或 64 位机器上的不同实现。类似的,在多层设计中,也倾向用 O/R Mapping 技术来屏蔽后端数据库的细节,因为它们同样处于基础数据层或机器数据层。这一切的主要目标,就是让“面向应用开发的程序员”将重心放在应用数据层的设计之上,并基于那些相对确定的、稳定的,以及更远离用户的数据层次以及解决方案来完成开发过程。
然而这些对于一个具体的操作人员(例如张三)来说,没有什么意义。最后,对于功能三,如果不考虑显示的具体效果的话,它只是在应用数据层上一个“界面交互”的实作而已。
但正是在这一点上,我们发现“用户需求”完整地影响了过程三的设计。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论