自顶向下与自底向上

软件设计的两种方法不过于自顶向下与自底向上。

对于自顶向下而言,先设计好用户接口,再往下延伸至各个功能块的具体实现。而对于自底向上而言,自然是有了设计好的各个功能代码块,再将这些功能代码块拼接成具体的用户接口,然而实际的软件实践中,这两种方法是同时展开的,因为无论单独实施哪一种,都是有所缺陷,会令人陷入某种困境。

设计软件如此,那么在分析一款软件的时候,结合自顶向下与自底向上的方法,必然是更好的一种捷径,对软件的分析能更通透和彻底。

自顶向下-Doubango协议栈的设计方式

Doubango是一个sip协议客户端软件,通过学习它,能更好地掌握sip协议栈,不仅如此,在学习Doubango的过程中,对于其他软件的设计问题,例如怎样设计才能使各个软件模块达到高聚类低耦合的设计原则,各个模块间的接口如何才能很好的衔接,都在Doubango的设计中有一定的体现。对于一个设计很好的软件系统,功能模块的作用必然是明晰的,聚类的,与其他模块间的功能是能达到最低限度依赖的。

SipStack类

在Doubango的最顶层,对于协议栈的抽象描述便是这个SipStack类。它有两方面的作用:

1)        提供对于协议栈的抽象。

2)        底层代码与高层代码的粘合层。

SipStack 类定义在SipStack.cxx中,其接口描述定义在SipStack.h中。

分析一个类,最好的方法是:首先读其私有字段,这代表了它的内部机理;其次读其接口,这代表了它的对外功能,也就是用户可以用它来做什么。

SipStack的私有字段有四个:

a)        SipCallback*callback;

这个字段由上层代码提供,也就是由用户提供,在创建一个SipStack协议时,用户必须提供一个SipCallBack类的实例,传入SipStack的构造函数:

SipStack(SipCallback*callback,

const char* realm_uri, const char* impi_uri, const char* impu_uri);

b)        DDebugCallback*debugCallback;

这个字段功调试所用。

c)        tsip_stack_handle_t*handle;

这个字段代表了底层对于协议栈真正的描述。在SipStack类被构造时,会根据传入的参数真正地创建一个在底层运行着的协议栈。

d)        static unsignedcount;

代表了该协议栈的实用计数。

由这四个字段不难看出,SipStack类是作为一个粘合层而存在的,它是高层和底层的粘合剂,高层通过SipCallBack注册到SipStack类,而SipStack类又通过tsip_stack_handle_t实例关联底层,当SipStack在其构造函数中创建tsip_stack_handle_t实例时,会将本粘合层的回调函数intstack_callback(consttsip_event_t*sipevent)注册在tsip_stack_handle_t的对应字段中,这样,当底层的sipevent到来时,会通过回调机制层层传递到应用程序的最顶层。

doubango(1)--从协议栈结构说起的更多相关文章

  1. doubango(4)--SIP协议栈传输层的启动

    协议栈的默认传输结构 对于一个刚启动的协议栈来说,它需要有一个传输层,支持若干的传输结点.每一个传输结点对应于一个端口,若采用TCP连接,一个传输结点就针对于一个点到点的连接,这个连接负责sip信令的 ...

  2. doubango(2)--底层协议栈结构分析

    tsip_stack_handle_t 实例 1.        tsip_stack_handle_t的创建 在底层,真正运转的协议栈结构式tsip_stack_handle_t的一个实例,它的创建 ...

  3. doubango(5)--SIP协议栈传输层的启动

    SIP协议的INVITE消息发起流程 当通过sip协议发起一个会话时,需要通过invite消息实现该流程.而SIP协议是一个基于事务的协议,每一个sip会话的都是通过sip部件间的一系列消息来完成的. ...

  4. 由PPPOE看Linux网络协议栈的实现

    http://www.cnblogs.com/zmkeil/archive/2013/05/01/3053545.html 这个标题起得比较纠结,之前熟知的PPPOE是作为PPP协议的底层载体,而实际 ...

  5. TCP/IP协议栈在Linux内核中的运行时序分析

    网络程序设计调研报告 TCP/IP协议栈在Linux内核中的运行时序分析 姓名:柴浩宇 学号:SA20225105 班级:软设1班 2021年1月 调研要求 在深入理解Linux内核任务调度(中断处理 ...

  6. netfilter-在内核态操作网络数据包

    一.概述                                                    netfilter是自2.4内核的一个数据包过滤框架.可以过滤数据包,网络地址和端口转换 ...

  7. Linux内核--网络栈实现分析(一)--网络栈初始化

    本文分析基于内核Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7488828 更多请看专栏, ...

  8. iostat的深入理解

    问题背景 iostat -xdm 1 通常用来查看机器磁盘IO的性能. 我们一般会有个经验值,比如,ioutil要小于80%, svctm要小于2ms. 前几天碰到一个奇怪的现象:有一台SSD机器,磁 ...

  9. Linux内核--网络栈实现分析(一)--网络栈初始化--转

    转载地址 http://blog.csdn.net/yming0221/article/details/7488828 作者:闫明 本文分析基于内核Linux Kernel 1.2.13 以后的系列博 ...

随机推荐

  1. Android4.2以后,多屏幕的支持 学习(一)

    前几天总结了Android的多用户支持,过几天准备再总结Android的多屏支持.Android支持3种类型屏幕:主屏幕(Primary Display).外屏幕(External Display)和 ...

  2. 使用bootstrap建立响应式网页——头部导航栏

    1.要建立响应式网站的布局,这个时候bootstrap的高级就能体现出来了. 2.先来了解一下bootstrap提供了哪些响应式工具供我们使用: (1)屏幕宽度尺寸的概念: <768px     ...

  3. CSS文字垂直居中和font-family属性

    1.单行文字的垂直居中 单行文字垂直居中比较简单,直接让行高==盒子高度即可. 2.多行文字居中 多行文字居中,只需简单计算一下盒子的上padding即可.计算公式:padding-top=(盒子的高 ...

  4. (简单) CF 44D Hyperdrive,数学。

    In a far away galaxy there are n inhabited planets, numbered with numbers from 1 to n. They are loca ...

  5. Ubuntu如何备份和恢复系统 - 落花往事的日志 - 网易博客

    在 使用Ubuntu之前,相信很多人都有过使用Windows系统的经历.如果你备份过Windows系统,那么你一定记忆犹新:首先需要找到一个备份工 具(通常都是私有软件),然后重启电脑进入备份工具提供 ...

  6. [Programming WCF Services]Chapter 1. WCF Essentials - Metadata Exchange

    1.HTTP-GET WCF 方式 通过Http的方式提供metadata 1.1.配置文件方式 <system.serviceModel> <services> <se ...

  7. javascript 闭包理解

    摘自:http://www.cnblogs.com/jkswjw/p/3180384.html javascript 闭包基础分享 闭包向来给包括JavaScript程序员在内的程序员以神秘,高深的感 ...

  8. ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'

    提示:ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'.前两天也出现过这个问题,网上找了一个比 ...

  9. 编译uboot提示libasm-offsets.c10 error bad value (armv5)解决方法

    编译uboot-2016.09提示如下错误: lib/asm-offsets.c:1:0: error: bad value (armv5) for -march= switch 解决方法: 1.在命 ...

  10. Uber广州车主官网本周将暂关闭

    Uber广州车主官网本周将暂关闭 http://news.southcn.com/g/2015-05/04/content_123509931.htm