跨平台的网络云盘软件设计实现【二】
在我们做好软件的用例分析、语言的选择和基本的一个功能活动图后,我们便可以开始大致软件的设计。
在用例图中,我们看到有两个用例:一个是用户的配置、一个是系统的监控。但用例图中中还隐藏着一个功能,那就是同步。
现在我们清楚了,软件要满足下面三个功能:
- 用户接口
- 文件系统监控
- 云同步
明白了功能,那就好开始设计了。
刚开始设计时,要遵循一些规则,这样避免后面软件开发的中设计的失误导致设计的重写。而且在整个开发过程中,自己采用了一些敏捷的思想:快速迭代,每次迭代能完成一个新的feature。在设计领域,有很多的理论知识,其中设计模式哲学受到很多大牛的推崇,自己也参考了许多。
在设计初,对于这三种功能,我们要映射到软件中,其实映入脑海的就是将三个功能通过三个模块来实现,而由于三个模块彼此需要交互,所以需要一定的协议来进行沟通。
我想大家也能想到怎么设计这三个模块和之间的协议吧?对!就是将三种功能映射为三个独立的线程,而之间的协议则是自己定义的消息(如下图)。
现在最基本的功能设计已经完成,接下来我们需要对之前的用例图中每个用例进行分析,以便于更加详细的设计。
我们选取用户添加监控目录这个主要的用例作为例子,将不同模块之间的在时间轴上的交互用时序图画了出来。这样,我们就能知道在模块在时间先后的交互。
其实在看到时序图时,我们能基本上对一个流程有了很清楚的了解, 我们就基本上可以开始类的设计了。
在类的设计中,比较重要的是接口的设计,只要接口定下来了,后面的功能修改就比较容易。从另一方面说,接口的定义要很深层次的考虑。
- 明确性
- 可扩展性
- 唯一性
在我们的软件设计中,所有的外部交互都是消息,所有消息基本上所接口。在消息的定义中我们可以参考一些工作中的相关消息定义。
总的来说,消息有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特定的属性和功能。
这样的设计能大大提高代码的重用度。
未完待续。。。。。。
跨平台的网络云盘软件设计实现【二】相关推荐
- 跨平台的网络云盘软件设计实现[一]
由于ubuntu one 停止服务,由于众所周知的原因dropbox插件在中国也没法使用,一直没有好的linux同步工具,所以自己索性写了一个跨平台的工具.自己在设计和实现的过程中学习到了不少知识,下 ...
- 基于Java+hadoop网络云盘上传下载系统设计与实现
目 录 网络云盘上传下载系统摘要----------------------------------5 The Network Cloud Disk`s Upload and DownloadAbst ...
- 网络云盘项目——Redis部署、MySQL部署、MySQL表设计
一.本文目的 本项目分为6篇博客文章完成: 1.项目总体介绍:https://blog.csdn.net/qq_41453285/article/details/107871393. 2.Redis部 ...
- 基于Django框架的网络云盘设计
基于Django框架的网络云盘设计 网络云盘设计流程(第一篇) 前言 前期准备与环境搭建 创建一个Django工程,跑一个HelloWorld 网盘设计简介及成果展示 功能1,"登录&quo ...
- 网络云盘项目——HTTP接口介绍、功能介绍、服务端/客户端代码解析
一.本文目的 本项目分为6篇博客文章完成: 1.项目总体介绍:https://blog.csdn.net/qq_41453285/article/details/107871393. 2.Redis部 ...
- 基于Hadoop2.2.0版本号分布式云盘的设计与实现
基于Hadoop2.2.0版本号分布式云盘的设计与实现 一.前言 在学习了hadoop2.2一个月以来,我重点是在学习hadoop2.2的HDFS.即是hadoop的分布式系统,看了非常久的源代码看的 ...
- graphpad软件百度云分享吧_还在用百度云软件?来试试这四个良心的云盘软件吧!...
天翼云盘 http://t.cn/StujV7 一看名字相信大家都知道它是电信的云盘软件,没错它是一款由中国电信推出的云存储服务,为用户提供跨平台的文件存储.备份.同步及分享服务,是国内领先的免费网盘 ...
- 育网校园云盘软件简介(四维一体解决方案)
分类: 数据库系列 mysql -uroot ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/ ...
- 基于Hadoop2.2.0版本分布式云盘的设计与实现
基于Hadoop2.2.0版本分布式云盘的设计与实现 一.前言 在学习了hadoop2.2一个月以来,我重点是在学习hadoop2.2的HDFS.即是hadoop的分布式系统,看了很久的源代码看的我真 ...
最新文章
- 计算机一级考试试题 文明,XP计算机文明基础模拟试题库1.doc
- USACO Section1.3 Combination Lock 解题报告
- 行千里,看山城轻轨穿楼越林;致广大,望重庆交通桥上桥下
- SLAM Cartographer(10)子图
- 如何从Windows中访问Linux硬盘,干货:如何从 Windows 系统访问 Linux 文件
- 【用Java模拟KTV点歌系统】
- 谷歌浏览器快速保存整个网页的方法
- 如何在C加加的面向对象写游戏 我的世界
- Python爬取各种类型网站数据(视频,图片居多)
- 川大计算机专业导师冯子亮,川大计算机学院硕导名单_跨考网
- win7系统服务print spooler 无法启动解决方法(开启及关闭方法)
- 痞子衡嵌入式:揭秘i.MXRTxxx系列上串行NOR Flash双程序可交替启动设计
- log4j2:占位符引起的内存泄漏bug
- android入门之broadcast
- 让NFT-Fi流行起来
- 70块钱打造简单家庭NAS
- 李html画布,李雪松的绘画
- 怎样可以把PDF文档转换成高质量的JPG图片
- 用dumpbin.exe工具查看DLL
- 计算机专业基础综合先看什么,先别学了,你的考研初试科目已经变了!!!