一、项目概述

1.1 项目背景

音乐是一门艺术,是由有组织的乐音来表达人们情感、反映人类现实生活情感的艺术。现代科技的发展使得人们可以利用网络随时随地的享受音乐,然而在当今互联网却很少有一个以音乐为媒介的社交平台。本开发团队想以“音乐+社交”的形式,开发一款集听歌、交友和讨论为一体的网上社区——“Violet”音乐社区。Violet多指紫罗兰,也可形容羞怯的人,本团队旨在通过此平台增强人们对音乐的交流,同时拉近人与人之间的距离。

1.2 技术路线

项目整体采用了B/S架构,并采用前后端分离技术。

前端使用 Vue.js + ElementUI + axios

后端使用 Flask+MySQL

1.3 实现情况

用户、歌曲歌单、圈子帖子、点赞、评论等模块都基本实现了,有小部分功能存在冗余,重复工作量,因为时间受限,没用将我们的设计全部实现。但总体设计中的绝大部分功能都 进行了实现,核心功能、主要业务可以运行。达到了我们立项的基本目标。

1.4 项目文档

1.5 项目源码

1.6 项目成果

二、个人工作总结

2.1 前期工作

在立项之初,我通过PowerDesigner设计数据结构与数据库。

2.2 中期工作

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

通过歌单加载其信息以及包含歌曲的所有信息

搜索歌曲同时从网易云爬取歌曲,并去重创建歌手与专辑,与之匹配

歌曲播放请求会同时给歌曲及其歌单增加播放量,作为推荐排序的依据

2.2.1 后端接口工作

主要考虑简化前端的操作,当前端需要请求数据的时候,比如说请求歌单信息,我后端就根据歌单id,去获取歌单的所有信息,然后同时把歌单下所有的歌曲,还有所有的评论也一起返回给前端,在返回的歌曲信息中,歌曲的歌手与歌曲的专辑信息分别存在vsinger,vsongsheet中,也要整合起来将名字返回给前端输出,在返回评论的时候,根据现在的用户也要返回相应的点赞信息(是否点赞)。给我一个歌单id,我就要返回给前端所有的这么多信息,后端的各个模块都是类似的情况,一开始的代码,都是以实现功能为主,模块化地不是很好,返回的数据也不能满足前端需求(一开始有好多需求的确没有预测到),后面我把所有代码重构了,全都模块化了之后才将前端需求全部满足。

2.2.2 网易云歌曲的懒加载

因为我们曲库之中的歌曲,要加入歌单之后才能从歌单的渠道获取到,因此第一次一定使通过搜素获取到的,我的做法就是每次搜索的时候,从网易云爬取歌曲,再去重加入到数据库中,然后从数据库中获取数据,如果搜索过的关键字则跳过网易云爬取的过程,这样可以有效地加快反应速度,也使得曲库足够大。至于网易云的爬取工作,我是通过封装在我服务器上的爬取接口(之前的工作),简化了这个项目之中有关爬取的工作。

2.3 后期工作

完善及模块化整体后端代码(后端总负责人)。和前端同学一起改进了后端API接口,后端bug修复。

三、项目总结

3.1 对于前后端工作配合的理解

在写这个项目之前,在我的脑海里对于后端该如何给前端提供服务,一直都有两种构想,一种是将数据打散,一个请求一个数据,另一种是将数据打包,一个请求,将其整体返回前端。经过了这一次项目的实践,我知道了显然是后者更好,简化了前端代码,也减少了前后端传输数据的次数。

但是还不够,我本来设想是,查询歌单,就返回歌单,查询歌曲,就返回歌曲。实际上开始工作之后,负责前端的同学就告诉我,通过id查询歌单的时候,最好需要把歌单信息,以及歌单底下的歌曲全部返回,这样可以减少前端很多工作量。

3.2 在此次项目中吸取的经验

因为大家都是第一次写这样的项目,在真正动手之前,有很多困难没用预见,用之前开会上总结的后端接口能实现,开始工作后发现有更优的方案,然后再一起总结,这本身也是学习的过程。

经过这一次项目的实践,我对项目的开发有了更深的了解,对项目开发前后端相应的开发所需要花费的时间有了一定的概念,也对前端的工作方式有了一定了解,知道了如何整合数据减少前端工作量。通过这一次六人小组的团队协作,与团队成员的不断磨合,也锻炼了我的团队协作能力。

四、课程建议

这门课初期从《构建之法》与《人月神话》入门其实看着对软件工程的水平提升有限,但是看过的一些知识、方法确实留在脑子里,当我编程碰壁,走弯路,大量重复劳动的时候,自然而然地开始反思,修正自己的错误行为,最终在实践中提升软件工程水平。

老师与助教在整个项目过程中给了我们很大的帮助,在多次在班级、例会中都给了我们建设性的建议,让我们少走了许多弯路。

我对课程的建议:

1.平时可以有一些小测试,最好不算分,就是对期末考试的训练,毕竟想拿高分,期末考试也不能落下,还有就是降低期末考试的比例。
2.在课堂中,对于一些明确规定的图,给更多的一些应用的例子,比如说数据流图,网上例子有很多不同的标准,课件中的例子又不全,可以在课件中给更多一些的介绍,不然来回修改不得要领,那一堂课,好多同学都上得挺崩溃的。

