跳到主要内容
  1. Posts/

SwingMood 项目实践心得

·

基本告别开发了。

又一年双创,不知道为什么又报了,现在想来后悔不已,但也不是全无收获。

技术 #

技术上,经过一天钢铁这类商业项目的锻炼,Quasar+Webpack+Vue 全家桶已经用得比较熟了,SwingMood 开发过程中更多是因为要适配移动端,进一步加深了对 flexbox 的理解。

比较有意思的是在项目进行时我同时也在实习,进行一些渗透测试的工作。渗透过程中,甲方开发用了一种很蠢的方式进行会话管理:使用 IP 标识一个账户。这对于攻击者来说简直是天大的福音,因此我们不禁去质询开发为什么要这样做,得到了如下回答:

前端采用了 axios 发起异步请求,后端本来采用 session 进行会话管理,这需要前端发起请求时带上 Cookie。但当设置 withCredentialtrue 时,后端必须设置 Access-Control-Allow-Credentials 头;这时,Access-Control-Allow-Origin 头必须是一个指定的源,不能为 *。于是我们只能取消了 session 机制。

然而正确的做法是指定 Access-Control-Allow-Origin 头为一个或一组特定的源,例如 http://localhost:8080 等。实际生产环境中,可以指定为前端页面所在的源,这也是我们给出的修复建议。实际上,在 SwingMood 开发过程中我就遇到了完全相同的问题,前端开发经验总算派上了点用场。

剩下的是一些技术上的小进步:

  1. 处理跨域问题时,最方便的方法是直接使用 webpack 的开发服务器代理,将 changeOrigin 设置为 true
  2. axios 中对后端返回数据的处理,比较方便的方法是添加拦截器对 res.data.code 进行检查
  3. 深入学习并理解了 Vue 生命周期钩子的调用顺序
  4. 对于需要登录才可以访问的页面,最方便的处理方法是利用 VuerRouter 的 beforeEach 方法,检查页面的自定义属性
  5. 为了解决页面刷新丢失 session 的问题,可以监听 beforeunload 方法将 Vuex 的 state 存入 sessionStorage,并在页面加载时取出。

由此可以看出我的 Vue 技术还有待提高,对底层原理的理解尚不到位。

管理 #

在这次项目过程中我作为组长,需要协调好各队员间的工作。对于这类任务我并没有什么经验,因此这次做得不是特别好,导致项目进度耽误了一些。

下面关于项目流程的一些记录,以反映翻车的具体原因:

  • 项目初期,我按各人意愿分配了任务
    • 心理同学 * 2:阅读文献、提供理论支撑
    • 熟悉前端的同学 A:写后端(?)
    • 熟悉后端的同学 B:写前端(?)
  • 我完成了 app 整体界面框架,用时 3 天
  • A 提出想采用 protobuf + grpc 构建后端,由于项目本来就是为了学习新知识,我同意了
  • 给 B 安排前端学习计划
  • 和 A 一起调试奇怪的 Golang 专属问题
  • 中间大约 2 个月的时间啥也没干
  • 快答辩了,和心理的同学明确需求,修改前端界面,催后端
  • 终于发现 💊,互换 A/B 工作
  • 后端变回 Spring 了,为了加速 B 的进度我甚至写了不少 Java 代码(?)
  • 后端开发基本完成,大概用时 1 周多一点(?)
  • 让心理同学收集素材,继续完善前后端
  • 开发完成,打包遇到问题,又调试 3 天
  • 搞定,写报告,提交

所以说作为管理者我是要背很大的锅的。。回顾整个项目流程,我感到十分迷惑。我觉得今后在进行任务分配时,应做到:

  • 合理分配,即尽量根据队员所擅长的方面来分配对应的任务
  • 设定严格的交付时间,以防止出现拖延的情况
  • 对于需求中不明确的地方,应及时沟通,并尽可能做到在软件需求上明确无歧义