基于MVC模式的音乐平台设计与实现

2018-12-18 10:16闵娴有郑皓月黄健舟冉瑞生
电脑知识与技术 2018年26期

闵娴有 郑皓月 黄健舟 冉瑞生

摘要:为了满足人们对音乐软件日益提高的需求,设计并开发了一套基于MVC模式的在线音乐平台系统。该系统以UML出发进行面向对象分析与设计,采用C/S(Client/Server)架构、MySQL数据库、Live555流媒体服务器、json数据传输等技术,以及C++、QMl编程语言,对系统的功能模块、UI界面和数据管理进行了设计与实现。系统主要包括6个功能模块:在线听歌、下载音乐、发布音乐、音乐笔记、以歌交友、音乐管理。该音乐平台系统是一套功能齐全、操作方便、可适用于不同群体的在线音乐软件。

关键词: MVC;C/S;UML;live555;音乐平台系统

中图分类号:TP311.52 文献标识码:A 文章编号:1009-3044(2018)26-0059-04

Abstract: In order to meet people's increasing demand for music software, Based on the MVC software architecture, a set of online music platform system is designed and developed. Started from UML, an object-oriented analysis and design is carried out. Some technologies, such as the C/S (Client/Server) structure, MySQL database, Live555 streaming media server, as well as C++, QMl programming language, are adopted, and then the function module, UI interface and database of the system are completed. There are six modules: online listening, downloading music, publishing music, music notes, making friends through music and music management. The music platform system provides an online music software with complete functions and convenient operation for different groups.

Key words: MVC; C/S; UML; live555; music platform system

1 背景

現今社会互联网发展迅速,随着人们生活水平的提高,单纯的本地音乐播放器已经无法满足人们的需求,人们已经不仅仅希望使用音乐软件听歌,还希望通过音乐软件进行交友,找到一些具有共同音乐爱好的朋友。甚至是直接通过音乐软件发布作品,通过强大的互联网快速的传播自己的作品。逐渐地在线音乐软件成为人们生活中不可缺少的一部分。

该音乐平台系统以MVC模式为基础,采用分层C/S(Client/Server)架构进行设计。在实现时采用了MySQL数据库存储系统的歌曲、歌单等信息,采用Live555流媒体服务器实现在线音乐的播放解析,采用QMl语言搭建系统操作界面,开发完成了音乐平台系统。不同于一般的音乐播放器,该在线音乐软件提供发布音乐、以歌交友、音乐管理等功能,从而形成一个在线音乐平台。

系统的用户分为6个类别:喜好者、音乐痴迷者、著名歌手、创作者、系统管理员、系统维护员。其中将直接使用系统听歌的普通用户分为喜好者、音乐痴迷者、著名歌手三类。在该系统中,有一类特殊的用户,叫做创作者,除了拥有普通用户的操作外,还拥有上传音乐资源到系统中的权限。另外负责管理系统数据,包括广告、音乐资源、账户数据等的整理、备份以及审核的人属于系统管理员类别,对于不同的系统数据,分别对应不同的管理人员。最后一类便是系统维护者,主要负责系统的运营、维护、测试等支持系统正常工作职责。

2 MVC模式

MVC是基于模型-视图-控制器(Model-View-Controller)的软件体系结构模式,适合构建复杂的应用程序。MVC软件体系结构由模型(model)、视图(View)和控制器(Controller)三个组件构成。MVC的核心是实现三层甚至多层的松散耦合,它将应用程序抽象为三个部分,三者既分工又合作地完成用户提交的每项任务。MVC的三个组件的功能分别为:

模型(Model):提供应用的核心功能,知晓每个依赖它的视图和控制器组件。

视图(View):向用户提供某个特定风格或样式的信息展示。该视图从模型中获得数据,并在某个其他视图中的数据发生变化时更新它的表示。视图创建了它所关联的控制器。

控制器(Controller):接受事件形式的用户输入,这些事件会触发模型中的操作的执行。这些操作可能引起信息的变化,反过来触发所有视图的更新以确保他们都是更新的状态。

MVC组件的功能以及各个组件的相互关系如图1所示:

MVC模式使应用程序的输入、输出分开,使应用程序的核心功能(model)与接口分离,并引入一个传播机制(Propagation mechanism)使得模型能够通知每个视图:模型的数据发生变化后,通知视图自动更新,这也经常被称为依赖机制(dependency mechanism)。

3 技术简介

该系统采用Qt Creator跨平台集成开发环境进行软件开发。在实现过程中,主要采用了如下几个技术:

3.1 C/S模式

