Violet音乐社区 - 个人总结报告
一、项目概述
1.1 项目背景
音乐是一门艺术,是由有组织的乐音来表达人们情感、反映人类现实生活情感的艺术。现代科技的发展使得人们可以利用网络随时随地的享受音乐,然而在当今互联网却很少有一个以音乐为媒介的社交平台。本开发团队想以“音乐+社交”的形式,开发一款集听歌、交友和讨论为一体的网上社区——“Violet”音乐社区。Violet多指紫罗兰,也可形容羞怯的人,本团队旨在通过此平台增强人们对音乐的交流,同时拉近人与人之间的距离。
1.2 技术路线
项目整体采用了B/S架构,并采用前后端分离技术。
前端使用 Vue.js + ElementUI + axios
后端使用 Flask+MySQL
1.3 实现情况
用户、歌曲歌单、圈子帖子、点赞、评论等模块都基本实现了,有小部分功能存在冗余,重复工作量,因为时间受限,没用将我们的设计全部实现。但总体设计中的绝大部分功能都 进行了实现,核心功能、主要业务可以运行。达到了我们立项的基本目标。
1.4 项目文档
- Violet音乐社区需求分析说明书:https://www.cnblogs.com/Keadin/p/11791088.html
- Violet音乐社区设计文档:http://www.cnblogs.com/Keadin/p/11885656.html
- Violet音乐社区API接口文档:https://www.showdoc.cc/589304476235742
- Violet音乐社区界面原型手册:https://www.cnblogs.com/Keadin/p/11974412.html
1.5 项目源码
- Violet音乐社区前端源码:https://github.com/KeadinZhou/se-violet-web
- Violet音乐社区后端源码:https://github.com/shysimon/violet
1.6 项目成果
- Violet音乐社区界面原型demo:http://kealine.top/SE/demo/
- Violet音乐社区完成版:http://kealine.top/violet/
二、个人工作总结
2.1 前期工作
在立项之初,我通过PowerDesigner设计数据结构与数据库。

2.2 中期工作
完成了歌曲歌单方面的后端编写,以及设计了歌曲歌单的懒导入方案(保证了本地歌单操作的快速,以及曲库的广度)。

