在我们做好软件的用例分析、语言的选择和基本的一个功能活动图后,我们便可以开始大致软件的设计。

在用例图中,我们看到有两个用例:一个是用户的配置、一个是系统的监控。但用例图中中还隐藏着一个功能,那就是同步。

现在我们清楚了,软件要满足下面三个功能:

  1. 用户接口
  2. 文件系统监控
  3. 云同步

明白了功能,那就好开始设计了。

刚开始设计时,要遵循一些规则,这样避免后面软件开发的中设计的失误导致设计的重写。而且在整个开发过程中,自己采用了一些敏捷的思想:快速迭代,每次迭代能完成一个新的feature。在设计领域,有很多的理论知识,其中设计模式哲学受到很多大牛的推崇,自己也参考了许多。

在设计初,对于这三种功能,我们要映射到软件中,其实映入脑海的就是将三个功能通过三个模块来实现,而由于三个模块彼此需要交互,所以需要一定的协议来进行沟通。

我想大家也能想到怎么设计这三个模块和之间的协议吧?对!就是将三种功能映射为三个独立的线程,而之间的协议则是自己定义的消息(如下图)。

现在最基本的功能设计已经完成,接下来我们需要对之前的用例图中每个用例进行分析,以便于更加详细的设计。

我们选取用户添加监控目录这个主要的用例作为例子,将不同模块之间的在时间轴上的交互用时序图画了出来。这样,我们就能知道在模块在时间先后的交互。

其实在看到时序图时,我们能基本上对一个流程有了很清楚的了解, 我们就基本上可以开始类的设计了。

在类的设计中,比较重要的是接口的设计,只要接口定下来了,后面的功能修改就比较容易。从另一方面说,接口的定义要很深层次的考虑。

  1. 明确性
  2. 可扩展性
  3. 唯一性

在我们的软件设计中,所有的外部交互都是消息,所有消息基本上所接口。在消息的定义中我们可以参考一些工作中的相关消息定义。

总的来说,消息有head,body,而head的定义必须明确,而且有些属性必须唯一。同时我们需要携带一些接口调用所携带的数据,而且这些数据最好能有一定的规范来处理。我们参考了json-rpc规范。用python中的字典格式来作为参数进行交换。

具体消息设计如下:

Message type is below
Header:message typemessage IDreceiver UIDsender  UIDneed    ack
Body:{'XXX': 'XXX'}

类图如下:

在上图,我们明确定义了消息头的属性。其中消息的类型、消息ID、消息的接收者UID、消息发送者UID、是否需要ack。这样一条消息就可以明确无误地传达到接收的模块中、而body则可以通过python的字典(key value)进行扩展。

有了消息定义,那么软件系统怎么来传输消息呢?

在软件设计中,我们采用了一个BUS来负责消息的统一管理。所谓的消息BUS,就是能让不同的功能模块通过它来实现消息的发送、接收、广播等等。。。我们以后的文章还会详细介绍。

在定义完消息接口后,我们可以开始类的设计。我们在用例分析时,得到3种功能模块,这样在类的设计中,则表现为类。那么我们是分开设计呢?还是有共同的属性和方法可以提供?首先,每个模块的接口都是通过消息来实现的,那么功能模块处理消息是有共同的处理流程。同时,模块之间是有共同的属性的。

在设计中,我们需要保证各个功能模块是独立的,同时要满足异步性,这样就能让不同的功能模块协同工作。在这种设计中,我们可以选择线程。我们在设计中把每个功能模块统称为一个actor。每个actor对应在操作系统中是一个线程。

下面是我们设计的功能模块类图:

由于采用消息作为接口,那么我们在每个actor中需要一个消息队列,用来异步处理消息,同时每个actor有一个名字来标识它,我们也需要全局唯一的ID来让系统投递消息。actor提供提供根据消息内容来调用不同方法的消息处理入口,也提供监听其他actor的方法,这样actor能直接广播通知所有关心这个事件的actor。(观察者模式,对吧)

同时,我们需要在不同的actor中实现对不同消息的不同处理操作,同时有不同actor特定的属性和功能。

这样的设计能大大提高代码的重用度。

未完待续。。。。。。

