Dashboard for course assignment
可选的技术选型及其选择理由分析
前端框架
Vue
Vue是一套用于构建用户界面的渐进式框架,可以自底向上逐层应用。Vue容易上手,便于与第三方库整合(例如element-ui),另外Vue是中国开发的前端框架,官方文档全中文,便于学习使用,另外开发人员之前有学习过Vue,所以采用Vue来搭建前端是最合理的选择。
element-ui
element-ui是一个与Vue兼容的桌面端组件库,该组件库中包含众多网站开发中常用的控件,如下拉菜单,导航栏,进度条等等,官网上每个例子后面都有实现代码,方便易用,而且这些控件UI十分优美,可以极大地提高用户体验。
jQuery
jQuery的重要性不言而喻,控制页面组建的最方便的js包。在前端开发的过程中,将jQuery嵌入到了Vue中,加速了前端页面的开发。
可选的技术选型及其选择理由分析
所以我们后端框架选择的是nodejs作为大家开发的统一框架。
后台服务支持 没什么好说的,Nginx,傻瓜式操作。
但是还是因为效率负提升的考虑,最后还是选用了mysql作为数据库的技术栈。
架构是前后端分离,前端发放服务器和后端交互服务器分离,其中用restful-like api进行交互。用mysql作为持久化层。
前端的模式为mvc模式,其中使用到的外部支持库有编辑调查表的survey.js
架构的物理层架构,分别分成了前端用户的浏览器访问端,从静态服务器中获取前端文件,用restful的方式从api服务器去进行交互,其中涉及到持久层的交互由与mysql dbrs完成。
https://github.com/whatsup-sysu/Backend
附文件《后端API测试报告》
前端的划分主要体现在页面的划分上。前端根目录的src文件夹是需要自己编写的部分,里面记录了页面文件以及路由配置。为了便于管理,路由配置全部放到了index.js文件中。前端页面全部放到components文件下。前端的分工主要体现在页面的分工上,不用的人完成不用部分的页面。前端页面总共分为8个模块,分别为
这个7个模块用到的vue页面,js,css以及静态资源等全部独立地放到不同的文件夹中。
结构化编程:为了便于前端的分工,将前端需要实现的页面以及业务流程进行了划分,大致分为了8个模块,分别为创建任务(CreateTask),个人信息(Information),登录(Login),注册(Register),首页(MainPage),问卷系统(Survey),任务详细信息(包含接受任务流程),(TaskDetail),图片管理(Photo)。划分好模块之后编程变得更加容易。
前端模块源码链接:https://github.com/whatsup-sysu/Frontend/tree/master/whatsup/src/components
回调函数,使用回调函数异步地向后端发送请求,支持了并发访问,优化用户体验。
//例子:首页在创建的时候需要向后端清楚数据,将目前正在发布中的任务数据保存到前端寄存器,便于任务的显示
//以及对任务的各种操作。请求数据采用异步请求使用回调函数来进行实现。
created: function() {
this.uid = this.$route.query.uid
if(this.uid==null){
this.uid=$("#username").text();
}
if(this.id==null){
this.uid = this.$cookies.get('id')
}
//如果当前没有任务数据的话就异步地向后端请求数据
if(this.nowduty==null){
var _self = this;
//采用ajax的方式异步请求
$.ajax({
type: 'GET',
url: '/api/duties/screen?pageNumber=1&countPerPage=7&sortType=time&sortOrder=ascend',
dataType: 'json',
timeout: 3000,
success: function(result, xhr) {
//成功请求数据之后的回调函数,解析并保存得到的数据
console.log(result)
_self.nowduty = result['content']
_self.nowpage = 1
_self.nowdutynum = result['count']
if(_self.nowdutynum<7){
for(var i=_self.nowdutynum;i<7;i++){
_self.nowduty.push(0);
}
}
//根据得到的数据动态修改页面内容
for(var i=0;i<7;i++){
if(_self.nowduty[i]!=0){
var content="#dcontent"+(i+1).toString();
$(content).text(_self.nowduty[i].dintroduction);
var type = "#dtype"+(i+1).toString();
$(type).text(_self.nowduty[i].dtype);
var title = "#dtitle"+(i+1).toString();
$(title).text(_self.nowduty[i].dtitle);
var sponsor = "#dsponsor"+(i+1).toString();
$(sponsor).text(_self.nowduty[i].dsponsor);
var modifyTime = "#dmodifyTime"+(i+1).toString();
$(modifyTime).text(_self.nowduty[i].dmodifyTime);
var curaccepters = "#dcuraccepters"+(i+1).toString();
$(curaccepters).text(_self.nowduty[i].curaccepters);
} else {
//alert("hidden");
var id="#u128-"+(i+1).toString();
$(id).css("visibility","hidden");
}
}
},
//请求数据失败之后的回调函数,提示出错,输出错误信息。
error: function(result, xhr) {
console.log(result)
alert('服务器连接错误: ' + xhr)
}
})
}
}
后端架构设计技术: