代码改变世界

【原创】下载通用工具“DownLoadNode”系列——1、系列简介

2011-06-03 14:35  刺客之家  阅读(4008)  评论(5编辑  收藏  举报

一、背景简介

在项目中使用下载功能的地方有很多。在不同的业务中,开发人员需要根据不同的业务需要,构建各种组织结构的下载处理类。

为了更好的把下载功能和业务逻辑分离开,节省开发人员的时间,提高代码的效率,开发了一组通用的下载结点类。主要实现文件的下载、文件的层级关系的搭建、下载情况的实时反馈、下载异常问题的分析等功能。

使用该类库,可以在实际应用中快速的搭建起一定组织结构的下载处理逻辑。且开发人员不需要关注下载的具体处理细节。只需要定义自己的业务实体,作为业务参数交给通用下载模块即可,当下载进度发生变化,或者出现问题时,所有的事件参数中都会包含用户传入的业务数据信息,方便开发人员进行业务处理。

二、应用场景举例

在某项目的业务中,用户可能需要从服务端更新一种每周推送的内容服务。这种内容的组织是按照周刊->资源->资源文件的层级关系组织的。

在终端软件的逻辑中,需要知道每个资源文件的下载情况,从而分析资源的下载状况,再进而知道周刊的下载情况。如下图:

image 

(一个资源由2个文件组成)

image

(一个周刊由2个资源构成)

三、设计思路

下面简单说一下它的构思:

在不同业务需求场景中,实现文件的下载,特别是文件按照不同的逻辑关系组织在一起的下载功能时,往往需要为每一种业务定制一套下载处理类,来完成文件的下载和UI的通知更新等。这样做有几个缺点:

a)代码不易维护,业务逻辑与下载任务混杂在一起

b)代码可重用性低,业务逻辑改变,导致强耦合的下载功能类需要改变

------------------------------------------------------------------------------------------------------

考虑设计一种结点类,类似于咱们小时候玩的积木,这些积木大致可以分为2类:

A类积木:积木上有插口,可以插入其他的积木(当然包括A类积木自己)

B类积木:只能插在A类积木上。

对应到常见的下载任务,我们可以把下载任务归为以下2种:

1、负责具体下载事务的结点,我给他们起名为:“叶子结点”,他们的特点是:

    a)只存在于下载任务树的最底层

    b)一个结点负责一个实体文件的下载,并且向上汇报进度

2、负责管理若干个结点的“管理型结点”,我给他们起名叫做“关联结点”,他们的特点是:

    a)不负责具体文件的下载

    b)可以将其他结点插入其下,受其管理和控制

    c)可以实时收集子结点的状态,也向上汇报自己的进度

四、小结

本篇主要介绍了做这个东西的初衷和想法形成的过程。后面将继续介绍这个东西。有兴趣的朋友可以留言提出自己的意见,谢谢~

本博客文章若非标记转载,均为原创,转载请注明出处~