跨平台的网络云盘软件设计实现【二】相关推荐

  1. 跨平台的网络云盘软件设计实现[一]

    由于ubuntu one 停止服务,由于众所周知的原因dropbox插件在中国也没法使用,一直没有好的linux同步工具,所以自己索性写了一个跨平台的工具.自己在设计和实现的过程中学习到了不少知识,下 ...

  2. 基于Java+hadoop网络云盘上传下载系统设计与实现

    目 录 网络云盘上传下载系统摘要----------------------------------5 The Network Cloud Disk`s Upload and DownloadAbst ...

  3. 网络云盘项目——Redis部署、MySQL部署、MySQL表设计

    一.本文目的 本项目分为6篇博客文章完成: 1.项目总体介绍:https://blog.csdn.net/qq_41453285/article/details/107871393. 2.Redis部 ...

  4. 基于Django框架的网络云盘设计

    基于Django框架的网络云盘设计 网络云盘设计流程(第一篇) 前言 前期准备与环境搭建 创建一个Django工程,跑一个HelloWorld 网盘设计简介及成果展示 功能1,"登录&quo ...

  5. 网络云盘项目——HTTP接口介绍、功能介绍、服务端/客户端代码解析

    一.本文目的 本项目分为6篇博客文章完成: 1.项目总体介绍:https://blog.csdn.net/qq_41453285/article/details/107871393. 2.Redis部 ...

  6. 基于Hadoop2.2.0版本号分布式云盘的设计与实现

    基于Hadoop2.2.0版本号分布式云盘的设计与实现 一.前言 在学习了hadoop2.2一个月以来,我重点是在学习hadoop2.2的HDFS.即是hadoop的分布式系统,看了非常久的源代码看的 ...

  7. graphpad软件百度云分享吧_还在用百度云软件?来试试这四个良心的云盘软件吧!...

    天翼云盘 http://t.cn/StujV7 一看名字相信大家都知道它是电信的云盘软件,没错它是一款由中国电信推出的云存储服务,为用户提供跨平台的文件存储.备份.同步及分享服务,是国内领先的免费网盘 ...

  8. 育网校园云盘软件简介(四维一体解决方案)

    分类: 数据库系列 mysql -uroot ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/ ...

  9. 基于Hadoop2.2.0版本分布式云盘的设计与实现

    基于Hadoop2.2.0版本分布式云盘的设计与实现 一.前言 在学习了hadoop2.2一个月以来,我重点是在学习hadoop2.2的HDFS.即是hadoop的分布式系统,看了很久的源代码看的我真 ...

最新文章

  1. 计算机一级考试试题 文明,XP计算机文明基础模拟试题库1.doc
  2. USACO Section1.3 Combination Lock 解题报告
  3. 行千里,看山城轻轨穿楼越林;致广大,望重庆交通桥上桥下
  4. SLAM Cartographer(10)子图
  5. 如何从Windows中访问Linux硬盘,干货:如何从 Windows 系统访问 Linux 文件
  6. 【用Java模拟KTV点歌系统】
  7. 谷歌浏览器快速保存整个网页的方法
  8. 如何在C加加的面向对象写游戏 我的世界
  9. Python爬取各种类型网站数据(视频,图片居多)
  10. 川大计算机专业导师冯子亮,川大计算机学院硕导名单_跨考网
  11. win7系统服务print spooler 无法启动解决方法(开启及关闭方法)
  12. 痞子衡嵌入式:揭秘i.MXRTxxx系列上串行NOR Flash双程序可交替启动设计
  13. log4j2:占位符引起的内存泄漏bug
  14. android入门之broadcast
  15. 让NFT-Fi流行起来
  16. 70块钱打造简单家庭NAS
  17. 李html画布,李雪松的绘画
  18. 怎样可以把PDF文档转换成高质量的JPG图片
  19. 用dumpbin.exe工具查看DLL
  20. 计算机专业基础综合先看什么,先别学了,你的考研初试科目已经变了!!!

热门文章

  1. python机器学习手写算法系列——逻辑回归
  2. Python画“一箭穿心”,简单易懂。
  3. 基于Android的高考志愿填报咨询系统APP
  4. 廊坊师范学院信息技术提高班-米老师怪论之 汽车理论
  5. oracle r12 客户表,Oracle ERP R12表结构
  6. 梅卡曼德完成美团领投的数亿元C轮融资
  7. python花瓣飘零_小白请上车 | Python抓取花瓣网高清美图
  8. 友链(欢迎加友链!)
  9. 斗地主老是输?一起用Python做个AI出牌器!
  10. 碳基集成电路技术研究进展与展望