C/S模式(Client/Server),即客户端/服务器模式,Client和Server一般是相距很远的两台计算机,Client程序将用户的请求提交给Server程序,再将Server程序处理的结果返回给用户。C/S模式可以将任务合理的分配到Client端和Server端,降低了系统的通讯开销,可以充分利用两端硬件资源的优势。

3.2 MySQL数据库技术

MySQL是一个高性能的且相对简单的关系数据库系统,相对于其他数据库来说,其复杂性相对较低。在该系统中,MySQL数据库主要用于存储系统大部分数据,包括所有歌曲、歌单、账户的信息,以及记录不同对象之间的关系的关联表。

3.3 live555流媒体服务器

Live555是一个实现了RTSP协议的开源流媒体框架,live555包含RTSP服务器端的实现以及RTSP客户端的实现。Live555可以将若干格式的视频文件或者音频文件转换为视频或者音频流,然后在网络中通过RTSP协议分发传播,这也是流媒体服务器的核心功能。该服务器主要用于在线音乐的播放解析,同时在线的音乐资源文件也存放在该服务器上。

3.4 Json数据传输技术

Json全称JavaScript Object Notation,是一种轻量级的数据交换格式,由名字可知,json就是Javascript中的对象和数组,通过对象和数组这两种结构可以表示各种复杂的结构,这也是选择使用Json传输格式的主要原因之一。

对于音乐平台系统来说,尤其是在用户打开软件的时候,客户端要从服务器上拉取大量的数据,以便生成系统的推荐歌单页面,另外这些数据同时还要根据来自不同的对象而分成不同类别的数据进行传输,因此,使用Json数据格式,将数据组织成对象和数组的形式进行传输,极大的增加了传输的性能和数据的阅读性。同样的,也极大的节省了客户端解析服务器返回的数据的速度,提了整个系统的性能。

4 系统设计

4.1 系统总体架构

该系统以C/S为总体架构,以MVC模式为思想,设计了具有四层架构的一套在线音乐平台系统。四层架构主要实现为:表示层、应用逻辑层、域层、数据层。View主要实现为表示层,即客户端界面;Model主要实现为系统的逻辑层、域层和数据层;Controller主要负责对系统实体的控制和消息的传递控制,在系统中设计为三个类:FanController、SonglistController、SongController。系统总体架构的包图如图2所示:

4.2 域层和数据层设计

域层主要包含了系统所有的实体对象,而数据层则负责域层实体对象的存储、查询和管理。系统中数据层实现为数据代管者Broker,针对于不同的实体对象,主要的分别有三类Broker:SongBroker、SongListBroker、AccountBroker。域层的设计主要针对Account、Song、SongList四个实体进行,每个实体对象存储了对象相关的数据结构和行为。系统实体类模型如图3所示。

图3中的各个实体的描述如下:

Account:通过系统注册的账户,分为两类:Fan和Creator;

Fan:系统主要的用户。简单来说,即使用系统听歌的普通用户;

Creator:系统的特殊用户,拥有上传音乐作品到系统的特权;

Song:系统中的歌曲,该实体记录了单首歌曲的基本信息,如歌名、专辑、路径等等;

SongList:系统中的歌单,该实体记录了单个歌单单的基本信息,如歌单名、创建者、创建时间、简介等等;

UploadSystemList:记录创作者上传音乐的列表,继承于SongList实体。该实体与Creator限定关联,即只有创作者才可拥有该实体对象;

Commit:记录了系统中某条评论的基本信息,如时间、评论者等等。对于歌曲、歌单和用户来说,都和评论有一对多的关联关系;

Log:代表了系统中用户相关的所有日志,如播放日志、下载日志等等。其属性记录了日志的时间、主人以及相关日志内容;

LogLine:系统日志中的某一行,与Log存在一对多的关联关系;

AccountLog:从账户Account和Log的关联关系中提取出的关联类,主要用于体现其关联,并记录相关关联数据。

4.3 控制类设计

当用户点击事件触发时,客户端将用户的请求传给服务器,服务器FsingController接收并判断消息类型,根据类型将消息分配给不同的实体Controller,实体Controller通过代管者(Broker)查询数据并返回,最后客户端接收结果并显示到界面。系统控制类图如图4所示。

5 模块设计

系统主要分为以下6个模块:

1) 在线听歌:系统以排行榜、推荐歌单的形式向用户推荐在线音乐,主要呈现在发现音乐界面,用户也可以通过关键词搜索找到自己想要听的音乐。主要通过Live555流媒体服务器实现在线播放音乐;

2) 下载音乐:无论是游客状态还是登录状态,用户都可以选择下载自己喜欢的音乐,并存放在本地。就该音乐平台系统而言,用户下载的音乐存储在/root/FSing/download目录中。同时用户的下載记录将被记录显示到下载管理中,用户可以对已下载的音乐进行增删;

