描述系统的方法
五视图
- 业务组织图 。 描述系统关系。
- 业务流程视图。 描述运行流程,边界。
- 数据视图。 描述数据(库/表)层面的关系。
- 程序员视图。 描述代码结构。
- 硬件配置。 描述部署情况。
什么是设计
- 理解。理解自己想要达到的目标(想开发的东西),需要克服的困难。–成果:需求清单。
- 猜想。需要有一些创意,依靠直觉并作出一些有理由的猜想。–从诸多想法中挑选一个或几个,进行下一步。
- 细化。确保所有的需求都得到覆盖,并确保所有已知的弱点都得到解决,使设计充实。
- 分析。对设计进行检查、测试或运算,看当初的猜想有没有不对的地方。(可选)
大设计先行:先收集需求,出详细设计。
敏捷开发:功能拆分成小块,先分下去。具体到细节再制定详细的需求。
在设计过程中,会有反馈,需要跳到早前的步骤,不断更正。
情景驱动设计
原则:给出方案比直接问需求更让人明白还有哪些需求需要实现的。
步骤:找到需求方->了解情况->给出方案->得到反馈->修改方案
设计体系
前提:明确工作内容。
1.应用程序为企业做的事情。每个功能分成多项任务(task),每项任务代表某人于某时所做的某时。因此需要一个清单:待实现的任务,任务所做的事情。
2.任务锁使用的数据表。
3.与用户相关的情况。–用户所涉及的数据。 并对用户分组。
设计新功能的4个方面:
- 用户界面。 – 布局、输入内容、处理、输出内容。
- 数据库设计。 --数据结构。
- 集成设计。 – 与其他应用程序的交互(输入、输出)。
- 技术设计。 – 选框架、模型、公用代码。
六框设计模型
情景设计
明确各元素之间的关系。元素有:用户组,任务,数据表,任务之间的消息,任务之间的依赖。
目标:用任务视图把任务中的各元素组合起来。
集成设计:把任务划分到各个应用程序与服务之中。决定数据表与数据库之间的指派关系。以应用程序之间传递的消息为视角,定义集成的需求。
目标:完成集成设计视图。
用户界面设计:可以以文字形式描述功能界面。
数据库设计
目标:设计表支持功能的实现。数据库设计阶段要把情景设计没考虑到的考虑进来。
明确使用方(可能有多个):
1.同一套数据库,可能被多个程序使用。
2.同一数据,可能被多种角色使用。管理人员要搜索,营销人员要用树做研究。
明确已有数据的维护方。
在大公司中,开发人员可能已知需要什么数据,但仍需要知道数据能从哪个数据库中获得。
检查以下三个方面:
1.每一份数据由哪个应用创建,哪个应用使用,哪个应用归档/删除。
2.对数据进行复制的时候(大公司经常做数据备份),使用什么机制确保数据之间的一致。
3.确保不要有脏数据。
技术设计
目标:
1.设计出可以满足非功能需求的解决方案。
2.设计出可以尽量简化代码的解决方案。
非功能需求:
a.吞吐量,响应时间。(高性能)
b.可用性。(品质)
c.容灾。(高可用)
d.安全设计。避免漏洞。(安全)
e.系统操作管理的易用性。(用户友好)
f.成本。(节约)
实现
利用对象图来复制,用来思考设计方案。
设计如何做到工程化
三项检测
- 完备性。
- 一致性。
- 可追溯性。
完备性
任务都在用户界面设计中得以体现。
任务相关的表都在数据库设计中得以体现。
代码控制。确保用户组的权限得以控制。
一致性
用户界面中的某个动作所需的数据都能在数据库中找到。
可追溯性
可以从设计中明确代码与**界面(程序、服务)**的联系。
底层元素<— 联系—> 高层设计元素
目的:可以明确得知修改某行代码会造成什么样的影响。
如何解决设计中遇到的一些问题
问题1:面对设计方案太大
- 减少需求
- 分阶段实现
- 尝试简单的设计方案,满足大部分的需求,保留可扩展性。
问题2:如何合理估算成本(金钱/时间)
完成技术设计后的估算最准确。