Violet音乐社区 - 个人总结报告的更多相关文章

  1. Violet音乐社区 - 总结报告

    目录 一.项目概述 1.1 项目背景 1.2 编写目的 1.3 项目文档 1.4 项目源码 1.5 项目成果 二.个人工作总结 1.1 工作概览 1.1.1 作为项目组组长 1.1.2 作为项目组成员 ...

  2. Violet音乐社区需求分析说明书

    目录 一.引言 1.1 编写目的 1.2 开发背景 1.3 开发工具 二.项目需求 2.1 角色定义 2.2 模块划分 2.3 功能概述 2.4 数据流图 三.前端页面 四.软件要求 4.1 性能要求 ...

  3. Violet音乐社区设计文档

    目录 Violet音乐社区设计文档 一.引言 1.1 编写目的 1.2 开发背景 二.用例图设计 2.1游客实例设计 2.2 管理员实例设计 2.3 普通用户实例设计 三.类图设计 3.1 歌手类 3 ...

  4. Violet音乐社区界面原型手册

    目录 Violet音乐社区界面原型手册 一.引言 1.0 项目前阶段相关文档 1.1 编写目的 1.2 开发背景 二.界面原型展示 2.0 界面设计说明 2.1 首页 2.2 歌单/专辑/单曲界面 2 ...

  5. 网易云音乐APP分析

    网易云音乐-感受音乐的力量 你选择的产品是?  网易云音乐 为什么选择该产品作为分析? 之前用的一直是QQ音乐,但是有一天一个朋友分享了一首网易云上的音乐(顺便分享一下歌名:Drop By Drop) ...

  6. 使用率激增250%,这份报告再将 Serverless 推向幕前

    ​ 作者 | 望宸 来源 | Serverless 公众号 相比去年,国外 Serverless 的适用群体在迅速扩大,函数执行时长不断增加,使用方式也越加成熟,开发者工具也更加开放.本文是对 Dat ...

  7. AI音乐创作,让每一个人都成为音乐家

    从录音带.MP3到专业的耳机.音箱,随着音乐消费方式的不断升级,音乐创作的专业"门槛"也在AI技术的加持下逐渐大众化,创作者的创新设计.创作频率也在持续增强,能降低创作门槛且智能化 ...

  8. 如何利用Social Listening从社会化媒体中“提炼”有价值的信息?

    本文转自知乎 作者:苏格兰折耳喵 ----------------------------------------------------- 在本文中,笔者将会介绍大数据分析主要的处对象---社会化媒 ...

  9. OpenStack 企业私有云的若干需求(4):混合云支持 (Hybrid Cloud Support)

    本系列会介绍OpenStack 企业私有云的几个需求: 自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云( ...

随机推荐

  1. 模板引擎Thymeleaf

    1.Thymeleaf简介 Thymeleaf 是一个跟 Velocity.FreeMarker 类似的模板引擎,它可以完全替代 JSP .相较与其他的模板引擎,它有如下三个极吸引人的特点 Thyme ...

  2. NSURLSession使用(整理版)

    NSURLSession使用 1.NSURLSession诞生于2013年,但其在前几年一直生活在NSURLConnection的阴影下,直到iOS9的出现,NSURLConnection被官方宣布弃 ...

  3. PDF怎么删除页面?教你两个超级好用的方法

    在日常办公中,由于工作需要我们有时候会对PDF文件中的内容进行二次编辑,可能需要删除PDF文件中的一些页面.那么PDF怎么删除页面呢?小伙伴们还在为这个问题苦恼吗?那么今天小编就来教大家两个超级好用的 ...

  4. Java学习笔记(面向对象下)

    面向对象(下) 类的继承 类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类称为子类,现有类称为父类,子类会自动拥有父类所有可继承的属性和方法.(用extends关键字)   //定义A ...

  5. 第八章 使用jQuery操作DOM

    DOM操作: jQuery中提供了一系列操作DOM强有力的方法,它们不仅简化了传统JavaScript操作DOM时繁冗的代码,更加解决了令开发者苦不堪言的跨平台浏览器的兼容. 它还让有页面元素真正动起 ...

  6. 第4节:Java基础 - 必知必会(中)

    第4节:Java基础 - 必知必会(中) 本小节是Java基础篇章的第二小节,主要讲述抽象类与接口的区别,注解以及反射等知识点. 一.抽象类和接口有什么区别 抽象类和接口的主要区别可以总结如下: 抽象 ...

  7. 拓展KMP分析

    拓展kmp是对KMP算法的扩展,它解决如下问题: 定义母串S,和字串T,设S的长度为n,T的长度为m,求T与S的每一个后缀的最长公共前缀,也就是说,设extend数组,extend[i]表示T与S[i ...

  8. 纯手工搭建K8s(单节点)

    准备说明: 因为为纯手动搭建,所以针对安装时需要的一些安装包需提前下载好 cfssl_linux-amd64. cfssljson_linux-amd64. cfssl-certinfo_linux- ...

  9. nginx部署基于http负载均衡器

    nginx跨多个应用程序实例的负载平衡是一种用于优化资源利用率,最大化吞吐量,减少延迟和确保容错配置的常用技术. 环境介绍 配置nginx负载均衡器因会用到多台服务器来进行,所以下面我会用到docke ...

  10. 【React】393 深入了解React 渲染原理及性能优化

    如今的前端,框架横行,出去面试问到框架是常有的事. 我比较常用React, 这里就写了一篇 React 基础原理的内容, 面试基本上也就问这些, 分享给大家. React 是什么 React是一个专注 ...