概要设计思路

来源:互联网 发布:浙大软件学院研究生 编辑:程序博客网 时间:2024/04/27 13:05
概要设计文档:文档内的每个结构是对同一事物的不通侧重
基本流程:实现的流程
整体框图:划分为多少模块,模块间如何协作
时序图:不通类协作的时机与方法

1. 确定要实现哪些功能,一个一个列出;
    有功能点才有目标,不然乱作一通
2. 搜集资料,分析实现这些功能的方法,给出流程,给出方案,分析可行性
    较详细的原理和可行性分析
3. 确定方案对外提供的接口
    接口方便同步开发,多人团队可以有接口可用
    1)完成任务,是否需要外部数据,也就是是否要输入参数
      
  1. void done_work(int num)
    2) 该操作能否保证成功,能保证成功就不用返回值了,搞个void

  1. void done_work(int num)
   3)是否需要返回数据给调用方

  1. void done_work(int num, int *out)
     4)肯定成功,不需要参数,那给函数取个名字就行

  1. void done_work()
 
3.1接口的定义
提供接口给外部使用
内部实现需要的关键函数接口,内部使用

3.2 接口直接的关系
接口需要发送处理后的信息,因此需要提供错误值,入参

  1. 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) 同步:传递数据的时候是否需要同步,不然接收方都不知道数据来了没,发送方也不知道发送方不知道何时可以发送数据

       
  1. 发送方        接收方
  2. ————          ————
  3. -       <-    准备好了
  4. 发送数据 ->      -
  5. -             处理好了
  6. -       <-    发送结果
   7) 比如需要继承系统给的接口完成类,并做成DLL,那就实现该类。
       a) DLL可能被系统加载,你还是可以跟DLL通信的
      b)实现类的时候,并不是只实现接口函数,完全可以定义私有函数完成诸如a)的功能
   end)

  8) 多程通信
设置事件等同步异步方式, 不能只考虑通信的双方都存在的情况,
要是其中一方不存在,启动后是否会受影响
    A    B
    A    =
    =    B


  =============================================
    TIPS
  =============================================
5.
需求时刻在变!!!你不能够把所有的情况都考虑到,但是你能够考虑到基本的情况,也就是必须提供的
设计的时候,并不能一次性定下所有的策略,比如加密用RC4或RSA等,但是基础的数据大部分是可以确定的。

  1. 1. 加密数据及认证的时候,可以保留字段
  2. struct client_managercenter_datastu {
  3.     int magic;
  4.     int length;
  5.     void *data;
  6.     int reverse[4]; //保留字段,用于认证加密
  7. }
 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. 设计交互协议时,不能够使用宽字节

  1. struct protocol {
  2. WCHAR magic[32];//error
  3. int major;
  4. int minor;
  5. }


<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(748) | 评论(0) | 转发(0) |
0

上一篇:windows编程的偏门概念: 会话(Session), 窗口站(Window Station), 桌面

下一篇:彻底了解Windows XP操作系统登录类型

相关热门文章
  • MyBatis 入门(四)--链表查询...
  • APP开发流程,你知道多少...
  • app开发需要多少钱
  • iredmail迁移纪实
  • 欧雷蒙智能车衣靓丽如新...
  • socket中的短连接与长连接,心...
  • Haproxy、Keepalived双主高可...
  • Tomcat的性能与最大并发(1000)...
  • Nginx深入详解之日志
  • socket编程的同步、异步与阻塞...
  • linux dhcp peizhi roc
  • 关于Unix文件的软链接
  • 求教这个命令什么意思,我是新...
  • sed -e "/grep/d" 是什么意思...
  • 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~