个人作业——软件工程实践总结&个人技术博客
个人作业——软件工程实践总结&个人技术博客
作业描述
这个作业属于哪个课程 | 2021春|S班 |
---|---|
这个作业要求在哪里 | 软件实践寒假作业 |
这个作业的目标 | 课程回顾与总结,个人技术总结 |
其他参考文献 |
一. 课程回顾总结
问题回顾
对于之前的问题一,关于创新时机的问题,在这次的课程实践中我并没有得到什么够好的答案。我想这可能主要是课程实践一部分是命题类的实践作业,一部分的作业则是没有真正的拿出去创业和时间。再加上团队制作的软件是属于比较常见的日用记账类型,没有出现什么创新。
问题2:关于核心功能和产品的关系。对于这一点我在这次团队软工实践深有体会。我们制作记账软件的时候,有时因为要实现一些小功能而搞得焦头烂额,(例如记账按钮设置为可以滑动的悬浮球)。后续分析后认为没有太大必要,不如多花花心思在账单列表的展示这一方面。毕竟用户使用的主要还是这些核心功能。
问题3:团队合作的队员能力不匹配的问题。我觉得这个问题从结对作业到团队合作有了一些变化,过于我疑惑于争吵最后会变成“然后如果两个对于一个问题起了争执变成了谁嗓门大谁说了算该怎么办。”,在团队合作的时候,因为队员多,总归是大部分同学是处于理性的。至于能力不匹配的问题,在团队项目的分工实在很多,有的队员不擅长于编写代码,学习的内容较小,他们往往会主动承担其他责任,例如去撰写博客,或者搜集资料,总结经验。我认为这类工作也是十分有必要的。
问题4: 我的理解依然没有改变。我认为精通一项技能也足以成为大师。
问题5: 关于团队合作的鹦鹉。关于这个事情,我实话实说的是我确实有在团队实践里遇到浑水摸鱼得人,但是好在他并没有提出五花八门的想法,也没有去影响到团队的进度,这点我觉得实在是很幸运。
知识点总结
软工实践时往往会经历许多阶段,在需求分析阶段的时候,我认为最大的收获是如果跟队员沟通表达自己对产品的理解,并且跟队员一同进行调研。
在设计实现测试的时候,最大的收获其实就是学会了如果使用微信小程序进行开发。
最后发布的时候,收获倒是挺丰富的。微信小程序的发布非常麻烦,凡是涉及到用户UGC的,都需要小程序的主体为企业或个体工商户,并且还要进行icp备案。最终发布时还要对用户发布内容进行安全性过滤,并且经过7天的管局审核,才能正式通过并发布。一套流程下来正常在一个月左右。
课程心得
软工实践确实是一门快速提升同学开发能力的课程,但是课程开课时间的安排 以及课程内容的时间安排并不太让我感到舒服。我认为这门课最合适的时候是安排在大三上学习,这样到了大三下同学们就可以用学到的技术去参加公司面试,或者专心准备考研。
团队合作的时候总会有混子,但是如果大家做好自己的事,是能将混子对项目进度的影响降到最低的。因此与其花很多时间去跟混子争吵,不如做好手上的工作。
个人的体会是可以减少一些比较没啥意义的作业(例如软件测评、各种报告的书写)的占比,像团队github实践类的作业可以适当改变,我认为这个作业对团队氛围的培养是十分有用的。
最后的最后是 大家一定要诚信学习,公平竞争
二.个人技术总结
在团队开发的时候,我使用的较多的主要就是微信小程序的前端api,因为我们在这一部分的开发是比较基础的,遇到的问题一部分是在软件的生命周期方面,还有一部分比较困难的是微信小程序在调用云函数的同步异步这一类问题。
技术概述:
在团队实践开发时,我们选择使用微信小程序来进行开发。为了方便后端处理数据,我们选择了微信小程序官方自带的云数据库,这是一个比较简单的数据库,对数据库的操作则是通过微信的云函数调用来进行的。
微信云开发是微信团队联合腾讯云推出的专业的小程序开发服务。
开发者可以使用云开发快速开发小程序、小游戏、公众号网页等,并且原生打通微信开放能力。
开发者无需搭建服务器,可免鉴权直接使用平台提供的 API 进行业务开发。云函数是一段运行在云端的代码,无需管理服务器,在开发工具内编写、一键上传部署即可运行后端代码。
小程序内提供了专门用于云函数调用的 API。开发者可以在云函数内使用
wx-server-sdk
提供的getWXContext
方法获取到每次调用的上下文(appid
、openid
等),无需维护复杂的鉴权机制,即可获取天然可信任的用户登录态(openid
)。
定义云函数的方式
const cloud = require('wx-server-sdk')
exports.main = async (event, context) => {
let { userInfo, a, b} = event
let { OPENID, APPID } = cloud.getWXContext() // 这里获取到的 openId 和 appId 是可信的
let sum = a + b
return {
OPENID,
APPID,
sum
}
}
在开发者工具中上传部署云函数后,我们在小程序中可以这么调用:
wx.cloud.callFunction({
// 需调用的云函数名
name: 'add',
// 传给云函数的参数
data: {
a: 12,
b: 19,
},
// 成功回调
complete: console.log
})
// 当然 promise 方式也是支持的
wx.cloud.callFunction({
name: 'add',
data: {
a: 12,
b: 19
}
}).then(console.log)
产生问题的主要原因是 微信小程序中大部分的API请求都是异步的。也就是说他们执行的顺序并不固定。因此会发生当我想要调用云函数设置数据,然后再调用另一个云函数获取数据来设置页面参数的时候,会发生失效的情况。这在当时对我造成了极大的困难。
解决的方法有两种
第一种方式:回调函数执行,后一个方法写到前一个的回调函数中从而实现顺序执行
第二种方式:async-await 同步执行,此方法等待前面方法执行完毕才继续后续执行
async function checkString(content) {
// try {
// var res = await wx.cloud.callFunction({
// name: 'checkString',
// data: {
// content: content,
// }
// });
// if (res.result.errCode == 0)
// return true;
// return false;
// } catch (err) {
// console.log(err);
// return false;
// }
// }
// pubcom: async function (e) {
// wx.showLoading({
// title: '加载中',
// mask: true
// })
// var that = this
// var doc_id = that.data.commentID
// var content = that.data.comcon
// var formId = e.detail.formId;
// if (!content) {
// return
// }
// var isCheck = await common.checkString(content);
// if (!isCheck) {
// wx.showToast({
// title: '含有敏感词',
// image: "/assets/icon/icon-warning.png",
// });
// return
// }
//后续代码
对该问题总结:使用第二种方法相对来讲会比较麻烦。现在的微信小程序的客户端目前是完全支持Promise的,并不直接支持async await,如果想用async await,还需要npm 依赖,分离js文件 ,require调用。对初学者并不友好。
使用第一种方法相对简单,在回调函数里直接嵌套就行。但是如果嵌套过多,代码可读性就不高。
参考的博客