3) 发布音乐:这类功能主要针对的用户是创作者。创作者可以借助该系统在第一时间上传自己的原创作品,经过系统管理员审核之后,发布到系统供其他人收听。这样创作者就拥有了有一个免费的、快捷的发布传播自己的创作的平台,同时这也使该音乐平台增加了更多的不同风格的音乐资源;

4) 音乐笔记:这也是该系统的独特的地方。用户在听歌的时候,可能会有些不同的感触或者心情。也许是因为这首歌打动了你,也许是因为当时特殊的心情。用户都可以通过音乐笔记记录下这一刻的心情和感触。这就像是一本音乐日记,当你某一天翻开时,将会很有感触万分;

5) 以歌交友:用户之间可以相互关注,结交具有相同音乐爱好的朋友,并且可以播放、收藏相互的歌單。通过私信的方式,用户可以和自己关注的用户聊天,同时也可以取消对该用户的关注;

6) 音乐管理:用户可以增删改自己创建的歌单,或者自己下载、收藏的音乐。对于收藏的其他用户的歌单,只能进行移除出收藏列表操作。同时,用户可以设置歌单中音乐的播放、排序顺序。

6 系统实现

6.1 发现音乐

发现音乐界面主要显示的是若干推荐歌单的基本信息,包括歌单名、收听量以及收藏量等。用户可以根据这些信息选择某一歌单,查看更多的歌单信息。同时,根据用户的播放记录,系统会生成专属于用户的播放日志,并根据播放日志制定针对于该用户独特的推荐歌单。其界面设计如图5所示:

6.2 歌单详细信息

歌单详细信息界面显示了歌单的一些基本信息以及歌单中所有的歌曲,系统中的歌单主要有两类:系统生成的推荐歌单和用户创建的歌单。其界面设计如图6所示:

6.3 歌词显示

当用户点击某首音乐播放时,系统会自动从服务器上下载歌词文件,再显示到歌词界面中。根据音乐播放的进度,歌词界面的歌词会进行自动更新同步。其界面设计如图7所示:

6.4 播放列表

显示了当前播放歌单中的所有歌曲,用户可以通过播放列表切换歌曲。当用户点击播放某首歌曲,但并未指定下一首播放歌曲时,系统默认根据播放顺序选择播放列表中的某首歌曲播放。其界面设计如图8所示:

6.5 用户个人信息

用户可以点击右上角的头像查看或者修改个人信息,主要包含了用户的关注、粉丝人数,创建歌单、以及收藏歌单的列表。同时用户可以点击粉丝或关注查看相关的所有用户。其界面设计如图9所示。

6.6 用户粉丝/关注用户查询

该界面显示了用户所有的关注/粉丝用户。界面设计如图10所示。

7 结束语

该文分析了在线音乐软件的现状和需求,同时结合MVC模式,设计并实现了适用于大多数群体的在线音乐平台系统。采用C/S架构设计系统,将业务逻辑层、数据库层和表示层独立开来,提高了系统的响应速度和安全性。系统操作界面以QMl进行搭建,美观大方,操作快捷,增加了系统的界面友好性。同时,在功能方面,该音乐系统还设计实现了不同于其它原有音乐软件的音乐笔记功能,提高了系统的独特性和市场竞争力。该系统是一个界面友好、高效且易于推广的音乐平台。

参考文献:

[1] 李金刚, 赵石磊, 杜宁, 等. 软件体系结构理论及应用[M]. 北京: 清华大学出版社, 2013.

[2] 张友生. 软件体系结构原理、方法与实践[M]. 2版. 北京: 清华大学出版社, 2010: 283-297.

[3] Simon Bennett, Steve McRobb, Ray Farmer. Object-Oriented Systems Analysis and Design Using UML[M]. 4版. 北京: 清华大学出版社, 2013.

[4] kurt Bittner, Ian Spence. Use case Modeling[M]. 北京: 清华大学出版社, 2002.

[5] Michael Blaha, James Rumbaugh. Objeect-Oriented Modeling and Design with UML[M]. 北京: 人民邮电出版社, 2006.

[6] 霍亚飞. Qt Creator快速入门[M]. 北京: 北京航天航空大学, 2017.

[7] John Torjo. Boost. Asio C++ Network Programming[M]. Birmingham: Packt Publishing Ltd, 2013.

[8] 谭云杰. 大象:Thinking in UML[M]. 北京: 中国水利水电出版社, 2012: 214-235.

[通联编辑:谢媛媛]