概要设计文档:文档内的每个结构是对同一事物的不通侧重
基本流程:实现的流程
整体框图:划分为多少模块,模块间如何协作
时序图:不通类协作的时机与方法
1. 确定要实现哪些功能,一个一个列出;
有功能点才有目标,不然乱作一通
2. 搜集资料,分析实现这些功能的方法,给出流程,给出方案,分析可行性
较详细的原理和可行性分析
3. 确定方案对外提供的接口
接口方便同步开发,多人团队可以有接口可用
1)完成任务,是否需要外部数据,也就是是否要输入参数
2) 该操作能否保证成功,能保证成功就不用返回值了,搞个void
3)是否需要返回数据给调用方
-
void done_work(int num, int *out)
4)肯定成功,不需要参数,那给函数取个名字就行
3.1接口的定义
提供接口给外部使用
内部实现需要的关键函数接口,内部使用
3.2 接口直接的关系
接口需要发送处理后的信息,因此需要提供错误值,入参
-
void send_result(int result);
4. 模块内部的设计
1)设计内部交互的数据格式
2)设计自己用的关键函数
a)C++
完成模块间交互信息的要求,对类的内部进行设计,需要哪些成员函数来实现.
b)C
设计函数接口,或函数指针接口
4)画出序列图,搭好整个框架,以此框架为模板,编码(函数实现放空)
5)实现内部函数
举例:
完成自动登陆
1) 如果不知道怎么做,或者思路到一半卡壳了,甚至完全没思路就要做分析了。
2) 首先,明确要完成的功能——完成用户名密码自动登陆。
3) 然后,需要用到的资源、数据、信息——用户名,密码
简单讲,就是完成登陆的函数是否需要输入参数 int done_work(int num, void *data);
4) 能否在同一个进程或线程内完成操作,如果完成登陆操作不在同一个进程或线程,那就涉及到多进程或多线程。
单进程或单线程则结束。
5) 那需要传递数据了,使用共享内存或者管道之类的。
6) 同步:传递数据的时候是否需要同步,不然接收方都不知道数据来了没,发送方也不知道发送方不知道何时可以发送数据
-
发送方 接收方
-
———— ————
-
- <- 准备好了
-
发送数据 -> -
-
- 处理好了
-
- <- 发送结果
7) 比如需要继承系统给的接口完成类,并做成DLL,那就实现该类。
a) DLL可能被系统加载,你还是可以跟DLL通信的
b)实现类的时候,并不是只实现接口函数,完全可以定义私有函数完成诸如a)的功能
end)
8) 多程通信
设置事件等同步异步方式, 不能只考虑通信的双方都存在的情况,
要是其中一方不存在,启动后是否会受影响
A B
A =
= B
=============================================
TIPS
=============================================
5.
需求时刻在变!!!你不能够把所有的情况都考虑到,但是你能够考虑到基本的情况,也就是必须提供的
设计的时候,并不能一次性定下所有的策略,比如加密用RC4或RSA等,但是基础的数据大部分是可以确定的。
-
1. 加密数据及认证的时候,可以保留字段
-
struct client_managercenter_datastu {
-
int magic;
-
int length;
-
void *data;
-
int reverse[4]; //保留字段,用于认证加密
-
}
6. 模块间的设计原则
1)做架构设计时,只关注模块的输入与输出,至于模块内部如何处理,不用理会
2)确定模块间的通信方式,TCP或者IPC
7. 针对IP,端口等默认的消息,
设计成由一个配置中心统一管理且可配置,需要数据则从该配置中心获取
8. 消息的规则
8.1.数据接收方定义信息的内容。
8.2. 消息应是一个问题,或者一个命令,但不能两者皆有。
1)问题类消息:要求对象提供一些信息,所以总是有回应。问题类消息不改变对象的属性。
例子:现在几点?你有几个孩子?
2)命令类消息:告诉对象执行某个操作,不需要回应。命令改变对象的属性
例子:电脑关机
//待讨论
3)通知:消息给对象,对象不返回数据也不执行操作。
4)问题类消息不能是多个问题的集合,或者多个命令的集合,或者问题和命令的集合,或1个命令
5) 合并多余的消息
认证请求->认证响应(成功或失败)->端口请求->端口响应(port)
认证请求->认证响应(成功+有效port 或 失败+无效port)
8.3协作过程中(通过socket)传递命令和数据
结构体转为字节流
9. 图表
软件结构体,展现系统或模块内由哪些组件组成
序列图,组件是交互的顺序与操作
10.一个工作无法直接做完,需要分步完成,则引入状态state
比如更新后,需要重启完成更新,最后校验:UPDATE_BEGIN, UPDATE_REBOOT_CHECK,UPDATE_FINISH
11. 设计交互协议时,不能够使用宽字节
-
struct protocol {
-
WCHAR magic[32];//error
-
int major;
-
int minor;
-
}
阅读(1886) | 评论(0) | 转发(0) |