通过歌单加载其信息以及包含歌曲的所有信息
搜索歌曲同时从网易云爬取歌曲,并去重创建歌手与专辑,与之匹配
歌曲播放请求会同时给歌曲及其歌单增加播放量,作为推荐排序的依据
2.2.1 后端接口工作
主要考虑简化前端的操作,当前端需要请求数据的时候,比如说请求歌单信息,我后端就根据歌单id,去获取歌单的所有信息,然后同时把歌单下所有的歌曲,还有所有的评论也一起返回给前端,在返回的歌曲信息中,歌曲的歌手与歌曲的专辑信息分别存在vsinger,vsongsheet中,也要整合起来将名字返回给前端输出,在返回评论的时候,根据现在的用户也要返回相应的点赞信息(是否点赞)。给我一个歌单id,我就要返回给前端所有的这么多信息,后端的各个模块都是类似的情况,一开始的代码,都是以实现功能为主,模块化地不是很好,返回的数据也不能满足前端需求(一开始有好多需求的确没有预测到),后面我把所有代码重构了,全都模块化了之后才将前端需求全部满足。
2.2.2 网易云歌曲的懒加载
因为我们曲库之中的歌曲,要加入歌单之后才能从歌单的渠道获取到,因此第一次一定使通过搜素获取到的,我的做法就是每次搜索的时候,从网易云爬取歌曲,再去重加入到数据库中,然后从数据库中获取数据,如果搜索过的关键字则跳过网易云爬取的过程,这样可以有效地加快反应速度,也使得曲库足够大。至于网易云的爬取工作,我是通过封装在我服务器上的爬取接口(之前的工作),简化了这个项目之中有关爬取的工作。
2.3 后期工作
完善及模块化整体后端代码(后端总负责人)。和前端同学一起改进了后端API接口,后端bug修复。
三、项目总结
3.1 对于前后端工作配合的理解
在写这个项目之前,在我的脑海里对于后端该如何给前端提供服务,一直都有两种构想,一种是将数据打散,一个请求一个数据,另一种是将数据打包,一个请求,将其整体返回前端。经过了这一次项目的实践,我知道了显然是后者更好,简化了前端代码,也减少了前后端传输数据的次数。
但是还不够,我本来设想是,查询歌单,就返回歌单,查询歌曲,就返回歌曲。实际上开始工作之后,负责前端的同学就告诉我,通过id查询歌单的时候,最好需要把歌单信息,以及歌单底下的歌曲全部返回,这样可以减少前端很多工作量。
3.2 在此次项目中吸取的经验
因为大家都是第一次写这样的项目,在真正动手之前,有很多困难没用预见,用之前开会上总结的后端接口能实现,开始工作后发现有更优的方案,然后再一起总结,这本身也是学习的过程。
经过这一次项目的实践,我对项目的开发有了更深的了解,对项目开发前后端相应的开发所需要花费的时间有了一定的概念,也对前端的工作方式有了一定了解,知道了如何整合数据减少前端工作量。通过这一次六人小组的团队协作,与团队成员的不断磨合,也锻炼了我的团队协作能力。
四、课程建议
这门课初期从《构建之法》与《人月神话》入门其实看着对软件工程的水平提升有限,但是看过的一些知识、方法确实留在脑子里,当我编程碰壁,走弯路,大量重复劳动的时候,自然而然地开始反思,修正自己的错误行为,最终在实践中提升软件工程水平。
老师与助教在整个项目过程中给了我们很大的帮助,在多次在班级、例会中都给了我们建设性的建议,让我们少走了许多弯路。
我对课程的建议:
Violet音乐社区 - 个人总结报告的更多相关文章
- Violet音乐社区 - 总结报告
目录 一.项目概述 1.1 项目背景 1.2 编写目的 1.3 项目文档 1.4 项目源码 1.5 项目成果 二.个人工作总结 1.1 工作概览 1.1.1 作为项目组组长 1.1.2 作为项目组成员 ...
- Violet音乐社区需求分析说明书
目录 一.引言 1.1 编写目的 1.2 开发背景 1.3 开发工具 二.项目需求 2.1 角色定义 2.2 模块划分 2.3 功能概述 2.4 数据流图 三.前端页面 四.软件要求 4.1 性能要求 ...
- Violet音乐社区设计文档
目录 Violet音乐社区设计文档 一.引言 1.1 编写目的 1.2 开发背景 二.用例图设计 2.1游客实例设计 2.2 管理员实例设计 2.3 普通用户实例设计 三.类图设计 3.1 歌手类 3 ...
- Violet音乐社区界面原型手册
目录 Violet音乐社区界面原型手册 一.引言 1.0 项目前阶段相关文档 1.1 编写目的 1.2 开发背景 二.界面原型展示 2.0 界面设计说明 2.1 首页 2.2 歌单/专辑/单曲界面 2 ...
- 网易云音乐APP分析
网易云音乐-感受音乐的力量 你选择的产品是? 网易云音乐 为什么选择该产品作为分析? 之前用的一直是QQ音乐,但是有一天一个朋友分享了一首网易云上的音乐(顺便分享一下歌名:Drop By Drop) ...
- 使用率激增250%,这份报告再将 Serverless 推向幕前
作者 | 望宸 来源 | Serverless 公众号 相比去年,国外 Serverless 的适用群体在迅速扩大,函数执行时长不断增加,使用方式也越加成熟,开发者工具也更加开放.本文是对 Dat ...
- AI音乐创作,让每一个人都成为音乐家
从录音带.MP3到专业的耳机.音箱,随着音乐消费方式的不断升级,音乐创作的专业"门槛"也在AI技术的加持下逐渐大众化,创作者的创新设计.创作频率也在持续增强,能降低创作门槛且智能化 ...
- 如何利用Social Listening从社会化媒体中“提炼”有价值的信息?
本文转自知乎 作者:苏格兰折耳喵 ----------------------------------------------------- 在本文中,笔者将会介绍大数据分析主要的处对象---社会化媒 ...
- OpenStack 企业私有云的若干需求(4):混合云支持 (Hybrid Cloud Support)
本系列会介绍OpenStack 企业私有云的几个需求: 自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云( ...
随机推荐
- 模板引擎Thymeleaf
1.Thymeleaf简介 Thymeleaf 是一个跟 Velocity.FreeMarker 类似的模板引擎,它可以完全替代 JSP .相较与其他的模板引擎,它有如下三个极吸引人的特点 Thyme ...
- NSURLSession使用(整理版)
NSURLSession使用 1.NSURLSession诞生于2013年,但其在前几年一直生活在NSURLConnection的阴影下,直到iOS9的出现,NSURLConnection被官方宣布弃 ...
- PDF怎么删除页面?教你两个超级好用的方法
在日常办公中,由于工作需要我们有时候会对PDF文件中的内容进行二次编辑,可能需要删除PDF文件中的一些页面.那么PDF怎么删除页面呢?小伙伴们还在为这个问题苦恼吗?那么今天小编就来教大家两个超级好用的 ...
- Java学习笔记(面向对象下)
面向对象(下) 类的继承 类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类称为子类,现有类称为父类,子类会自动拥有父类所有可继承的属性和方法.(用extends关键字) //定义A ...
- 第八章 使用jQuery操作DOM
DOM操作: jQuery中提供了一系列操作DOM强有力的方法,它们不仅简化了传统JavaScript操作DOM时繁冗的代码,更加解决了令开发者苦不堪言的跨平台浏览器的兼容. 它还让有页面元素真正动起 ...
- 第4节:Java基础 - 必知必会(中)
第4节:Java基础 - 必知必会(中) 本小节是Java基础篇章的第二小节,主要讲述抽象类与接口的区别,注解以及反射等知识点. 一.抽象类和接口有什么区别 抽象类和接口的主要区别可以总结如下: 抽象 ...
- 拓展KMP分析
拓展kmp是对KMP算法的扩展,它解决如下问题: 定义母串S,和字串T,设S的长度为n,T的长度为m,求T与S的每一个后缀的最长公共前缀,也就是说,设extend数组,extend[i]表示T与S[i ...
- 纯手工搭建K8s(单节点)
准备说明: 因为为纯手动搭建,所以针对安装时需要的一些安装包需提前下载好 cfssl_linux-amd64. cfssljson_linux-amd64. cfssl-certinfo_linux- ...
- nginx部署基于http负载均衡器
nginx跨多个应用程序实例的负载平衡是一种用于优化资源利用率,最大化吞吐量,减少延迟和确保容错配置的常用技术. 环境介绍 配置nginx负载均衡器因会用到多台服务器来进行,所以下面我会用到docke ...
- 【React】393 深入了解React 渲染原理及性能优化
如今的前端,框架横行,出去面试问到框架是常有的事. 我比较常用React, 这里就写了一篇 React 基础原理的内容, 面试基本上也就问这些, 分享给大家. React 是什么 React是一个专注 ...